├── .gitattributes ├── .gitignore ├── BangoSkank - ZoT.ino ├── BangoSkank.ino └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /BangoSkank - ZoT.ino: -------------------------------------------------------------------------------- 1 | /* Alright so this borrows *heavily* from https://github.com/kripthor/WiFiBeaconJam/blob/master/WiFiBeaconJam.ino so all credit to kripthor. 2 | * other useful shit at https://mrncciew.com/2014/10/08/802-11-mgmt-beacon-frame/ 3 | * 4 | * 5 | */ 6 | #include 7 | 8 | extern "C" { 9 | #include "user_interface.h" 10 | } 11 | 12 | byte channel; 13 | 14 | // Beacon Packet buffer 15 | uint8_t packet[128] /*frame control and duration*/ = { 0x80, 0x00, 0x00, 0x00, 16 | /*4 - d mac bcast*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 17 | /*10 - s mac add*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 18 | /*16 - bssid*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 19 | /*22 seq ctl*/ 0xc0, 0x6c, 20 | /*24 time stamp*/ 0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, 21 | /*32 beacon interval*/ 0x64, 0x00, 22 | /*34 capability*/ 0x01, 0x04, 23 | /* SSID */ 24 | /*36*/ 0x00/*element id*/, 0x20/*len*/, 0x72, 0x72, 0x72, 0x72, 0x72, 25 | 0x72, 0x72, 0x72, 0x72, 0x72, 26 | 0x72, 0x72, 0x72, 0x72, 0x72, 27 | 0x72, 0x72, 0x72, 0x72, 0x72, 28 | 0x72, 0x72, 0x72, 0x72, 0x72, 29 | 0x72, 0x72, 0x72, 0x72, 0x72, 30 | 0x72, 0x72, 31 | /*doesntmatterhadsex*/ 0x01, 0x08, 0x82, 0x84, 32 | /*doesntmatterhadsex*/ 0x8b, 0x96, 0x24, 0x30, 0x48, 0x6c, 0x03, 0x01, 33 | /*82 - channel*/ 0x04}; 34 | 35 | int i = 0; 36 | 37 | String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_"; 38 | //what you want to broadcast goes here. It's an array of strings yo. 39 | String stringus[] = {"Bango Skank was here. "}; 40 | //set this as the number of items in stringus since we're here to have fun, not fix core deficencies of the Arduino language 41 | int girth = 1; 42 | 43 | void setup() { 44 | delay(500); 45 | wifi_set_opmode(STATION_MODE); 46 | wifi_promiscuous_enable(1); 47 | } 48 | 49 | 50 | 51 | void loop() { 52 | // Randomize channel // 53 | 54 | channel = random(1,12); 55 | wifi_set_channel(channel); 56 | 57 | // Randomize SRC MAC 58 | packet[10] = packet[16] = random(256); 59 | packet[11] = packet[17] = random(256); 60 | packet[12] = packet[18] = random(256); 61 | packet[13] = packet[19] = random(256); 62 | packet[14] = packet[20] = random(256); 63 | packet[15] = packet[21] = random(256); 64 | 65 | // Go for broke, max SSID length yo 66 | packet[38] = asdf(i, 0); 67 | packet[39] = asdf(i, 1); 68 | packet[40] = asdf(i, 2); 69 | packet[41] = asdf(i, 3); 70 | packet[42] = asdf(i, 4);/*5*/ 71 | packet[43] = asdf(i, 5); 72 | packet[44] = asdf(i, 6); 73 | packet[45] = asdf(i, 7); 74 | packet[46] = asdf(i, 8); 75 | packet[47] = asdf(i, 9);/*10*/ 76 | packet[48] = asdf(i, 10); 77 | packet[49] = asdf(i, 11); 78 | packet[50] = asdf(i, 12); 79 | packet[51] = asdf(i, 13); 80 | packet[52] = asdf(i, 14);/*15*/ 81 | packet[53] = asdf(i, 15); 82 | packet[54] = asdf(i, 16); 83 | packet[55] = asdf(i, 17); 84 | packet[56] = asdf(i, 18); 85 | packet[57] = asdf(i, 19);/*20*/ 86 | packet[58] = asdf(i, 20); 87 | packet[59] = asdf(i, 21); 88 | packet[60] = asdf(i, 22); 89 | packet[61] = asdf(i, 23); 90 | packet[62] = asdf(i, 24);/*25*/ 91 | packet[63] = asdf(i, 25); 92 | packet[64] = asdf(i, 26); 93 | packet[65] = asdf(i, 27); 94 | packet[66] = asdf(i, 28); 95 | packet[67] = asdf(i, 29);/*30*/ 96 | packet[68] = asdf(i, 30); 97 | packet[69]/*nice*/ = asdf(i, 31);/*max len*/ 98 | 99 | packet[82] = channel; 100 | 101 | wifi_send_pkt_freedom(packet, 83, 0); 102 | wifi_send_pkt_freedom(packet, 83, 0); 103 | wifi_send_pkt_freedom(packet, 83, 0); 104 | delay(1); 105 | if (i == girth) { 106 | i=0; 107 | } 108 | else { 109 | i = i+1; 110 | } 111 | } 112 | 113 | char asdf(int x, int y) { 114 | if (y < stringus[x].length()) { 115 | return stringus[x][y]; 116 | } 117 | else { 118 | return alfa[random(65)]; 119 | } 120 | } 121 | 122 | 123 | -------------------------------------------------------------------------------- /BangoSkank.ino: -------------------------------------------------------------------------------- 1 | /* Alright so this borrows *heavily* from https://github.com/kripthor/WiFiBeaconJam/blob/master/WiFiBeaconJam.ino so all credit to kripthor. 2 | * other useful shit at https://mrncciew.com/2014/10/08/802-11-mgmt-beacon-frame/ 3 | * 4 | * 5 | */ 6 | #include 7 | 8 | extern "C" { 9 | #include "user_interface.h" 10 | } 11 | 12 | byte channel; 13 | 14 | // Beacon Packet buffer 15 | uint8_t packet[128] /*frame control and duration*/ = { 0x80, 0x00, 0x00, 0x00, 16 | /*4 - d mac bcast*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 17 | /*10 - s mac add*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 18 | /*16 - bssid*/ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 19 | /*22 seq ctl*/ 0xc0, 0x6c, 20 | /*24 time stamp*/ 0x83, 0x51, 0xf7, 0x8f, 0x0f, 0x00, 0x00, 0x00, 21 | /*32 beacon interval*/ 0x64, 0x00, 22 | /*34 capability*/ 0x01, 0x04, 23 | /* SSID */ 24 | /*36*/ 0x00/*element id*/, 0x20/*len*/, 0x72, 0x72, 0x72, 0x72, 0x72, 25 | 0x72, 0x72, 0x72, 0x72, 0x72, 26 | 0x72, 0x72, 0x72, 0x72, 0x72, 27 | 0x72, 0x72, 0x72, 0x72, 0x72, 28 | 0x72, 0x72, 0x72, 0x72, 0x72, 29 | 0x72, 0x72, 0x72, 0x72, 0x72, 30 | 0x72, 0x72, 31 | /*doesntmatterhadsex*/ 0x01, 0x08, 0x82, 0x84, 32 | /*doesntmatterhadsex*/ 0x8b, 0x96, 0x24, 0x30, 0x48, 0x6c, 0x03, 0x01, 33 | /*82 - channel*/ 0x04}; 34 | 35 | int i = 0; 36 | 37 | String alfa = "1234567890qwertyuiopasdfghjkklzxcvbnm QWERTYUIOPASDFGHJKLZXCVBNM_"; 38 | //what you want to broadcast goes here. It's an array of strings yo. 39 | String stringus[] = {"_ZONE OF TRUTH! "}; 40 | //set this as the number of items in stringus since we're here to have fun, not fix core deficencies of the Arduino language 41 | int girth = 1; 42 | 43 | void setup() { 44 | delay(500); 45 | wifi_set_opmode(STATION_MODE); 46 | wifi_promiscuous_enable(1); 47 | } 48 | 49 | 50 | 51 | void loop() { 52 | // Randomize channel // 53 | 54 | channel = random(1,12); 55 | wifi_set_channel(channel); 56 | 57 | // Randomize SRC MAC 58 | packet[10] = packet[16] = random(256); 59 | packet[11] = packet[17] = random(256); 60 | packet[12] = packet[18] = random(256); 61 | packet[13] = packet[19] = random(256); 62 | packet[14] = packet[20] = random(256); 63 | packet[15] = packet[21] = random(256); 64 | 65 | // Go for broke, max SSID length yo 66 | packet[38] = asdf(i, 0); 67 | packet[39] = asdf(i, 1); 68 | packet[40] = asdf(i, 2); 69 | packet[41] = asdf(i, 3); 70 | packet[42] = asdf(i, 4);/*5*/ 71 | packet[43] = asdf(i, 5); 72 | packet[44] = asdf(i, 6); 73 | packet[45] = asdf(i, 7); 74 | packet[46] = asdf(i, 8); 75 | packet[47] = asdf(i, 9);/*10*/ 76 | packet[48] = asdf(i, 10); 77 | packet[49] = asdf(i, 11); 78 | packet[50] = asdf(i, 12); 79 | packet[51] = asdf(i, 13); 80 | packet[52] = asdf(i, 14);/*15*/ 81 | packet[53] = asdf(i, 15); 82 | packet[54] = asdf(i, 16); 83 | packet[55] = asdf(i, 17); 84 | packet[56] = asdf(i, 18); 85 | packet[57] = asdf(i, 19);/*20*/ 86 | packet[58] = asdf(i, 20); 87 | packet[59] = asdf(i, 21); 88 | packet[60] = asdf(i, 22); 89 | packet[61] = asdf(i, 23); 90 | packet[62] = asdf(i, 24);/*25*/ 91 | packet[63] = asdf(i, 25); 92 | packet[64] = asdf(i, 26); 93 | packet[65] = asdf(i, 27); 94 | packet[66] = asdf(i, 28); 95 | packet[67] = asdf(i, 29);/*30*/ 96 | packet[68] = asdf(i, 30); 97 | packet[69]/*nice*/ = asdf(i, 31);/*max len*/ 98 | 99 | packet[82] = channel; 100 | 101 | wifi_send_pkt_freedom(packet, 83, 0); 102 | wifi_send_pkt_freedom(packet, 83, 0); 103 | wifi_send_pkt_freedom(packet, 83, 0); 104 | delay(1); 105 | if (i == girth) { 106 | i=0; 107 | } 108 | else { 109 | i = i+1; 110 | } 111 | } 112 | 113 | char asdf(int x, int y) { 114 | if (y < stringus[x].length()) { 115 | return stringus[x][y]; 116 | } 117 | else { 118 | return alfa[random(65)]; 119 | } 120 | } 121 | 122 | 123 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Have you ever wished you could be a mild technological nuisance on a budget? Then have we got a deal for you! BangoSkank uses everyone's favorite $2-ish wireless chip, the ESP8266, to flood the area around you with SSIDs of your choosing. Just plug in a battery to your favorite NodeMCU enabled board and you're off to the races! Features: 2 | 3 | * 32 character's per message (but leave room for those random characters!) 4 | 5 | * Hardware costs the same as a Cheesy Gordita Crunch Combo Meal! Hide one in your friend's crawlspace! 6 | 7 | * Manually crafting SSID broadcast packets means you can send a couple dozen per second! 8 | 9 | * Can run for DAYS on the USB battery you already have! 10 | 11 | * .8 MB compile size means you have 3.2 MB (on the average NodeMCU capable device) to fill with political manifestos, links to your mixtape, and ASCII dongs to broadcast to everyone within shouting distance! 12 | 13 | * Chock full of bad coding practices! 14 | 15 | Don't wait, download now! Operator's are standing by! 16 | --------------------------------------------------------------------------------