Это мой первый опыт в написании статьи, так что если получилось не очень понятно, не ругайте, а напишите мне - я все разъясню, по мере возможности.

Программа сама по себе прекрасная - мой любимый музыкальный проигрыватель. Запускаем ее, и что мы видим? Ничего не видим - ни информационных экранов (nagscreens), ни задержек, ни надписей UNREGISTERED в главном окне. Программа даже после окончания своего испытательного срока (14 дней) не перестанет функционировать, как многие другие, а просто спокойно продолжит работать. Единственное, что может непонравиться, это одна маленькая надпись UNREGISTERED в окне About Nullsoft Winamp/Shareware. Но и с этим можно легко справиться.

Надеюсь, у Вас загружен SoftICE? Если да, то открываем окно About (нажимаем на картинку в правом нижнем углу Winamp'a) и выбираем вкладку Shareware. Нажимаем кнопку Enter registration info и получаем окно с двумя полями ввода: "Name" и "Reg#". А теперь внимательно посмотрите на кнопку ОК - Вы видите, что она не активна и на нее нельзя нажать? Что-ж, это усложняет дело; установка контрольной точки на вызов MessageBoxA() или GetWindowTextA() ничего не даст. Придется действовать в обход... Введите в качестве имени CrayZeeShark, а серийный номер - любой (я предпочитаю 7777777), активизируйте SoftICE (Ctrl+D) и поставьте контрольную точку на вызов функции hmemcpy() (bpx hmemcpy). hmemcpy() - это функция, которую Windows использует для копирования блоков памяти. Только учтите, когда будете использовать bpx hmemcpy, то сначала введите всю информацию, а потом ставьте контрольную точку, иначе Вы SoftICE будет прерывать программу при вводе очередного символа.

Теперь жмите F5 (возврат в программу), и нажмите любую цифру на клавиатуре. При этом активизируется SoftICE, в нижней строчке должно быть:

:Break due to BPX KERNEL!HMEMCPY
Посмотрите на строку между окнами кода и команд. Там написано: KERNEL (01). Это значит, что мы находимся в модуле KERNEL; а нам нужен WINAMP, следовательно, нажимаем несколько раз кнопку F12 (p ret) (я нажимал 14 раз), чтобы выйти из подпрограммы (только ни в коем случае не удаляте контрольную точку перед тем, как будете нажимать F12, иначе мы на полпути просто выйдем обратно в Winamp). Мы должны оказаться в модуле WINAMP!.text+0EF9 (теперь контрольную точку можно убрать с помощью bc *), и в окне кода должно быть следующее:
0177:00401EFB push 00
Если вы видите эту строку, значит все в порядке. Посмотрите на Окно регистров - EAX=0000000Ch. 0Сh в десятичной системе - это 12, и это похоже на длину введенного нами имени! Прекрасно! Попали в самую точку. Далее привожу код из SoftICE, с моими комментариями (наиболее важные строки помечены цветом):
...

push 00                            ;вот тут мы оказались...

push 00                            ;...

push ebx                           ;...               

push edi                           ;...            

call [USER32!GetDlgItemInt]        ;получить введенный нами код в EAX

mov esi,eax                        ;сохранить его в ESI

lea eax,[ebp-80]                   ;в EAX теперь адрес введенного нами имени

push eax                           ;поместить имя в стек

call 00424CD1                      ;сгенерировать правильный код для нашего имени

cmp eax,esi                        ;сравнить введенный нами и сгенерированный коды

pop ecx                            ;...

jnz 00401F21                       ;если они не равны, то не активизировать кнопку ОК

...

Видите, как все легко? Сначала ввести имя, потом код, потом сгенерировать верный код для нашего имени и сравнить то, что мы ввели, с тем, что нужно было ввести. Чтобы узнать наш код, просто нажимайте F10 до тех пор, пока вы не окажетесь на строке CMP EAX,ESI и затем наберите ? eax, и SoftICE отобразит Ваш код в шестнадцатеричной, десятичной и символьной формах. Запишите его, потом введите в поле ввода "Reg#" и все! Winamp зарегистрирован!!! Мой код получился 5703382. Если Вы введете свое имя, то, естественно, получите код для себя.

На этом исследование можно считать завершенным. И еще раз повторюсь: если есть какие-то вопросы - обязательно напишите мне.

Дальше


Образование на Куличках