Skip to content

Spezify hardware version #72

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

.DS_Store
14 changes: 7 additions & 7 deletions nRFBox/bluetooth.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -492,22 +492,22 @@ 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;
}

bool generateGoogleAdvPacket(BLEAdvertisementData& advData) {
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);
Expand Down Expand Up @@ -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);
Expand Down
19 changes: 15 additions & 4 deletions nRFBox/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -39,13 +52,11 @@
#include <Preferences.h>
#include <vector>
#include <string>
#ifdef NRFBOX_HARDWARE_V2_7
#include <SD.h>
#endif
#include <Update.h>

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 <BLEDevice.h>
#include <BLEUtils.h>
Expand Down
66 changes: 35 additions & 31 deletions nRFBox/nRFBox.ino
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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"
};

Expand All @@ -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];
Expand All @@ -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;
Expand All @@ -82,38 +86,38 @@ 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;
int y_pos = 14 + row * 24;
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();

Expand All @@ -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;
Expand Down Expand Up @@ -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]();
Expand Down
9 changes: 9 additions & 0 deletions nRFBox/setting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -173,6 +177,9 @@ void updateFirmware() {

firmware.close();
}
#else
void updateFirmware() {}
#endif

void toggleOption(int option) {
if (option == 0) {
Expand Down Expand Up @@ -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");
Expand Down
8 changes: 4 additions & 4 deletions nRFBox/setting.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
#include <RF24.h>
#include <vector>
#include <string>
#ifdef NRFBOX_HARDWARE_V2_7
#include <SD.h>
#endif
#include <Update.h>
#include <SPI.h>

Expand All @@ -26,10 +28,8 @@ void flash(int numberOfFlashes, const std::vector<std::string>& 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;
Expand Down
2 changes: 2 additions & 0 deletions nRFBox/wifi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down