Crack之亲历手迹2--我的第一个注册机
//-------------------------------------------------
目标程序:icontoy2.exe:392 KB (401,920 字节)
绿色软件,单独exe文件
Delphi编写无需pakage支持,未加壳
破解目标:找到注册码,最好做出注册机
//--------------------------------------------------
破解过程:
1。用IDA反汇编。
2。用SoftICE,下bpx getwindowtext
bpx getwindowtexta
bpx getwindowtextw
bpx getdlgitemtext
bpx getdlgitemtexta
bpx getdlgitemtextw结果只栏到TApplication::GetTitle中的程式,并未拦截到程序获取注册码
的过程。
???或许Delphi的TControl::GetText另有函数?(详细见2002-2-15日记)
3。用W32Dasm反汇编,找到Registration key error!字符串,点击后直接进入了OnOK的处理函数,That's OK!
4。在IDA中找到这个处理函数,
分析发现:
首先打开注册表,将用户名、Key写入注册表
mov edx, offset _str__software_akato_0.Text
mov eax, ebx
call @Registry@TRegistry@OpenKey$qqrx17System@AnsiString4bool
lea edx, [ebp+var_4]
mov eax, [esi+270h]
call @TControl@GetText ; TControl::GetText
mov ecx, [ebp+var_4]
mov edx, offset _str_reg_key_0.Text
mov eax, ebx
call @TRegistry@WriteString ; TRegistry::WriteString
然后再从注册表中读出来
lea ecx, [ebp+var_8]
mov edx, offset _str_reg_key_0.Text
mov eax, ebx
call @TRegistry@ReadString ; TRegistry::ReadString
mov edx, [ebp+var_8]
mov eax, edi
call @System@@LStrAsg$qqrv ; System __linkproc__ LStrAsg(void)
再与十个可能的注册码一一比较
mov eax, [edi]
mov edx, offset _str_R3212959_0.Text
call @System@@LStrCmp$qqrv ; System __linkproc__ LStrCmp(void)
jz short loc_439CEA
mov eax, [edi]
mov edx, offset _str_8M6M8DTA_0.Text
call @System@@LStrCmp$qqrv ; System __linkproc__ LStrCmp(void)
jnz short loc_439D36
如是十个注册码中的一个则显示注册成功,或则显示注册失败
mov eax, offset _str_Registration_ke.Text
call @Dialogs@ShowMessage$qqrx17System@AnsiString ; Dialogs::ShowMessage(System::AnsiString)
现在我们可以知道他的注册码了,只能为下面的十个字串中的一个
8M6M8DTA
R3212959
12959TAT
322223XL
reggy322
reggy105
reg10515
reg15810
22322322
32222332
5。使用VC++6.0做出注册机
Email:y97523@hotmail.com
- 标 题:Crack之亲历手迹2--我的第一个注册机 (2千字)
- 作 者:y97523
- 时 间:2002-3-9 19:55:42
- 链 接:http://bbs.pediy.com