diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9bea433 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/nRFBox/bluetooth.cpp b/nRFBox/bluetooth.cpp index e3915b8..130a4db 100644 --- a/nRFBox/bluetooth.cpp +++ b/nRFBox/bluetooth.cpp @@ -207,7 +207,7 @@ void blescanLoop() { unsigned long currentMillis = millis(); if (currentMillis - scanStartTime >= scanDuration && !scanComplete) { scanComplete = true; - results = scan->getResults(); + results = *scan->getResults(); scan->stop(); u8g2.clearBuffer(); u8g2.drawStr(0, 10, "Scan complete."); @@ -359,7 +359,7 @@ BLEAdvertisementData getOAdvertisementData() { packet[i++] = 0x10; // Type ??? esp_fill_random(&packet[i], 3); - advertisementData.addData(std::string((char *)packet, 17)); + advertisementData.addData(String((char *)packet, 17)); return advertisementData; } @@ -391,7 +391,7 @@ void sourappleLoop() { BLEAdvertisementData oAdvertisementData = getOAdvertisementData(); Advertising->setDeviceAddress(dummy_addr, BLE_ADDR_TYPE_RANDOM); - Advertising->addServiceUUID(device_uuid); + Advertising->addServiceUUID(device_uuid.c_str()); Advertising->setAdvertisementData(oAdvertisementData); Advertising->setMinInterval(0x20); @@ -492,7 +492,7 @@ namespace Spoofer { uint8_t advDataRaw[SAMSUNG_ADV_SIZE]; memcpy(advDataRaw, SAMSUNG_ADV_TEMPLATE, SAMSUNG_ADV_SIZE); advDataRaw[SAMSUNG_ADV_SIZE - 1] = samsungModels[modelIndex].value; - advData.addData(std::string((char*)advDataRaw, SAMSUNG_ADV_SIZE)); + advData.addData(String((char*)advDataRaw, SAMSUNG_ADV_SIZE)); return true; } @@ -500,14 +500,14 @@ namespace Spoofer { uint8_t advDataRaw[GOOGLE_ADV_SIZE]; memcpy(advDataRaw, GOOGLE_ADV_TEMPLATE, GOOGLE_ADV_SIZE); advDataRaw[GOOGLE_ADV_SIZE - 1] = (uint8_t)(random(121) - 100); - advData.addData(std::string((char*)advDataRaw, GOOGLE_ADV_SIZE)); + advData.addData(String((char*)advDataRaw, GOOGLE_ADV_SIZE)); return true; } BLEAdvertisementData getAdvertisementData() { BLEAdvertisementData oAdvertisementData = BLEAdvertisementData(); if (deviceType <= 17) { // Apple (1–17) - oAdvertisementData.addData(std::string((char*)DEVICES[device_index], 31)); + oAdvertisementData.addData(String((char*)DEVICES[device_index], 31)); } else if (deviceType <= 20) { // Samsung (18–20) uint8_t samsungIndex = deviceType - 18; // 18→0, 19→1, 20→2 generateSamsungAdvPacket(samsungIndex, oAdvertisementData); @@ -621,7 +621,7 @@ namespace Spoofer { } BLEAdvertisementData oAdvertisementData = getAdvertisementData(); pAdvertising->setDeviceAddress(dummy_addr, BLE_ADDR_TYPE_RANDOM); - pAdvertising->addServiceUUID(devices_uuid); + pAdvertising->addServiceUUID(devices_uuid.c_str()); pAdvertising->setAdvertisementData(oAdvertisementData); pAdvertising->setMinInterval(0x20); // 32.5ms pAdvertising->setMaxInterval(0x20); diff --git a/nRFBox/config.h b/nRFBox/config.h index 5c02a53..33a6115 100644 --- a/nRFBox/config.h +++ b/nRFBox/config.h @@ -6,15 +6,28 @@ #ifndef CONFIG_H #define CONFIG_H +//#define NRFBOX_HARDWARE_V2_5 +#define NRFBOX_HARDWARE_V2_7 + + #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 // Push Buttons-specific Pins +#ifdef NRFBOX_HARDWARE_V2_5 +#define BUTTON_UP_PIN 26 +#define BUTTON_SELECT_PIN 32 +#define BUTTON_DOWN_PIN 33 +#define BTN_PIN_RIGHT 27 +#define BTN_PIN_LEFT 25 +#endif +#ifdef NRFBOX_HARDWARE_V2_7 #define BUTTON_UP_PIN 26 #define BUTTON_SELECT_PIN 33 #define BUTTON_DOWN_PIN 32 #define BTN_PIN_RIGHT 27 #define BTN_PIN_LEFT 25 +#endif // SD Card Slot-specific Pins #define SD_CS_PIN 5 @@ -39,13 +52,11 @@ #include #include #include +#ifdef NRFBOX_HARDWARE_V2_7 #include +#endif #include -U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); - -Adafruit_NeoPixel pixels(1, 14, NEO_GRB + NEO_KHZ800); - // BLE-specific dependencies #include #include diff --git a/nRFBox/nRFBox.ino b/nRFBox/nRFBox.ino index b413f21..cc7dd23 100644 --- a/nRFBox/nRFBox.ino +++ b/nRFBox/nRFBox.ino @@ -7,6 +7,10 @@ #include "setting.h" #include "config.h" +U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); + +Adafruit_NeoPixel pixels(1, 14, NEO_GRB + NEO_KHZ800); + extern uint8_t oledBrightness; const int NUM_ITEMS = 12; @@ -15,13 +19,13 @@ const int MAX_ITEM_LENGTH = 20; const unsigned char* bitmap_icons[NUM_ITEMS] = { bitmap_icon_scanner, bitmap_icon_analyzer, bitmap_icon_jammer, bitmap_icon_kill, bitmap_icon_ble_jammer, bitmap_icon_spoofer, bitmap_icon_apple, bitmap_icon_ble, - bitmap_icon_wifi, bitmap_icon_wifi_jammer, bitmap_icon_about, + bitmap_icon_wifi, bitmap_icon_wifi_jammer, bitmap_icon_about, bitmap_icon_setting }; -char menu_items[NUM_ITEMS][MAX_ITEM_LENGTH] = { +char menu_items[NUM_ITEMS][MAX_ITEM_LENGTH] = { "Scanner", "Analyzer", "WLAN Jammer", "Proto Kill", "BLE Jammer", - "BLE Spoofer", "Sour Apple", "BLE Scan", "WiFi Scan", + "BLE Spoofer", "Sour Apple", "BLE Scan", "WiFi Scan", "Deauther", "About", "Setting" }; @@ -42,16 +46,16 @@ void (*menu_loop_functions[NUM_ITEMS])() = { int item_selected = 0; int current_screen = 0; unsigned long last_button_time = 0; -const unsigned long DEBOUNCE_DELAY = 150; -const unsigned long POST_PRESS_DELAY = 200; - +const unsigned long DEBOUNCE_DELAY = 150; +const unsigned long POST_PRESS_DELAY = 200; + void drawMenu() { u8g2.clearBuffer(); if (current_screen != 0) return; - u8g2.setFont(u8g2_font_5x7_tf); - u8g2.drawBox(0, 0, 128, 8); - u8g2.setDrawColor(0); + u8g2.setFont(u8g2_font_5x7_tf); + u8g2.drawBox(0, 0, 128, 8); + u8g2.setDrawColor(0); char versionStr[16]; for (size_t i = 0; i < sizeof(txt_v); i++) { versionStr[i] = (char)txt_v[i]; @@ -63,17 +67,17 @@ void drawMenu() { Str(2, 7, txt_n, sizeof(txt_n)); int version_width = u8g2.getUTF8Width(versionStr); Str(128 - version_width - 2, 7, txt_v, sizeof(txt_v)); - u8g2.setDrawColor(1); - u8g2.drawHLine(0, 8, 128); + u8g2.setDrawColor(1); + u8g2.drawHLine(0, 8, 128); const int icons_per_row = 3; const int icons_per_col = 2; - const int max_display_items = icons_per_row * icons_per_col; + const int max_display_items = icons_per_row * icons_per_col; int selected_col = item_selected % icons_per_row; int selected_row = (item_selected / icons_per_row) % icons_per_col; if (item_selected == 12) { - selected_row = 1; + selected_row = 1; } int highlight_x = 13 + selected_col * 40; int highlight_y = 14 + selected_row * 24; @@ -82,12 +86,12 @@ void drawMenu() { if (start_row < 0) start_row = 0; int total_rows = (NUM_ITEMS + icons_per_row - 1) / icons_per_row; if (start_row > total_rows - icons_per_col) start_row = total_rows - icons_per_col; - if (start_row < 0) start_row = 0; + if (start_row < 0) start_row = 0; int start_item = start_row * icons_per_row; int end_item = min(NUM_ITEMS, start_item + max_display_items); for (int i = start_item; i < end_item; i++) { - int idx = i - start_item; + int idx = i - start_item; int row = idx / icons_per_row; int col = idx % icons_per_row; int x_pos = 13 + col * 40; @@ -95,25 +99,25 @@ void drawMenu() { u8g2.drawXBMP(x_pos, y_pos, 16, 16, bitmap_icons[i]); } - u8g2.drawRFrame(highlight_x - 3, highlight_y - 3, 22, 22, 3); + u8g2.drawRFrame(highlight_x - 3, highlight_y - 3, 22, 22, 3); u8g2.setDrawColor(0); - u8g2.drawRFrame(highlight_x - 2, highlight_y - 2, 22, 22, 3); + u8g2.drawRFrame(highlight_x - 2, highlight_y - 2, 22, 22, 3); u8g2.setDrawColor(1); - u8g2.setFont(u8g2_font_5x8_tf); + u8g2.setFont(u8g2_font_5x8_tf); int name_width = u8g2.getUTF8Width(menu_items[item_selected]); int name_x = (128 - name_width) / 2; - u8g2.drawStr(name_x, 64, menu_items[item_selected]); + u8g2.drawStr(name_x, 64, menu_items[item_selected]); - u8g2.drawFrame(124, 18, 4, 38); + u8g2.drawFrame(124, 18, 4, 38); int bar_height = 38 / total_rows; - u8g2.drawBox(124, 18 + (bar_height * start_row), 4, bar_height); + u8g2.drawBox(124, 18 + (bar_height * start_row), 4, bar_height); if (start_row > 0) { - u8g2.drawStr(124, 15, "."); + u8g2.drawStr(124, 15, "."); } if (start_row < total_rows - 1) { - u8g2.drawStr(124, 64, "."); + u8g2.drawStr(124, 64, "."); } u8g2.sendBuffer(); @@ -123,7 +127,7 @@ void drawMenu() { bool readButton(int pin) { if (digitalRead(pin) == LOW && (millis() - last_button_time > DEBOUNCE_DELAY)) { last_button_time = millis(); - delay(POST_PRESS_DELAY); + delay(POST_PRESS_DELAY); return true; } return false; @@ -168,27 +172,27 @@ void loop() { } if (readButton(BUTTON_SELECT_PIN)) { current_screen = 1; - for (int cycle = 0; cycle < 2; cycle++) { + for (int cycle = 0; cycle < 2; cycle++) { for (int i = 0; i < 3; i++) { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tr); u8g2.drawStr(30, 32, "Loading"); - + String dots = ""; for (int j = 0; j <= i; j++) { dots += "."; setNeoPixelColour("white"); } setNeoPixelColour("0"); - - u8g2.drawStr(73, 32, dots.c_str()); - + + u8g2.drawStr(73, 32, dots.c_str()); + u8g2.sendBuffer(); - delay(200); + delay(200); } } menu_functions[item_selected](); - + while (current_screen == 1) { if (menu_loop_functions[item_selected]) { menu_loop_functions[item_selected](); diff --git a/nRFBox/setting.cpp b/nRFBox/setting.cpp index 8f02a05..7b66b3b 100644 --- a/nRFBox/setting.cpp +++ b/nRFBox/setting.cpp @@ -7,6 +7,9 @@ #include "icon.h" #include "config.h" +bool neoPixelActive = false; +uint8_t oledBrightness = 100; + RF24 RadioA(NRF_CE_PIN_A, NRF_CSN_PIN_A); RF24 RadioB(NRF_CE_PIN_B, NRF_CSN_PIN_B); RF24 RadioC(NRF_CE_PIN_C, NRF_CSN_PIN_C); @@ -117,6 +120,7 @@ bool buttonUpPressed = false; bool buttonDownPressed = false; bool buttonSelectPressed = false; +#ifdef NRFBOX_HARDWARE_V2_7 void updateFirmware() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_6x10_tf); @@ -173,6 +177,9 @@ void updateFirmware() { firmware.close(); } +#else +void updateFirmware() {} +#endif void toggleOption(int option) { if (option == 0) { @@ -249,11 +256,13 @@ void displayMenu() { u8g2.drawStr(0, 45, " Brightness: "); } +#ifdef NRFBOX_HARDWARE_V2_7 if (currentOption == 2) { u8g2.drawStr(0, 60, "> Update Firmware"); } else { u8g2.drawStr(0, 60, " Update Firmware"); } +#endif u8g2.setCursor(80, 30); u8g2.print(neoPixelActive ? "Enabled" : "Disabled"); diff --git a/nRFBox/setting.h b/nRFBox/setting.h index 14784d9..3d2da5d 100644 --- a/nRFBox/setting.h +++ b/nRFBox/setting.h @@ -13,7 +13,9 @@ #include #include #include +#ifdef NRFBOX_HARDWARE_V2_7 #include +#endif #include #include @@ -26,10 +28,8 @@ void flash(int numberOfFlashes, const std::vector& colors, const st extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2; extern Adafruit_NeoPixel pixels; -//extern bool neoPixelActive; - -bool neoPixelActive = false; -uint8_t oledBrightness = 100; +extern bool neoPixelActive; +extern uint8_t oledBrightness; extern RF24 RadioA; extern RF24 RadioB; diff --git a/nRFBox/wifi.cpp b/nRFBox/wifi.cpp index 63cb189..bc9e7a3 100644 --- a/nRFBox/wifi.cpp +++ b/nRFBox/wifi.cpp @@ -182,9 +182,11 @@ bool scanning = false; uint32_t last_packet_time = 0; String lastNeoPixelColour = "0"; +/* extern "C" int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3) { return 0; } +*/ void wsl_bypasser_send_raw_frame(const uint8_t *frame_buffer, int size) { esp_err_t res = esp_wifi_80211_tx(WIFI_IF_AP, frame_buffer, size, false);