Skip to content

Commit

Permalink
Now generates tmp.sub file for transmission
Browse files Browse the repository at this point in the history
  • Loading branch information
David Lee committed Nov 30, 2023
1 parent c593c54 commit 8f4d942
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 7 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ This app triggers restaurant pagers in a brute force manner, useful to test if d
- Plug your Flipper Zero in via USB. <br>
- Copy the contents of this folder into the applications_user folder of your firmware. <br>

## Can this Brute-Force Attacks
In Theory yes, but I wouldn't recommend trying it. Most pagers support 8191 Stations. Triggering ~30 Pagers per station would easily take over 2h. That when only sending each trigger once. It is recommended is to repeat the signal approx 10x, so that would already take all day.
Chances are also, that your Flipper Zero will crash in that time.

Then run the command:
```
.\fbt launch APPSRC=applications_user/meal_pager
Expand Down
1 change: 1 addition & 0 deletions application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ App(
fap_icon="icons/meal_pager_10px.png",
fap_icon_assets="icons",
fap_category="Sub-Ghz",
fap_version="0.1",
)
9 changes: 9 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Meal Pager Trigger App

Can make a range of Restaurant Pagers ring.

## Features
- Support for Retekess T119, TD157, TD165, TD174
- Select Range of Station Ids
- Select Range of Pager Ids

3 changes: 3 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## v0.1

Can now generate a temporary .sub file for Retekess T119 Pager triggers. Must still be run via SubGhz App
58 changes: 58 additions & 0 deletions helpers/meal_pager_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,64 @@ static void meal_pager_close_config_file(FlipperFormat* file) {
flipper_format_free(file);
}

FlipperFormat* meal_pager_save_subghz_buffer_file_start(void* context) {
// SubGhz TXRX can only be loaded with files, makes sense as to save RAM
Meal_Pager* app = context;
UNUSED(app);
FURI_LOG_D(TAG, "Creating Temp File");
Storage* storage = furi_record_open(RECORD_STORAGE);
FlipperFormat* ff = flipper_format_file_alloc(storage);

// Overwrite wont work, so delete first
if(storage_file_exists(storage, MEAL_PAGER_TMP_FILE)) {
storage_simply_remove(storage, MEAL_PAGER_TMP_FILE);
}

// Open File, create if not exists
if(!storage_common_stat(storage, MEAL_PAGER_TMP_FILE, NULL) == FSE_OK) {
FURI_LOG_D(TAG, "Config file %s is not found. Will create new.", MEAL_PAGER_SETTINGS_SAVE_PATH);
if(storage_common_stat(storage, CONFIG_FILE_DIRECTORY_PATH, NULL) == FSE_NOT_EXIST) {
FURI_LOG_D(
TAG,
"Directory %s doesn't exist. Will create new.",
CONFIG_FILE_DIRECTORY_PATH);
if(!storage_simply_mkdir(storage, CONFIG_FILE_DIRECTORY_PATH)) {
FURI_LOG_D(TAG, "Error creating directory %s", CONFIG_FILE_DIRECTORY_PATH);
}
}
}

if(!flipper_format_file_open_new(ff, MEAL_PAGER_TMP_FILE)) {
//totp_close_config_file(fff_file);
FURI_LOG_D(TAG, "Error creating new file %s", MEAL_PAGER_TMP_FILE);
meal_pager_close_storage();
return ff;
}

bool success = flipper_format_write_header_cstr(ff, MEAL_PAGER_SUBGHZ_FILE_TYPE, MEAL_PAGER_SUBGHZ_FILE_VERSION) &&
flipper_format_write_string_cstr(ff, "Frequency", MEAL_PAGER_SUBGHZ_FILE_FREQUENCY) &&
flipper_format_write_string_cstr(ff, "Preset", MEAL_PAGER_SUBGHZ_FILE_PRESET) &&
flipper_format_write_string_cstr(ff, "Protocol", MEAL_PAGER_SUBGHZ_FILE_Protocol);
UNUSED(success);

return ff;
}

void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff) {
Meal_Pager* app = context;
UNUSED(app);
FURI_LOG_D(TAG, "Closing Temp File");
if(!flipper_format_rewind(ff)) {
meal_pager_close_config_file(ff);
FURI_LOG_E(TAG, "Rewind error");
meal_pager_close_storage();
return;
}

meal_pager_close_config_file(ff);
meal_pager_close_storage();
}

void meal_pager_save_settings(void* context) {
Meal_Pager* app = context;
if (app->save_settings == 0) {
Expand Down
10 changes: 10 additions & 0 deletions helpers/meal_pager_storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@
#define MEAL_PAGER_SETTINGS_KEY_LED "Led"
#define MEAL_PAGER_SETTINGS_KEY_SPEAKER "Speaker"
#define MEAL_PAGER_SETTINGS_KEY_SAVE_SETTINGS "SaveSettings"
#define MEAL_PAGER_TMP_FILE CONFIG_FILE_DIRECTORY_PATH "/tmp.sub"
#define MEAL_PAGER_SUBGHZ_FILE_TYPE "Flipper SubGhz RAW File"
#define MEAL_PAGER_SUBGHZ_FILE_VERSION 1
#define MEAL_PAGER_SUBGHZ_FILE_FREQUENCY "433920000"
#define MEAL_PAGER_SUBGHZ_FILE_PRESET "FuriHalSubGhzPresetOok650Async"
#define MEAL_PAGER_SUBGHZ_FILE_Protocol "RAW"

FlipperFormat* meal_pager_save_subghz_buffer_file_start(void* context);

void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff);

void meal_pager_save_settings(void* context);
void meal_pager_read_settings(void* context);
15 changes: 10 additions & 5 deletions helpers/retekess/meal_pager_retekess_t119.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void reverse(char* str) {
}
}

void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager) {
static void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager, FlipperFormat* ff) {
Meal_Pager* app = context;
char pagerId[11];
//char stationPagerId[25];
Expand Down Expand Up @@ -156,12 +156,13 @@ void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uin
char* manchester = encManchester(fullId, 0);
FURI_LOG_D(TAG, "Manchester: %s", manchester);
char* rawSignal = genRawData(200, 600, manchester);
FURI_LOG_D(TAG, "Raw Data: %s", rawSignal);
FURI_LOG_D(TAG, "RAW_Data: %s", rawSignal);
flipper_format_write_string_cstr(ff, "RAW_Data", rawSignal);
free(manchester);
free(rawSignal);
}

void meal_pager_retekess_t119_generate_station(void* context, uint32_t station) {
static void meal_pager_retekess_t119_generate_station(void* context, uint32_t station, FlipperFormat* ff) {
Meal_Pager* app = context;
FURI_LOG_D(TAG, "Generating T119 Data for Station %lu", station);
app->current_station = station;
Expand All @@ -171,7 +172,7 @@ void meal_pager_retekess_t119_generate_station(void* context, uint32_t station)
reverse(stationId);
meal_pager_transmit_model_set_station(app->meal_pager_transmit, app->current_station);
for (u_int32_t i = app->current_pager;i <= app->last_pager; i++) {
meal_pager_retekess_t119_generate_pager(app, stationId, i);
meal_pager_retekess_t119_generate_pager(app, stationId, i, ff);
//furi_thread_flags_wait(0, FuriFlagWaitAny, 1);
}
}
Expand All @@ -182,9 +183,13 @@ void meal_pager_retekess_t119_generate_all(void* context) {
app->current_pager = 1;
app->current_station = app->first_station;

FlipperFormat* ff = meal_pager_save_subghz_buffer_file_start(app);

for (u_int32_t i = app->current_station;i <= app->last_station; i++) {
meal_pager_retekess_t119_generate_station(app, i);
meal_pager_retekess_t119_generate_station(app, i, ff);
//furi_thread_flags_wait(0, FuriFlagWaitAny, 100);
}

meal_pager_save_subghz_buffer_stop(app, ff);
}

4 changes: 2 additions & 2 deletions helpers/retekess/meal_pager_retekess_t119.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ void reverse(char* str);

void customConcat(char* dest, const char* src);

void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager);
//void meal_pager_retekess_t119_generate_pager(void* context, char* stationId, uint32_t pager);

void meal_pager_retekess_t119_generate_station(void* context, uint32_t station);
//void meal_pager_retekess_t119_generate_station(void* context, uint32_t station);

void meal_pager_retekess_t119_generate_all(void* context);

0 comments on commit 8f4d942

Please sign in to comment.