"ED!SON (пер. Mr.Boco). Как ломать программы Windows" - читать интересную книгу автораЧто же видно в окне данных, как не имя, которое мы ввели? =) А теперь взглянем на кусок кода под вышеприведенным: PUSH 00 ; (не интересно) PUSH 00 ; (не интересно) PUSH 000003F6 ; Идентификатор управления MOV EDI, 0040A680 ; Адрес буфера PUSH ESI ; Идентификатор окна диалога CALL [User32!GetDlgItemInt] Функция GetDlgItemInt похожа на GetDlgItemTextA, но возвращает не строку, а целое число. Она возвращает его в регистре EAX, поэтому мы трассируем этот код (F10) и смотрим, что же у нас появилось в окне регистров после вызова функции... В моем случае оно выглядит так: EAX=00003039 А что такое шестнадцатеричное 3039? Наберем: :? 3039 И получим следующее: 00003039 0000012345 "09" Как Вы видите (и, возможно, уже догадались) это код, который Вы ввели в диалоговом окне. Ok, что теперь? Посмотрим дальше: MOV [0040A548], EAX ; Сохраняет рег. код MOV EDX, EAX ; А также помещает его в EDX 3.1.3 Подсчитывание регистрационного кода ========================================= Мы достигли места, где подсчитывается реальный регистрационный код! MOV ECX, FFFFFFFF ; Эти строчки подсчитывают SUB EAX, EAX ; длину строки REPNZ SCASB ; . NOT ECX ; . DEC ECX ; ECX теперь содержит длину MOVSX EAX, BYTE PTR [0040A680] ; Получает байт по адр. 40A680h IMUL ECX, EAX ; ECX = ECX * EAX SHL ECX, 0A ; Сдвиг влево на 0Ah бит ADD ECX, 0002F8CC ; Добавляет 2F8CC к результату MOV [0040A664], ECX ...И где он проверяется |
|
|