Compare commits
No commits in common. "ef5352a7f1964335630790fbf72d9d2a43815523" and "bc1a8ec19722914b1203d06798eb235e4ea58b0b" have entirely different histories.
ef5352a7f1
...
bc1a8ec197
140
README.md
140
README.md
|
|
@ -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.
|
|
||||||
|
|
|
||||||
|
|
@ -203,7 +203,9 @@ void ble_loop()
|
||||||
}
|
}
|
||||||
else if (btnBack())
|
else if (btnBack())
|
||||||
{
|
{
|
||||||
|
ble_scan();
|
||||||
|
selectedIndex = 0;
|
||||||
|
ble_drawMenu();
|
||||||
lastPress = millis();
|
lastPress = millis();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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); }
|
|
||||||
|
|
|
||||||
|
|
@ -6,5 +6,3 @@ bool btnUp();
|
||||||
bool btnDown();
|
bool btnDown();
|
||||||
bool btnSelect();
|
bool btnSelect();
|
||||||
bool btnBack();
|
bool btnBack();
|
||||||
bool btnRight();
|
|
||||||
bool btnLeft();
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue