#include <Keypad.h>
const String secretPIN = "0123"; // Секретный код
String inputPIN;
int redLED = 10;
int greenLED = 11;
int failedAttempts = 0;
/* Keypad setup */
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {A3, A2, A1, A0};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int bruteForceMode = 1; // флаг режима
char pinAttempt[10] = {'0','1','2','3','4','5','6','7','8','9'};
void setup() {
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (bruteForceMode == 1) { //режим атаки
// Эмулируем ввод PIN
for (int i = 0; i < 10000; i++) {
char fakeKey = pinAttempt[i/1000];
inputPIN += fakeKey;
fakeKey = pinAttempt[i%1000/100];
inputPIN += fakeKey;
fakeKey = pinAttempt[i%1000%100/10];
inputPIN += fakeKey;
fakeKey = pinAttempt[i%1000%100%10];
inputPIN += fakeKey;
Serial.print("Trying: ");
Serial.println(inputPIN);
if (inputPIN == secretPIN) {
digitalWrite(greenLED, HIGH);
Serial.println("Access granted! PIN: " + inputPIN);
bruteForceMode = 0;
break;
} else {
delay(1000);
inputPIN = "";
}
}
}
if (key) {
if (key == '#') { // Проверка PIN
if (inputPIN == secretPIN) {
digitalWrite(greenLED, HIGH);
delay(2000);
digitalWrite(greenLED, LOW);
Serial.println("Access granted! PIN: " + inputPIN);
} else {
digitalWrite(redLED, HIGH);
delay(1000);
digitalWrite(redLED, LOW);
failedAttempts++;
Serial.println("Wrong PIN! Attempts: " + String(failedAttempts));
// Защита: блокировка на 5 секунд после 3 ошибок
if (failedAttempts >= 3) {
Serial.println("LOCKED for 5 sec!");
delay(5000);
failedAttempts = 0;
}
}
inputPIN = "";
} else {
inputPIN += key; // Добавление символа
}
}
}