[反汇编练习] 160个CrackMe之023[反汇编练习] 160个CrackMe之023
本帖最后由 44018723 于 2014-7-1 11:47 编辑[反汇编练习] 160个CrackMe之023.本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西。其中,文章中按照如下逻辑编排(解决如下问题):1、使用什么环境和工具2、程序分析3、思路分析和破解流程4、注册机的探索----------------------------------提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大,只要你跟踪了,不用怎么看代码就理解了!----------------------------------1、工具和环境:WinXP SP3 + 52Pojie六周年纪念版OD + PEID + 汇编金手指。160个CrackMe的打包文件。下载地址: http://pan.baidu.com/s/1xUWOY 密码: jbnq注:1、Win7系统对于模块和程序开启了随机初始地址的功能,会给分析带来很大的负担,所以不建议使用Win7进行分析。2、以上工具都是在52PoJie论坛下的原版程序,NOD32不报毒,个人承诺绝对不会进行任何和木马病毒相关内容。http://images.cnitblog.com/blog/573547/201406/192147191763366.png2、程序分析:想要破解一个程序,必须先了解这个程序。所以,在破解过程中,对最初程序的分析很重要,他可以帮助我们理解作者的目的和意图,特别是对于注册码的处理细节,从而方便我们反向跟踪和推导。和上一节一样,打开CHM,选择第23个Chafe.1.EXE,保存下来。运行程序,程序界面如下:http://images.cnitblog.com/blog/573547/201407/011101184494561.png
注:它是没有信息框提示错误的,弹出的信息框是About按钮。
3、思路分析和破解流程PEID:MASM32 / TASM32步骤:1、打开OD,将exe拖到OD窗口中,等程序暂停后,直接点击运行按钮(F9),不用理会。2、在exe中输入Name: bbdxfKey:123123。3、在OD中反汇编窗口,右键->中文搜索引擎->智能搜索。http://images.cnitblog.com/blog/573547/201407/011101206378663.png我们很容易发现了正确文本提示内容:YES!You found your serial!右键->Follow。大概地浏览下代码:00401294|.E8 BA010000 call 00401453 ;Case 113 (WM_TIMER) of switch 0040123F
00401299|.0FBE05 663140>movsx eax,byte ptr ds: ;// 4
004012A0|.3A05 67314000 cmp al,byte ptr ds:
004012A6|.75 06 jnz short 004012AE
004012A8|.33C0 xor eax,eax
004012AA|.C9 leave
004012AB|.C2 1000 retn 0x10 ;// 返回到User32模块
004012AE|>A2 67314000 mov byte ptr ds:,al
004012B3|.83F8 10 cmp eax,0x10
004012B6|.74 16 je short 004012CE ;// 关键跳转
004012B8|.68 65304000 push 00403065 ; /Your serial is not valid.
004012BD|.FF35 7C314000 push dword ptr ds: ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3|.E8 66020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012C8|.33C0 xor eax,eax
004012CA|.C9 leave
004012CB|.C2 1000 retn 0x10
004012CE|>68 7F304000 push 0040307F ; /YES! You found your serial!!
004012D3|.FF35 7C314000 push dword ptr ds: ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9|.E8 50020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012DE|.33C0 xor eax,eax
004012E0|.C9 leave
004012E1|.C2 1000 retn 0x10
是不是很容易就发现了关键跳转!!( PS: 纯汇编写的代码真少,随便上下翻一下,代码就看完了! )选中 je short 004012CE,按下空格键,修改为强制跳转 jmp 004012CE ,然后回到exe程序,随意输入Name和Key,哈哈,成功了!http://images.cnitblog.com/blog/573547/201407/011101224189006.png
4、注册机的探索就如同About里面说的,这个程序真正想破解要找到注册码而不是爆破!我们尝试一下:首先,根据文本提示Case 113 (WM_TIMER) of switch 0040123F,我们知道他是通过定时器触发检测,我们在这里下断,F8单步跟踪:call 00401453内容:
00401453/$55 push ebp ;// OnTimer的响应函数
00401454|.8BEC mov ebp,esp
00401456|.83C4 FC add esp,-0x4
00401459|.8925 A0314000 mov dword ptr ds:,esp
0040145F|.8D25 52314000 lea esp,dword ptr ds: ;// 函数表头
00401465|.0FBE05 663140>movsx eax,byte ptr ds:
0040146C|.03E0 add esp,eax
0040146E\.C3 retn
dd 0x403152
004031520040146FChafe_1.0040146F
0040315600401063Chafe_1.00401063
0040315A00401361Chafe_1.00401361
0040315E0040149CChafe_1.0040149C
00403162004014BAChafe_1.004014BA
call ret 返回到这里:
00401361 .8D3D 8C314000 lea edi,dword ptr ds: ;bbdxf
00401367 .0FBE05 683140>movsx eax,byte ptr ds: ;\n
0040136E .03F8 add edi,eax
00401370 .FE05 68314000 inc byte ptr ds:
00401376 .A1 88314000 mov eax,dword ptr ds:
0040137B .8B25 A0314000 mov esp,dword ptr ds:
00401381 .40 inc eax
00401382 .FF05 88314000 inc dword ptr ds:
00401388 .3307 xor eax,dword ptr ds:
0040138A .A3 88314000 mov dword ptr ds:,eax
0040138F .803D 68314000>cmp byte ptr ds:,0x10
00401396 .75 07 jnz short 0040139F
00401398 .8005 66314000>add byte ptr ds:,0x4
0040139F >C9 leave
004013A0 .C3 retn
接着返回到这里:
00401299|.0FBE05 663140>movsx eax,byte ptr ds: ;// 4
004012A0|.3A05 67314000 cmp al,byte ptr ds:
004012A6|.75 06 jnz short 004012AE
004012A8|.33C0 xor eax,eax
004012AA|.C9 leave
004012AB|.C2 1000 retn 0x10 ;// 返回到User32模块
004012AE|>A2 67314000 mov byte ptr ds:,al
004012B3|.83F8 10 cmp eax,0x10
004012B6|.74 16 je short 004012CE ;// 关键跳转
004012B8|.68 65304000 push 00403065 ; /Your serial is not valid.
004012BD|.FF35 7C314000 push dword ptr ds: ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012C3|.E8 66020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012C8|.33C0 xor eax,eax
004012CA|.C9 leave
004012CB|.C2 1000 retn 0x10
004012CE|>68 7F304000 push 0040307F ; /YES! You found your serial!!
004012D3|.FF35 7C314000 push dword ptr ds: ; |hWnd = 000F01EA ('Your serial is not valid.',class='Edit',parent=0007011C)
004012D9|.E8 50020000 call <jmp.&USER32.SetWindowTextA> ; \SetWindowTextA
004012DE|.33C0 xor eax,eax
004012E0|.C9 leave
004012E1|.C2 1000 retn 0x10
这里面大量地使用了【0x403188】一类的全局变量,但是他们的意思和内容都不是很明确,虽然流程很明确,但是还是不是很明白是什么意思。所以,暂时就没有算法了!
BY笨笨D幸福
本帖最后由 shadowxh 于 2015-2-8 23:51 编辑
这题我写了注册机 http://www.shadowxh.com/?p=2210 交流:handshake
不是有一个帖子了,还发一个帖子? wu4357815 发表于 2014-7-1 11:52
不是有一个帖子了,还发一个帖子?
{:301_1005:}补上周日和周一的。 这个我也跟不出来,只能爆破了 shadowxh 发表于 2015-2-8 23:50
这题我写了注册机 http://www.shadowxh.com/?p=2210 交流
真不错,很厉害啊! 44018723 发表于 2015-2-9 08:45
真不错,很厉害啊!
大家互相交流进步 这里面其实有些还是挺难得 厉害了,。
页:
[1]
2