Решение wt0vremr - Musical Crackme

Сложность: 1 – Very easy, for newbies
Платформа: Windows
Язык: Assembler
Дано: Musical Crackme


Musical Crackme by wt0vremr
============================
[In case of good ID\Serial the music starts]
============================
Difficulty:
- Very Very Easy
============================
Objective:
- Find a valid ID/Serial
- Make a keygen
- Write a tutorial
============================
Rules:
- No patchng
- No debugging

Решение (автор cr4ckpaper)
решений много, взято последнее
опубликовано 27.02.2012


Инструменты: OllyDBG

Ок, итак, запускаем OllyDBG и загружаем в него .exe файл.
Сделав это, начинаем анализировать.
Жмем запуск программы [F9], вводим случайный набор символов или указываем то, что ввожу я…

ID: 1337
SERIAL: оставляем пустым

image00.jpg

Данные указали. Жмем "Register". Ничего не случилось. Печалька :(

Перезапускаем программу [CTRL+F2]. А сейчас, т.к. выполняемый файл получает содержимое ID и SERIAL из диалоговых полей ввода, давайте поищем функцию GetDlgItem (Windows API), отвечающую за получение данных из этих полей. В OllyDBG делаем так: правый клик -> Search -> All Intermodular calls.

Как видим, открылся список функций, и по одному адресу, а именно здесь 00401142 есть вызов GetDlgItemInt (эта функция говорит о том, что входными данными могут быть только числа). Интересно. Давайте разглядим поближе. Двойной клик по адресу, и он вернет нас к главному экрану, и покажет вам окружающий код, откуда произошел вызов GetDlgItemInt.



Ставим точку останова на 00401142 [F2]. Перезапускаем программу [CTRL+F2], и запускаем на выполнение [F9]. Вводим:
ID: 1337
SERIAL: оставляем пустым
Жмем “register”, и программа замерла, т.к. сработала точка останова.

Мы видим, что ниже точки останова есть вызов функции CALL 0040109B. Идем до функции, и на ее вызове жмем [F7], чтобы провалиться в нее. Т.е. оказываемся по адресу 0040109В. Здесь находится алгоритм проверки, вплоть до адреса возврата 004010AE.



[1] Первая инструкция ADD EBX, 4C - где складывается значение в ЕВХ (здесь наш ID “1337”) с 4С (76). Получаем результат: ЕВХ = 1413 (1337+76).
[2] Затем ADD EDX, 3. Получаем EDX = 3.
[3] В третьих INC EBX, который увеличивает EBX на 1. Так что EBX = 1414.
[4] Далее ADD EBX, 38B - где складывается значение в ЕВХ с 38B (907), и EBX = 2321
[5] ADD EBX, EBX - по сути EBX * 2. Получаем EBX = 4642.
[6] IMUL EBX, EDX целочисленное умножение EBX (4642) на EDX, значение которого равно 3. Итак EBX * 3 = 13926.
[7] И последнее, DEC EBX уменьшаем значение в EBX на 1. Конечный результат 13925.
Вот и все. Если мы закроем OllyDBG, запустим программу, введем ID = 1337 и Serial = 13925, то заиграет музыка, т.е. задачка решена - указаны правильный ID/Serial. Но это первая часть. Теперь время для создания кейгена.

Создать кейген проще некуда. Ибо для всех вычислений достаточно калькулятора, но мы все таки приведем код.
(автор свой код представил на Perl, мы же оформим его на Python)

# -*- coding: cp1251 -*-
 
myid = 1234
 
if myid > 9999:
    print("[!] MAX of 4 numbers in ID")
    exit()
 
serial = 0
 
print("[*] Your ID is: "+str(myid))
serial += myid + 76 + 1 + 907
serial += serial
serial = serial * 3
serial -= 1
print("[+] Your serial is: "+str(serial))


Примеры:
[*] Your ID is: 1234
[+] Your serial is: 13307

[*] Your ID is: 9999
[+] Your serial is: 65897

Пока не указано иное, содержимое этой страницы распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 License