首页
社区
课程
招聘
[旧帖] [原创]破解的第一个Crackme,申请邀请码[邀请码已发] 0.00雪花
发表于: 2010-4-10 01:12 1412

[旧帖] [原创]破解的第一个Crackme,申请邀请码[邀请码已发] 0.00雪花

2010-4-10 01:12
1412
刚学破解,通过看雪论坛上的一些技术文章,试着破解了第一个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,包括非明码注册,无注册信息窗口注册等等。因此我也诚心申请一个邀请码,能够在看雪的帮助下继续深入学习

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我想获希望不大...

1.太简单
2.篇幅太短
2010-4-10 10:12
0
雪    币: 435
活跃值: (1277)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
3
明码比较的cm已经非常稀罕了,要重点保护 哈哈
既然算法看起来不难,建议lz看看算法,写个注册机

PS.为什么不发附件呢
2010-4-10 10:47
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
为什么不发附件呢
2010-4-10 11:12
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个确实比较简单,后来我还破过几个非明码比较的,
我觉得作为初学者还是先发这个入入门吧,加上附件
2010-4-10 13:41
0
雪    币: 133
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
新人....谢谢楼主, 入门练习..
2010-4-23 15:33
0
雪    币: 57
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
楼主  
大牛啊
2010-5-6 19:53
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这样也行?我看加密与解密  (第三版)也看好几天才看到第三章,配套光盘中的软件也可以照书上说的方法破解了,是不是发上来也可以得到邀请码?
2010-8-29 23:16
0
游客
登录 | 注册 方可回帖
返回
//