"ED!SON (пер. Mr.Boco). Как ломать программы Windows" - читать интересную книгу автора


CMP ECX, EDX ; Сравнивает числа
JZ 00402DA6 ; Прыгает, если равны

Когда Вы дотрассировали до сравнения чисел, Вы можете посмотреть, каким
должен был быть Ваш РЕАЛЬНЫЙ регистрационный код:

:? ecx

В моем случае это дало:

000DC0CC 0000901324

То есть, правильный код для меня: 901324.

Нажмем F5 или Ctrl-D чтобы вернуться в программу и попробуем еще раз, но
на этот раз с правильным кодом (в десятичной форме). Работает!


4. СОЗДАНИЕ ГЕНЕРАТОРА КЛЮЧЕЙ ДЛЯ COMMAND LINE 95
=================================================
Взглянем на алгоритм генерации кода и попробуем перевести его на язык Си.
Вот очень простая формула, по которой подсчитывается ключ:

code = ((uppercase_first_char * length_of_string) << 0x0A) + 0x2f8cc;

Замечание #1: Не следует забывать, что все символы в окне ввода имени
были приведены к верхнему регистру, поэтому мы должны сделать то же.

Замечание #2: "<< 0x0A" означает "умножние на 2 в степени 10"

Целиком программа на Си выглядит так:

#include
#include

int main()
{
unsigned long code;
unsigned char buffer[0x1e];

printf("CommandLine95 Keymaker by ED!SON '96\n");
printf("Enter name: ");
gets(buffer);

strupr(buffer);
code = ( ((unsigned long)buffer[0] *
(unsigned long)strlen(buffer))
<< 0x0A) + 0x2f8cc;