Był kiedyś na Facebooku taki profil jak „Cyfrowe gry EA”, na którym często umieszczane były klucze do gier za darmo.
Pewnego dnia wysłali mniej więcej taką wiadomość:
Do zdobycia za darmo gra Battlefield 3, początkowe znaki klucza to: CEXF-625X-7FMR-CQ64-FP??. Brakuje dwóch ostatnich znaków. Poprawność kodów należy sprawdzać bezpośrednio w Originie.
Postanowiłem spróbować automatyzacji.
Trochę matematyki
W kluczu brakuje dwóch znaków. Każdy z nich może przyjmować wartość z zakresów A-Z, 0-9. Razem jest ich 36 (26 znaków i 10 cyfr).
Jest to więc wariacja 2-elementowa ze zbioru 36-cio elementowego. Wszystkich wariacji jest 362=1296.
Jest to bardzo mała liczba, dlatego można było podjąć próbę zgadnięcia tego kodu brute forcem w sensownym czasie. Przyjmując pesymistyczne założenie, że jeżeli prawidłowy zestaw znaków byłby ostatnim sprawdzanym, a każda próba weryfikacji zajęłaby dwie sekundy, to zgadnięcie kodu zajmie mniej niż godzinę.
Brute force
Postanowiłem użyć Javy, a dokładnie java.awt.Robot. według następującego algorytmu:
- Wprowadzenie krótkiego opóźnienia startu aby po uruchomieniu zdążyć przejść kursorem do pola edycyjnego w Originie.
- Wygenerowanie wariacji:
- Skopiowanie do schowka wygenerowanego kodu.
- Warunek początkowy: kursor znajduje się w polu edycyjnym.
- Symulacja klawiatury: TAB, trzykrotnie (przejście do pola edycyjnego w przypadku powrotu z punktu 2.7.4.1.1).
- Symulacja klawiatury: CTRL+V – wklejenie kodu do pola edycyjnego
- Symulacja klawiatury: ENTER – uruchomienie weryfikacji kodu
- Sleep – krótkie oczekiwanie na weryfikację kodu przez serwer.
- Sprawdzenie czy serwer zdążył zweryfikować kod
- Usunięcie danych ze schowka.
- Symulacja klawiatury: CTRL+A – zaznaczenie aktualnego kodu.
- Symulacja klawiatury: CTRL+C – skopiowanie do schowka aktualnie wprowadzonego kodu.
- Odczyt kodu ze schowka i porównanie z kodem zleconym do weryfikacji
- Kody zgodne – serwer zdążył zweryfikować dane. Kod jest niepoprawny. Pojawiło się pole edycyjne z wpisanym wcześniej kodem, a więc symulacja CTRL+A, CTRL+C spowoduje skopiowanie go i porównanie zawartości schowka ze sprawdzanym kluczem.
- Powrót do punktu 2.
- Kody niezgodne – serwer nie zdążył zweryfikować danych, lub wpisany kod został odgadnięty. W przypadku gdyby serwer nie zdążył jeszcze zweryfikować danych pole edycyjne byłoby nieaktywne i użycie skrótów CTRL+A i CTRL+C nie wprowadziłoby danych do schowka.
- Kody zgodne – serwer zdążył zweryfikować dane. Kod jest niepoprawny. Pojawiło się pole edycyjne z wpisanym wcześniej kodem, a więc symulacja CTRL+A, CTRL+C spowoduje skopiowanie go i porównanie zawartości schowka ze sprawdzanym kluczem.
Gratuluje !
Ja używałem programu PWGen do wygenerowania sobie kluczy, ale musiałem wszystko kopiować i wklejać.