Compare commits

..

No commits in common. "ef5352a7f1964335630790fbf72d9d2a43815523" and "bc1a8ec19722914b1203d06798eb235e4ea58b0b" have entirely different histories.

8 changed files with 114 additions and 227 deletions

140
README.md
View File

@ -1,130 +1,52 @@
# 🛰️ Orion RF (WIP) # 🛰️ Orion RF (WIP)
**Orion RF** is a portable RF & wireless experimentation toolkit built for the ESP32 platform with NRF24 support. **Orion RF** is a portable RF & wireless experimentation toolkit built for the ESP32 platform.
> ⚠️ This project is currently under active development. Some features are experimental, incomplete, or may change frequently. > ⚠️ This project is **work in progress** — many features are planned but not yet implemented.
--- ---
# 🚀 Current Features ## 🚀 Current Features
## 📡 Wireless Tools * **BLE Scanning**
### BLE Scan * Discover nearby Bluetooth Low Energy devices
- Discover nearby Bluetooth Low Energy devices * Display device info (MAC, RSSI, etc.)
- View MAC address, RSSI, and device information
- Real-time scanning interface
### WiFi Scan * **WiFi Scanning**
- Scan nearby WiFi access points
- View:
- SSID
- Signal strength (RSSI)
- Channel
- Encryption type
### WiFi Analyzer * Scan nearby access points
- Analyze surrounding WiFi activity * View SSID, signal strength, channel, encryption
- Useful for understanding channel congestion and wireless environments
* **WiFi Packet Analysis**
* Basic packet inspection and monitoring
* Useful for learning wireless traffic behavior
* **BadUSB**
* HID-based payload execution
* Emulate keyboard input for automation/testing
- **Jammer ()**
- BLE/Bluetooth Jammer (Works with single NRF right now)
### RF Capture *(WIP)*
- Experimental RF packet capture functionality
- Replay support planned
--- ---
# 📻 NRF24 Tools ## 🧩 Project Status
### BLE Jammer
- NRF24-based BLE interference testing
- Functional
### Bluetooth Jammer
- NRF24-based Bluetooth interference testing
- Functional
### WiFi Jammer
- NRF24-based WiFi interference testing
- Experimental
> ⚠️ These tools are intended strictly for wireless research, testing, and educational purposes in authorized environments.
---
# ⌨️ BadUSB
- HID keyboard emulation
- Execute automated payloads/scripts
- Useful for testing and automation workflows
---
# 🖱️ BLE Mouse
- ESP32-based Bluetooth mouse emulation
- Experimental HID functionality
---
# 🔧 System Utilities
### System Info
- Display device/system information
- Useful for debugging and diagnostics
### Device Check
- Verify connected peripherals/modules
- Hardware diagnostics utility
### Restart
- Quick device reboot option from UI
---
# 🧩 Project Status
| Feature | Status | | Feature | Status |
| -------------------- | ----------------- | | ----------------- | ---------- |
| BLE Scan | ✅ Working | | BLE Scan | ✅ Working |
| WiFi Scan | ✅ Working | | WiFi Scan | ✅ Working |
| WiFi Analyzer | ✅ Working | | Packet Analysis | ✅ Working |
| BadUSB | ✅ Working | | BadUSB | ✅ Working |
| BLE Mouse | ✅ Working | | Jammer | Works Partially |
| BLE Jammer | ✅ Working | | SD Card | 🚧 WIP |
| Bluetooth Jammer | ✅ Working | | RF Capture/Replay | 🚧 WIP |
| WiFi Jammer | ⚠️ Experimental | | Emulator | 🚧 WIP |
| RF Capture | 🚧 WIP |
| RF Replay | 🚧 WIP |
| SD Card Support | 🚧 Planned |
| Emulator | 🚧 Planned |
| NFC | 🚧 Planned | | NFC | 🚧 Planned |
---
# 🛠️ Hardware
- 1 x ESP32-S3
- 2 x NRF24L01 Modules
- 2 x CC1101 Modules
- 1 x OLED Display
- Battery-powered portable setup
---
# 📌 Notes
- Designed primarily for learning, experimentation, and embedded RF research
- Optimized for portable usage
- UI-driven navigation system
---
# ⚖️ Disclaimer
This project is intended for:
- Educational purposes
- RF experimentation
- Hardware research
- Authorized security testing
The authors are not responsible for misuse or illegal operation of this project.

View File

@ -203,7 +203,9 @@ void ble_loop()
} }
else if (btnBack()) else if (btnBack())
{ {
ble_scan();
selectedIndex = 0;
ble_drawMenu();
lastPress = millis(); lastPress = millis();
return;
} }
} }

View File

@ -1,6 +1,10 @@
#include "buttons.h" #include "buttons.h"
#include <Arduino.h> #include <Arduino.h>
#include "config.h"
#define BTN_UP 4
#define BTN_DOWN 5
#define BTN_SELECT 6
#define BTN_BACK 7
void buttonsInit() void buttonsInit()
{ {
@ -8,13 +12,9 @@ void buttonsInit()
pinMode(BTN_DOWN, INPUT_PULLUP); pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(BTN_SELECT, INPUT_PULLUP); pinMode(BTN_SELECT, INPUT_PULLUP);
pinMode(BTN_BACK, INPUT_PULLUP); pinMode(BTN_BACK, INPUT_PULLUP);
pinMode(BTN_RIGHT, INPUT_PULLUP);
pinMode(BTN_LEFT, INPUT_PULLUP);
} }
bool btnUp() { return !digitalRead(BTN_UP); } bool btnUp() { return !digitalRead(BTN_UP); }
bool btnDown() { return !digitalRead(BTN_DOWN); } bool btnDown() { return !digitalRead(BTN_DOWN); }
bool btnSelect() { return !digitalRead(BTN_SELECT); } bool btnSelect() { return !digitalRead(BTN_SELECT); }
bool btnBack() { return !digitalRead(BTN_BACK); } bool btnBack() { return !digitalRead(BTN_BACK); }
bool btnRight() { return !digitalRead(BTN_RIGHT); }
bool btnLeft() { return !digitalRead(BTN_LEFT); }

View File

@ -6,5 +6,3 @@ bool btnUp();
bool btnDown(); bool btnDown();
bool btnSelect(); bool btnSelect();
bool btnBack(); bool btnBack();
bool btnRight();
bool btnLeft();

View File

@ -16,10 +16,10 @@ extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
// ===== RESULTS ===== // ===== RESULTS =====
struct DeviceStatus { struct DeviceStatus {
bool nrf_link = false;
bool nrf1 = false; bool nrf1 = false;
bool nrf2 = false; bool nrf2 = false;
bool cc1101_1 = false; bool cc1101 = false;
bool cc1101_2 = false;
bool oled = true; bool oled = true;
bool buttons = false; bool buttons = false;
}; };
@ -37,7 +37,7 @@ bool checkNRF(RF24 &radio)
} }
// ===== CC1101 CHECK ===== // ===== CC1101 CHECK =====
bool checkCC1101_1() bool checkCC1101()
{ {
ELECHOUSE_cc1101.setSpiPin( ELECHOUSE_cc1101.setSpiPin(
cc1101_SCK, cc1101_SCK,
@ -51,21 +51,6 @@ bool checkCC1101_1()
return ELECHOUSE_cc1101.getCC1101(); return ELECHOUSE_cc1101.getCC1101();
} }
bool checkCC1101_2()
{
ELECHOUSE_cc1101.setSpiPin(
cc1101_SCK,
cc1101_MISO,
cc1101_MOSI,
CC1101_2_CS
);
delay(5); // important stabilization
return ELECHOUSE_cc1101.getCC1101();
}
// ===== BUTTON CHECK ===== // ===== BUTTON CHECK =====
bool checkButtons() bool checkButtons()
{ {
@ -97,8 +82,8 @@ bool checkButtons()
const char* labels[MAX_ITEMS] = { const char* labels[MAX_ITEMS] = {
"NRF1", "NRF1",
"NRF2", "NRF2",
"CC1101_1", "LINK",
"CC1101_2", "CC1101",
"BUTTONS", "BUTTONS",
"OLED" "OLED"
}; };
@ -112,8 +97,8 @@ void drawStatus(DeviceStatus &s)
{ {
values[0] = s.nrf1; values[0] = s.nrf1;
values[1] = s.nrf2; values[1] = s.nrf2;
values[2] = s.cc1101_1; values[2] = s.nrf_link;
values[3] = s.cc1101_2; values[3] = s.cc1101;
values[4] = s.buttons; values[4] = s.buttons;
values[5] = s.oled; values[5] = s.oled;
@ -154,6 +139,56 @@ void drawStatus(DeviceStatus &s)
u8g2.sendBuffer(); u8g2.sendBuffer();
} }
bool testNRFLink()
{
const byte address[6] = "00001";
uint8_t payload = 0xAB;
uint8_t received = 0;
// --- init radios ---
if (!radio1.begin(RADIO_SPI)) return false;
if (!radio2.begin(RADIO_SPI)) return false;
radio1.setPALevel(RF24_PA_LOW);
radio2.setPALevel(RF24_PA_LOW);
radio1.setDataRate(RF24_1MBPS);
radio2.setDataRate(RF24_1MBPS);
radio1.setChannel(100);
radio2.setChannel(100);
radio1.setAutoAck(false);
radio2.setAutoAck(false);
// --- configure pipes ---
radio1.openWritingPipe(address);
radio2.openReadingPipe(0, address);
radio2.startListening();
delay(50);
// --- send ---
radio1.stopListening();
bool sent = radio1.write(&payload, sizeof(payload));
if (!sent) return false;
// --- receive ---
unsigned long start = millis();
while (millis() - start < 200)
{
if (radio2.available())
{
radio2.read(&received, sizeof(received));
return (received == payload);
}
}
return false;
}
// ===== MAIN ===== // ===== MAIN =====
void device_check_run() void device_check_run()
@ -164,12 +199,12 @@ void device_check_run()
// NRF // NRF
// NRF link test // NRF link test
status.nrf_link = testNRFLink();
status.nrf1 = checkNRF(radio1); status.nrf1 = checkNRF(radio1);
status.nrf2 = checkNRF(radio2); status.nrf2 = checkNRF(radio2);
// CC1101 // CC1101
status.cc1101_1 = checkCC1101_1(); status.cc1101 = checkCC1101();
status.cc1101_2 = checkCC1101_1();
// Buttons // Buttons
status.buttons = checkButtons(); status.buttons = checkButtons();

View File

@ -9,7 +9,7 @@
#include "wifi_scan.h" #include "wifi_scan.h"
#include "wifi_analyzer.h" #include "wifi_analyzer.h"
#include "device_check.h" #include "device_check.h"
#include "ble_mouse.h" #include "blemouse.h"
#include "sysinfo.h" #include "sysinfo.h"
#include "BleMouse.h" #include "BleMouse.h"
@ -36,8 +36,7 @@ Menu mainMenu = {mainMenuItems, sizeof(mainMenuItems) / sizeof(mainMenuItems[0])
// NRF Tools menu // NRF Tools menu
const char *nrfToolsItems[] = { const char *nrfToolsItems[] = {
"BLE Jammer", "BLE Jammer",
"Bluetooth Jammer", "Bluetooth Jammer"
"Wifi Jammer"
}; };
Menu nrfToolsMenu = {nrfToolsItems, sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])}; Menu nrfToolsMenu = {nrfToolsItems, sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])};
@ -227,82 +226,13 @@ void launchFeature()
device_check_run(); device_check_run();
break; break;
case 8: case 8:
{
// wait for button release
delay(200);
while (btnSelect())
delay(10);
bool confirm = false;
while (1)
{
u8g2.clearBuffer(); u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x13_tr); u8g2.setFont(u8g2_font_6x13_tr);
u8g2.drawStr(30, 30, "Restarting...");
u8g2.drawStr(18, 18, "Restart Device?");
if (confirm)
{
u8g2.drawBox(10, 35, 45, 15);
u8g2.setDrawColor(0);
u8g2.drawStr(20, 47, "YES");
u8g2.setDrawColor(1);
u8g2.drawStr(75, 47, "NO");
}
else
{
u8g2.drawStr(20, 47, "YES");
u8g2.drawBox(65, 35, 45, 15);
u8g2.setDrawColor(0);
u8g2.drawStr(78, 47, "NO");
u8g2.setDrawColor(1);
}
u8g2.sendBuffer(); u8g2.sendBuffer();
if (btnLeft() || btnUp())
{
confirm = true;
delay(150);
}
if (btnRight() || btnDown())
{
confirm = false;
delay(150);
}
if (btnSelect())
{
delay(150);
if (confirm)
{
u8g2.clearBuffer();
u8g2.drawStr(28, 30, "Restarting...");
u8g2.sendBuffer();
delay(1000); delay(1000);
ESP.restart(); ESP.restart();
}
else
{
break; break;
}
}
if (btnBack())
{
delay(150);
break;
}
}
}
break;
case 9: case 9:
// Begin Ble mouse // Begin Ble mouse
bleMouse.begin(); bleMouse.begin();