Compare commits
5 Commits
bc1a8ec197
...
ef5352a7f1
| Author | SHA1 | Date |
|---|---|---|
|
|
ef5352a7f1 | |
|
|
a51e4c5c84 | |
|
|
8f6c64d4b3 | |
|
|
2e20bbf311 | |
|
|
3fdbc971b5 |
140
README.md
140
README.md
|
|
@ -1,52 +1,130 @@
|
|||
|
||||
# 🛰️ Orion RF (WIP)
|
||||
|
||||
**Orion RF** is a portable RF & wireless experimentation toolkit built for the ESP32 platform.
|
||||
**Orion RF** is a portable RF & wireless experimentation toolkit built for the ESP32 platform with NRF24 support.
|
||||
|
||||
> ⚠️ This project is **work in progress** — many features are planned but not yet implemented.
|
||||
> ⚠️ This project is currently under active development. Some features are experimental, incomplete, or may change frequently.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Current Features
|
||||
# 🚀 Current Features
|
||||
|
||||
* **BLE Scanning**
|
||||
## 📡 Wireless Tools
|
||||
|
||||
* Discover nearby Bluetooth Low Energy devices
|
||||
* Display device info (MAC, RSSI, etc.)
|
||||
### BLE Scan
|
||||
- Discover nearby Bluetooth Low Energy devices
|
||||
- View MAC address, RSSI, and device information
|
||||
- Real-time scanning interface
|
||||
|
||||
* **WiFi Scanning**
|
||||
### WiFi Scan
|
||||
- Scan nearby WiFi access points
|
||||
- View:
|
||||
- SSID
|
||||
- Signal strength (RSSI)
|
||||
- Channel
|
||||
- Encryption type
|
||||
|
||||
* Scan nearby access points
|
||||
* View SSID, signal strength, channel, encryption
|
||||
|
||||
* **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)
|
||||
### WiFi Analyzer
|
||||
- Analyze surrounding WiFi activity
|
||||
- Useful for understanding channel congestion and wireless environments
|
||||
|
||||
### RF Capture *(WIP)*
|
||||
- Experimental RF packet capture functionality
|
||||
- Replay support planned
|
||||
|
||||
---
|
||||
|
||||
## 🧩 Project Status
|
||||
# 📻 NRF24 Tools
|
||||
|
||||
### 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 |
|
||||
| ----------------- | ---------- |
|
||||
| -------------------- | ----------------- |
|
||||
| BLE Scan | ✅ Working |
|
||||
| WiFi Scan | ✅ Working |
|
||||
| Packet Analysis | ✅ Working |
|
||||
| WiFi Analyzer | ✅ Working |
|
||||
| BadUSB | ✅ Working |
|
||||
| Jammer | Works Partially |
|
||||
| SD Card | 🚧 WIP |
|
||||
| RF Capture/Replay | 🚧 WIP |
|
||||
| Emulator | 🚧 WIP |
|
||||
| BLE Mouse | ✅ Working |
|
||||
| BLE Jammer | ✅ Working |
|
||||
| Bluetooth Jammer | ✅ Working |
|
||||
| WiFi Jammer | ⚠️ Experimental |
|
||||
| RF Capture | 🚧 WIP |
|
||||
| RF Replay | 🚧 WIP |
|
||||
| SD Card Support | 🚧 Planned |
|
||||
| Emulator | 🚧 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,9 +203,7 @@ void ble_loop()
|
|||
}
|
||||
else if (btnBack())
|
||||
{
|
||||
ble_scan();
|
||||
selectedIndex = 0;
|
||||
ble_drawMenu();
|
||||
lastPress = millis();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
#include "buttons.h"
|
||||
#include <Arduino.h>
|
||||
|
||||
#define BTN_UP 4
|
||||
#define BTN_DOWN 5
|
||||
#define BTN_SELECT 6
|
||||
#define BTN_BACK 7
|
||||
#include "config.h"
|
||||
|
||||
void buttonsInit()
|
||||
{
|
||||
|
|
@ -12,9 +8,13 @@ void buttonsInit()
|
|||
pinMode(BTN_DOWN, INPUT_PULLUP);
|
||||
pinMode(BTN_SELECT, INPUT_PULLUP);
|
||||
pinMode(BTN_BACK, INPUT_PULLUP);
|
||||
pinMode(BTN_RIGHT, INPUT_PULLUP);
|
||||
pinMode(BTN_LEFT, INPUT_PULLUP);
|
||||
}
|
||||
|
||||
bool btnUp() { return !digitalRead(BTN_UP); }
|
||||
bool btnDown() { return !digitalRead(BTN_DOWN); }
|
||||
bool btnSelect() { return !digitalRead(BTN_SELECT); }
|
||||
bool btnBack() { return !digitalRead(BTN_BACK); }
|
||||
bool btnRight() { return !digitalRead(BTN_RIGHT); }
|
||||
bool btnLeft() { return !digitalRead(BTN_LEFT); }
|
||||
|
|
|
|||
|
|
@ -6,3 +6,5 @@ bool btnUp();
|
|||
bool btnDown();
|
||||
bool btnSelect();
|
||||
bool btnBack();
|
||||
bool btnRight();
|
||||
bool btnLeft();
|
||||
|
|
|
|||
|
|
@ -16,10 +16,10 @@ extern U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2;
|
|||
|
||||
// ===== RESULTS =====
|
||||
struct DeviceStatus {
|
||||
bool nrf_link = false;
|
||||
bool nrf1 = false;
|
||||
bool nrf2 = false;
|
||||
bool cc1101 = false;
|
||||
bool cc1101_1 = false;
|
||||
bool cc1101_2 = false;
|
||||
bool oled = true;
|
||||
bool buttons = false;
|
||||
};
|
||||
|
|
@ -37,7 +37,7 @@ bool checkNRF(RF24 &radio)
|
|||
}
|
||||
|
||||
// ===== CC1101 CHECK =====
|
||||
bool checkCC1101()
|
||||
bool checkCC1101_1()
|
||||
{
|
||||
ELECHOUSE_cc1101.setSpiPin(
|
||||
cc1101_SCK,
|
||||
|
|
@ -51,6 +51,21 @@ bool checkCC1101()
|
|||
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 =====
|
||||
bool checkButtons()
|
||||
{
|
||||
|
|
@ -82,8 +97,8 @@ bool checkButtons()
|
|||
const char* labels[MAX_ITEMS] = {
|
||||
"NRF1",
|
||||
"NRF2",
|
||||
"LINK",
|
||||
"CC1101",
|
||||
"CC1101_1",
|
||||
"CC1101_2",
|
||||
"BUTTONS",
|
||||
"OLED"
|
||||
};
|
||||
|
|
@ -97,8 +112,8 @@ void drawStatus(DeviceStatus &s)
|
|||
{
|
||||
values[0] = s.nrf1;
|
||||
values[1] = s.nrf2;
|
||||
values[2] = s.nrf_link;
|
||||
values[3] = s.cc1101;
|
||||
values[2] = s.cc1101_1;
|
||||
values[3] = s.cc1101_2;
|
||||
values[4] = s.buttons;
|
||||
values[5] = s.oled;
|
||||
|
||||
|
|
@ -139,56 +154,6 @@ void drawStatus(DeviceStatus &s)
|
|||
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 =====
|
||||
void device_check_run()
|
||||
|
|
@ -199,12 +164,12 @@ void device_check_run()
|
|||
|
||||
// NRF
|
||||
// NRF link test
|
||||
status.nrf_link = testNRFLink();
|
||||
status.nrf1 = checkNRF(radio1);
|
||||
status.nrf2 = checkNRF(radio2);
|
||||
|
||||
// CC1101
|
||||
status.cc1101 = checkCC1101();
|
||||
status.cc1101_1 = checkCC1101_1();
|
||||
status.cc1101_2 = checkCC1101_1();
|
||||
|
||||
// Buttons
|
||||
status.buttons = checkButtons();
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
#include "wifi_scan.h"
|
||||
#include "wifi_analyzer.h"
|
||||
#include "device_check.h"
|
||||
#include "blemouse.h"
|
||||
#include "ble_mouse.h"
|
||||
#include "sysinfo.h"
|
||||
#include "BleMouse.h"
|
||||
|
||||
|
|
@ -36,7 +36,8 @@ Menu mainMenu = {mainMenuItems, sizeof(mainMenuItems) / sizeof(mainMenuItems[0])
|
|||
// NRF Tools menu
|
||||
const char *nrfToolsItems[] = {
|
||||
"BLE Jammer",
|
||||
"Bluetooth Jammer"
|
||||
"Bluetooth Jammer",
|
||||
"Wifi Jammer"
|
||||
};
|
||||
|
||||
Menu nrfToolsMenu = {nrfToolsItems, sizeof(nrfToolsItems) / sizeof(nrfToolsItems[0])};
|
||||
|
|
@ -226,13 +227,82 @@ void launchFeature()
|
|||
device_check_run();
|
||||
break;
|
||||
case 8:
|
||||
{
|
||||
// wait for button release
|
||||
delay(200);
|
||||
|
||||
while (btnSelect())
|
||||
delay(10);
|
||||
bool confirm = false;
|
||||
|
||||
while (1)
|
||||
{
|
||||
u8g2.clearBuffer();
|
||||
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();
|
||||
|
||||
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);
|
||||
ESP.restart();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (btnBack())
|
||||
{
|
||||
delay(150);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 9:
|
||||
// Begin Ble mouse
|
||||
bleMouse.begin();
|
||||
|
|
|
|||
Loading…
Reference in New Issue