刚学破解,通过看雪论坛上的一些技术文章,试着破解了第一个CrackMe,获得了三组注册码,附上详细步骤,同时申请邀请码。
软件名称:CrackMe.exe
编制语言:Microsoft Visual C++ 6.0
破解工具:IDA Pro 5.5
使用IDA打开Crackme,稍等片刻后,反汇编完成。找到关键函数GetWindowTextA,并下断点,运行,随意输入用户名和注册码,点击注册按钮,被断点拦下。如下是关键部分的代码:
------------------------------------------------------------------------------------------------------
.text:00401375 call esi ; GetDlgItem<---------------下断点
.text:00401377 mov edi, ds:GetWindowTextA<-------关键语句
.text:0040137D push eax ; hWnd
.text:0040137E call edi ; GetWindowTextA<--------调用API函数,获得用户名
.text:00401380 lea ecx, [esp+810h+var_800]
.text:00401384 push 400h ; nMaxCount
.text:00401389 push ecx ; lpString
.text:0040138A push 3E9h ; nIDDlgItem
.text:0040138F push ebp ; hDlg
.text:00401390 call esi ; GetDlgItem
.text:00401392 push eax ; hWnd
.text:00401393 call edi ; GetWindowTextA<--------调用API函数,获得用户名
.text:00401395 lea edx, [esp+810h+String]
.text:0040139C lea esi, [esp+810h+var_800]
.text:004013A0 push edx
.text:004013A1 call sub_401020<-------------注册码计算函数。运行完此句后,查看寄存器EAX的值,可以惊喜的发现,里面的内容,就是正确的注册码!
.text:004013A6 add esp, 4
.text:004013A9
.text:004013A9 loc_4013A9: ; CODE XREF: DialogFunc+BBj
.text:004013A9 mov dl, [eax]
.text:004013AB mov bl, [esi]
.text:004013AD mov cl, dl
.text:004013AF cmp dl, bl
.text:004013B1 jnz short loc_4013D1
.text:004013B3 test cl, cl
.text:004013B5 jz short loc_4013CD
.text:004013B7 mov dl, [eax+1]
.text:004013BA mov bl, [esi+1]
.text:004013BD mov cl, dl
.text:004013BF cmp dl, bl
.text:004013C1 jnz short loc_4013D1
.text:004013C3 add eax, 2
.text:004013C6 add esi, 2
.text:004013C9 test cl, cl
.text:004013CB jnz short loc_4013A9
.text:004013CD
.text:004013CD loc_4013CD: ; CODE XREF: DialogFunc+A5j
.text:004013CD xor eax, eax
.text:004013CF jmp short loc_4013D6
.text:004013D1 ; ---------------------------------------------------------------------------
.text:004013D1
.text:004013D1 loc_4013D1: ; CODE XREF: DialogFunc+A1j
.text:004013D1 ; DialogFunc+B1j
.text:004013D1 sbb eax, eax
.text:004013D3 sbb eax, 0FFFFFFFFh
.text:004013D6
.text:004013D6 loc_4013D6: ; CODE XREF: DialogFunc+BFj
.text:004013D6 pop edi
.text:004013D7 pop esi
.text:004013D8 pop ebx
.text:004013D9 test eax, eax
.text:004013DB push 0 ; uType
.text:004013DD push offset Caption ; "信息"
.text:004013E2 jnz short loc_4013FC<------------关键跳转。若注册码正确,则不跳转,否则跳转到失败处
.text:004013E4 push offset Text ; "注册成功!"
.text:004013E9 push ebp ; hWnd
.text:004013EA call ds:MessageBoxA
.text:004013F0 xor eax, eax
.text:004013F2 pop ebp
.text:004013F3 add esp, 800h
.text:004013F9 retn 10h
.text:004013FC ; ---------------------------------------------------------------------------
.text:004013FC
.text:004013FC loc_4013FC: ; CODE XREF: DialogFunc+D2j
.text:004013FC push offset aVSZGb ; "注册失败!"
.text:00401401 push ebp ; hWnd
.text:00401402 call ds:MessageBoxA
----------------------------------------------------------------------------------------------------
其实在除了获得正确的注册码后,在关键跳转处也可以通过修改汇编指令来实现爆破,这样,输入任何用户名和注册码都可以通过注册。但这是最后的办法,最好是能找到正确的注册码,能写出注册机就更强了。我获得的一对注册码是:Yoda/3394A-AF62E-KLIPP-7Q541-365AB,通过验证,完美通过注册。
小结:这个CrackMe是典型的明码型注册,程序本身也比较简单,也没有加壳。但是,对我这个刚刚接触破解的人来说,实在是一个不小的鼓励。随后,我又相继破解了几个Crackme,包括非明码注册,无注册信息窗口注册等等。因此我也诚心申请一个邀请码,能够在看雪的帮助下继续深入学习
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!