【暑假活动后续】追码+爆破 之"002 一个简单的CM"
本帖最后由 Kris 于 2011-8-9 14:20 编辑[ 破文标题 ] 追码+爆破 之 一个简单的CM!本地验证!菜鸟找回信心[ 破文作者 ] Kris[ 作者邮箱 ] ZzhEMail@Foxmail.Com
[ 破解工具 ] OD[ 破解平台 ] Windows Xp[ 软件名称 ] 一个简单的CM!本地验证!菜鸟找回信心[ 软件大小 ] 568KB[ 原版下载 ] http://www.52pojie.cnthread-101329-1-1.html[ 保护方式 ] 固定密码[ 软件简介 ] 超级简单的CM[ 破解声明 ] 仅供交流学习技术,若教程中有不对之处,希望各位大大即使指正!破解过程:1.打开CM,密码框留空,直接点按钮,弹出了错误框 2.载入OD,运行后重复刚才的步骤,弹出错误框后不要马上去点击确定。首先点暂停,然后点调试-执行到用户代码并点击错误框的“确定”按钮,点下后OD暂停在如下位置接着F8单步步过,两个ret后来到关键代码,这个所谓的关键代码就是按钮事件代码了:004010A1/.55 push ebp ;F2,在此处(段首)下INT3断点,运行后点击按钮将会断下
004010A2|.8BEC mov ebp,esp
004010A4|.81EC 08000000 sub esp,0x8
004010AA|.6A FF push -0x1
004010AC|.6A 08 push 0x8
004010AE|.68 02000116 push 0x16010002
004010B3|.68 01000152 push 0x52010001
004010B8|.E8 00010000 call CM.004011BD ;获取编辑框中输入的密码内容
004010BD|.83C4 10 add esp,0x10
004010C0|.8945 FC mov ,eax ;中保存编辑框中输入的密码
004010C3|.68 4C9B4600 push CM.00469B4C ;正确的密码
004010C8|.FF75 FC push ;编辑框中输入的密码
004010CB|.E8 34FFFFFF call CM.00401004 ;比较正确密码和编辑框中输入的密码的函数,F7跟进去
---------------------------------------------------------------Code of 401004 Begin------------------------------------------------------------------------------------------------------
00401004/$8B5424 04 mov edx,dword ptr ss:
00401008|.8B4C24 08 mov ecx,dword ptr ss:
0040100C|.85D2 test edx,edx
0040100E|.75 0D jnz XCM.0040101D
00401010|.33C0 xor eax,eax
00401012|.85C9 test ecx,ecx
00401014|.74 06 je XCM.0040101C
00401016|.8039 00 cmp byte ptr ds:,0x0
00401019|.74 01 je XCM.0040101C
0040101B|.48 dec eax
0040101C|>C3 retn
0040101D|>85C9 test ecx,ecx
0040101F|.75 09 jnz XCM.0040102A
00401021|.33C0 xor eax,eax
00401023|.803A 00 cmp byte ptr ds:,0x0
00401026|.74 01 je XCM.00401029
00401028|.40 inc eax
00401029|>C3 retn
0040102A|>F7C2 03000000 test edx,0x3
00401030|.75 37 jnz XCM.00401069
00401032|>8B02 /mov eax,dword ptr ds:
00401034|.3A01 |cmp al,byte ptr ds: ;al为编辑框中输入的密码,为正确的密码
00401036|.75 2B |jnz XCM.00401063 ;如果不一样就跳出比较函数
00401038|.0AC0 |or al,al
0040103A|.74 24 |je XCM.00401060
0040103C|.3A61 01 |cmp ah,byte ptr ds: ;ah为编辑框中输入的密码,为正确的密码
0040103F|.75 22 |jnz XCM.00401063 ;如果不一样就跳出比较函数
00401041|.0AE4 |or ah,ah
00401043|.74 1B |je XCM.00401060
00401045|.C1E8 10 |shr eax,0x10
00401048|.3A41 02 |cmp al,byte ptr ds: ;al为编辑框中输入的密码,为正确的密码
0040104B|.75 16 |jnz XCM.00401063 ;如果不一样就跳出比较函数
0040104D|.0AC0 |or al,al
0040104F|.74 0F |je XCM.00401060
00401051|.3A61 03 |cmp ah,byte ptr ds: ;ah为编辑框中输入的密码,为正确的密码
00401054|.75 0D |jnz XCM.00401063 ;如果不一样就跳出比较函数
00401056|.83C1 04 |add ecx,0x4 ;ecx为真确密码,edx为编辑框中输入的密码
00401059|.83C2 04 |add edx,0x4 ;因为每次比较四个byte,所以每次比较过后+4
0040105C|.0AE4 |or ah,ah
0040105E|.^ 75 D2 \jnz XCM.00401032 ;继续比较,直到全部比较完
00401060|>33C0 xor eax,eax ;如果一样,作为返回值的eax将会变为0
00401062|.C3 retn ;返回
00401063|>1BC0 sbb eax,eax ;如果输入的密码与正确的密码相比较
00401065|.D1E0 shl eax,1 ;并不一样
00401067|.40 inc eax ;那么作为返回值的eax将会变为-1(FFFFFFFF)
00401068|.C3 retn ;返回
00401069|>F7C2 01000000 test edx,0x1
0040106F|.74 14 je XCM.00401085
00401071|.8A02 mov al,byte ptr ds:
00401073|.42 inc edx
00401074|.3A01 cmp al,byte ptr ds:
00401076|.^ 75 EB jnz XCM.00401063
00401078|.41 inc ecx
00401079|.0AC0 or al,al
0040107B|.^ 74 E3 je XCM.00401060
0040107D|.F7C2 02000000 test edx,0x2
00401083|.^ 74 AD je XCM.00401032
00401085|>66:8B02 mov ax,word ptr ds:
00401088|.83C2 02 add edx,0x2
0040108B|.3A01 cmp al,byte ptr ds:
0040108D|.^ 75 D4 jnz XCM.00401063
0040108F|.0AC0 or al,al
00401091|.^ 74 CD je XCM.00401060
00401093|.3A61 01 cmp ah,byte ptr ds:
00401096|.^ 75 CB jnz XCM.00401063
00401098|.0AE4 or ah,ah
0040109A|.^ 74 C4 je XCM.00401060
0040109C|.83C1 02 add ecx,0x2
0040109F\.^ EB 91 jmp XCM.00401032
---------------------------------------------------------------Code of 401004 End------------------------------------------------------------------------------------------------------
004010D0|.83C4 08 add esp,0x8 ;eax=0输入的密码与正确密码吻合,eax为-1(FFFFFFFF)则不吻合
004010D3|.83F8 00 cmp eax,0x0 ;eax与0比较,如果一样,标志寄存器Z=1,否则Z=0
004010D6|.B8 00000000 mov eax,0x0
004010DB|.0F94C0 sete al ;如果Z=1,那么EAX将为1,如果Z=0,那么EAX将为0
004010DE|.8945 F8 mov ,eax ;保存eax的值
004010E1|.8B5D FC mov ebx,
004010E4|.85DB test ebx,ebx
004010E6|.74 09 je XCM.004010F1
004010E8|.53 push ebx
004010E9|.E8 C9000000 call CM.004011B7
004010EE|.83C4 04 add esp,0x4
004010F1|>837D F8 00 cmp ,0x0 ;与0比较
004010F5|.0F84 35000000 je CM.00401130 ;如果为0,那么跳转实现,就会跳出失败
004010FB|.6A 00 push 0x0 ;到这里就可以跳出成功
004010FD|.6A 00 push 0x0
004010FF|.6A 00 push 0x0
00401101|.68 01030080 push 0x80000301
00401106|.6A 00 push 0x0
00401108|.68 00000000 push 0x0
0040110D|.68 04000080 push 0x80000004
00401112|.6A 00 push 0x0
00401114|.68 569B4600 push CM.00469B56
00401119|.68 03000000 push 0x3
0040111E|.BB 00134000 mov ebx,CM.00401300
00401123|.E8 89000000 call CM.004011B1
00401128|.83C4 28 add esp,0x28
0040112B|.E9 30000000 jmp CM.00401160
00401130|>6A 00 push 0x0 ;到这理将会跳出失败
00401132|.6A 00 push 0x0
00401134|.6A 00 push 0x0
00401136|.68 01030080 push 0x80000301
0040113B|.6A 00 push 0x0
0040113D|.68 00000000 push 0x0
00401142|.68 04000080 push 0x80000004
00401147|.6A 00 push 0x0
00401149|.68 799B4600 push CM.00469B79
0040114E|.68 03000000 push 0x3
00401153|.BB 00134000 mov ebx,CM.00401300
00401158|.E8 54000000 call CM.004011B1
0040115D|.83C4 28 add esp,0x28
00401160|>8BE5 mov esp,ebp
00401162|.5D pop ebp
00401163\.C3 retn
3.
代码分析完毕,下面开始进行破解
(1)
追码:
004010C3|.68 4C9B4600 push CM.00469B4C ;正确的密码
通过这句代码就知道,00469B4C里面就存放着正确的密码,数据窗口-跟随-00469B4C,马上能找到正确的密码为:法克shiny
(2)
爆破:
004010F5|.0F84 35000000 je CM.00401130 ;如果为0,那么跳转实现,就会跳出失败
很明显,这句代码跳转了的话必定会失败,那肯定用NOP啦,这样就可以完成爆破了
破解总结:
1.通过弹出错误框后,暂停-调试-执行到用户代码,找到按钮事件
2.分析关键代码
3.找到比较代码即可得到正确密码
4.找到关键跳转即可得到爆破点
http://u.115.com/file/clqpyqd6#
演示教程.rar
闲的蛋疼了。。。 哎哟, 不错噢, 坐等粉粉。
淡定。。。参赛的CM为了电子书的下册,全部要写破文 什么东西啊? 呼呼
找回来信心!!!!!!!!!!!!
膜拜kris牛 大牛大牛大牛{:301_988:}膜拜
页:
[1]
2