00455E5A BA05000000 mov edx, $00000005 ; ; edx=index =5, берем шестую строку из Memo
00455E5F 8B18 mov ebx, [eax]
00455E71 A15C9C4500 mov eax, dword ptr [$00459C5C] ; первый символ из этой строки
00455E76 803850 cmp byte ptr [eax], $50 ; равен ли он 50hex=80dec, это код символа
'P'
00455E79 7503 jnz 00455E7E ; если нет прыгаем, значит первый символ 6-ой строки
'P'
00455E7B FF45F4 inc dword ptr [ebp-$0C]
Теперь знаем 1-й символ = 'P'.
00455F1E 03C0 add eax, eax
00455F20 3BD8 cmp ebx, eax
00455F22 7503 jnz 00455F27 ; если равны идем дальше
00455F24 FF45F4 inc dword ptr [ebp-$0C]
Я не стал приводить здесь весь код, т.к. он слишком большой из-за
бестолковости и его можно посмотреть в DeDe, приведу только проверку и кратко опишу, что здесь происходит: берется 2-ой и 3-ий символ, складываются с друг другом как строки и переводятся в число,
то есть если 2-й символ 'D', а 3-й 'G' - результат будет 'DG'.
Затем программа попытается перевести 'DG' в число, что неизбежно вызовет ошибку, значит
2 и 3 символы должны быть цифрами. То же самое делается с 4-м и 5-м символом, соответственно
они тоже должны быть цифрами. Затем, число из 4 и 5 цифры
умножается на 2 и сравнивается с числом из 2 и 3 цифры.
Теперь мы знаем правильное соотношение 2,3,4
и 5 символов, допусти 2 и 3 будет '22',
4 и 5 будет в два раза меньше, то есть 11. Мы уже выяснили первые 5
символов 6-ой строки - 'P2211'. Смотрим дальше.
00455F9B E8CC26FBFF call 0040866C ; проверка 6+7+8 цифры на простое число
* Reference to: Unit1.Proc_00455CB0
00455FA0 E80BFDFFFF call 00455CB0
00455FA5 84C0 test al, al
00455FA7 7403 jz 00455FAC ; если число простое, продолжаем.
00455FA9 FF45F4 inc dword ptr [ebp-$0C]
Здесь тоже приведу проверку и опишу, что происходит: берется 6,7,8 символы
и также складываются как строки, образуя число
(значит тоже должны быть цифрами). Затем это число проверяется, функцией по адресу 00455F9B простое ли это число и если да,
то мы проходим очередную проверку.
Возьмем максимальное 3-ехзначное простое число
- это 997. Значит теперь мы знаем
8 символов 6-й строки - 'P2211997'.
00455FAC A15C9C4500 mov eax, dword ptr [$00459C5C] ; берем 9-й символ
00455FB1 80780552 cmp byte ptr [eax+$05], $52 ; равен ли он 52hex=82dec, это код символа
'R'
00455FB5 7503 jnz 00455FBA ; если равен продолжаем.
00455FB7 FF45F4 inc dword ptr [ebp-$0C]
00455FBA 837DF404 cmp dword ptr [ebp-$0C], +$04
00455FBE 7523 jnz 00455FE3
Все, теперь мы знаем последний символ строки, это 'R', таким
образом наша строка - 'P2211997R'
Добавим это в наш reg файл.
--reg.chk------
[REG-DATA-TESTPROGRAMM]
YourName
YourCompany
944928
P2211997R
---------------
Запускаем программу, кликаем по Nag'у и видим
- "RegFile ... OK". Главную задачу мы выполнили.
Но обратите внимание, что в названии заголовка сохранилось "Trial", также на форме появилась новая кнопка, действие которой мы видели в DeDe и поле ввода
- это ваше домашнее задание, найти пароль\пароли и окончательно зарегистрировать программу.
А сейчас мы уберем этот раздражающий NagScreen. Для этого войдем во вкладку "Procedures" в DeDe
и посмотрим листинг процедуры FormActivate (два раза кликаем на ней мышкой):
* Reference to TForm2 instance
004561C4 A1B87F4500 mov eax, dword ptr [$00457FB8]
004561C9 8B00 mov eax, [eax]
004561CB 8B10 mov edx, [eax]
* Reference to method TForm2.ShowModal()
004561CD FF92E8000000 call dword ptr [edx+$00E8]
004561D3 C3 ret
Видим Tform2.ShowModal() - это и есть NagScreen, теперь достаточно
в любом hex-редакторе заменить FF92E8000000 на 909090909090.
Запускаем. NagScreen'а больше нет.