[反汇编练习] 160个CrackMe之025
[反汇编练习] 160个CrackMe之025.本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将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,选择第25个CodeZero.1.exe,保存下来。运行程序,程序界面如下:http://images.cnitblog.com/blog/573547/201407/021921147307514.png
3、思路分析和破解流程又见信息框,我很高兴啊!PEID: Microsoft Visual Basic 5.0 / 6.0和以前的一样,直接上步骤:1、打开OD,将exe拖到OD窗口中,等程序暂停后,直接点击运行按钮(F9),不用理会。2、在exe中输入Key:123123。点击OK按钮,弹出错误信息框,不要关闭。3、在OD中点击暂停按钮(Ctrl+F12),再点击堆栈K按钮(Ctrl+K),可以看到当前堆栈情况。….图省略了4、选择 rtcMsgBox ,右键->Show call。向上浏览代码,很容易就发现了提示文本:
0040576E . /74 2A je short 0040579A ;// 关键跳转
00405770 . |E8 CDB9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
00405775 . |8D55 94 lea edx,dword ptr ss:
00405778 . |8D4D D4 lea ecx,dword ptr ss:
0040577B . |C745 9C B4264>mov dword ptr ss:,004026B4 ;UNICODE "Congratulations! you've really made it :-)"
00405782 . |8975 94 mov dword ptr ss:,esi
00405785 . |E8 B8B9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
0040578A . |8D45 A4 lea eax,dword ptr ss:
0040578D . |50 push eax
0040578E . |8D45 B4 lea eax,dword ptr ss:
00405791 . |50 push eax
00405792 . |8D45 C4 lea eax,dword ptr ss:
00405795 . |50 push eax
00405796 . |6A 40 push 0x40
00405798 . |EB 28 jmp short 004057C2
0040579A > \E8 A3B9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
0040579F .C745 9C 10274>mov dword ptr ss:,00402710 ;UNICODE "Invalid unlock code, please try again."
004057A6 >8D55 94 lea edx,dword ptr ss:
004057A9 .8D4D D4 lea ecx,dword ptr ss:
004057AC .8975 94 mov dword ptr ss:,esi
004057AF .E8 8EB9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
004057B4 .8D45 A4 lea eax,dword ptr ss:
004057B7 .50 push eax
004057B8 .8D45 B4 lea eax,dword ptr ss:
004057BB .50 push eax
004057BC .8D45 C4 lea eax,dword ptr ss:
004057BF .50 push eax
004057C0 .6A 10 push 0x10
004057C2 >8D45 D4 lea eax,dword ptr ss:
004057C5 .50 push eax
004057C6 .E8 7DB9FFFF call <jmp.&MSVBVM50.#595>
别的就不多说了,关键跳转为 je short 0040579A ,爆破很简单,选中这句汇编,右键->Binary->Fill with NOPs。试一试,哈哈,成功了!
4、注册机的探索我们继续向上分析,特别是 __vbsStrcmp 函数附近:
00405683 .E8 D2BAFFFF call <jmp.&MSVBVM50.__vbaHresultCheckObj>
00405688 >FF75 E8 push dword ptr ss:
0040568B .68 14264000 push 00402614 ;// 空的
00405690 .E8 D1BAFFFF call <jmp.&MSVBVM50.__vbaStrCmp>
00405695 .8BF8 mov edi,eax
00405697 .8D4D E8 lea ecx,dword ptr ss:
0040569A .F7DF neg edi
0040569C .1BFF sbb edi,edi
0040569E .47 inc edi
0040569F .F7DF neg edi
004056A1 .E8 AEBAFFFF call <jmp.&MSVBVM50.__vbaFreeStr>
004056A6 .8D4D E4 lea ecx,dword ptr ss:
004056A9 .E8 A0BAFFFF call <jmp.&MSVBVM50.__vbaFreeObj>
004056AE .66:3BFB cmp di,bx
004056B1 .74 38 je short 004056EB ;// 检测字符是否为空
004056B3 .6A 0A push 0xA
004056B5 .B9 04000280 mov ecx,0x80020004
004056BA .58 pop eax
004056BB .894D AC mov dword ptr ss:,ecx
004056BE .6A 08 push 0x8
004056C0 .894D BC mov dword ptr ss:,ecx
004056C3 .5E pop esi
004056C4 .8D55 84 lea edx,dword ptr ss:
004056C7 .8D4D C4 lea ecx,dword ptr ss:
004056CA .8945 A4 mov dword ptr ss:,eax
004056CD .8945 B4 mov dword ptr ss:,eax
004056D0 .C745 8C 68264>mov dword ptr ss:,00402668 ;VB Crack-Me 1.0 by CodeZero
004056D7 .8975 84 mov dword ptr ss:,esi
004056DA .E8 63BAFFFF call <jmp.&MSVBVM50.__vbaVarDup>
004056DF .C745 9C 1C264>mov dword ptr ss:,0040261C ;Please enter the registation code.
004056E6 .E9 BB000000 jmp 004057A6
004056EB >FF75 08 push dword ptr ss: ;// UNICODE "致@"
004056EE .FFD6 call esi
004056F0 .50 push eax
004056F1 .8D45 E4 lea eax,dword ptr ss:
004056F4 .50 push eax
004056F5 .E8 66BAFFFF call <jmp.&MSVBVM50.__vbaObjSet>
004056FA .8BF0 mov esi,eax
004056FC .8D4D E8 lea ecx,dword ptr ss:
004056FF .51 push ecx
00405700 .56 push esi
00405701 .8B06 mov eax,dword ptr ds:
00405703 .FF90 A0000000 call dword ptr ds:
00405709 .3BC3 cmp eax,ebx
0040570B .7D 11 jge short 0040571E
0040570D .68 A0000000 push 0xA0
00405712 .68 00264000 push 00402600
00405717 .56 push esi
00405718 .50 push eax
00405719 .E8 3CBAFFFF call <jmp.&MSVBVM50.__vbaHresultCheckObj>
0040571E >FF75 E8 push dword ptr ss: ;// "123123"
00405721 .68 A4264000 push 004026A4 ;55555
00405726 .E8 3BBAFFFF call <jmp.&MSVBVM50.__vbaStrCmp> ;// 文本内容比较
0040572B .8BF0 mov esi,eax
0040572D .8D4D E8 lea ecx,dword ptr ss:
00405730 .F7DE neg esi
00405732 .1BF6 sbb esi,esi
00405734 .46 inc esi
00405735 .F7DE neg esi
00405737 .E8 18BAFFFF call <jmp.&MSVBVM50.__vbaFreeStr>
0040573C .8D4D E4 lea ecx,dword ptr ss:
0040573F .E8 0ABAFFFF call <jmp.&MSVBVM50.__vbaFreeObj>
00405744 .6A 0A push 0xA
00405746 .66:3BF3 cmp si,bx
00405749 .58 pop eax
0040574A .B9 04000280 mov ecx,0x80020004
0040574F .6A 08 push 0x8
00405751 .894D AC mov dword ptr ss:,ecx
00405754 .5E pop esi
00405755 .894D BC mov dword ptr ss:,ecx
00405758 .8945 A4 mov dword ptr ss:,eax
0040575B .8945 B4 mov dword ptr ss:,eax
0040575E .C745 8C 68264>mov dword ptr ss:,00402668 ;VB Crack-Me 1.0 by CodeZero
00405765 .8975 84 mov dword ptr ss:,esi
00405768 .8D55 84 lea edx,dword ptr ss:
0040576B .8D4D C4 lea ecx,dword ptr ss:
0040576E 74 2A je short 0040579A ;// 关键跳转
00405770 .E8 CDB9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
00405775 .8D55 94 lea edx,dword ptr ss:
00405778 .8D4D D4 lea ecx,dword ptr ss:
0040577B .C745 9C B4264>mov dword ptr ss:,004026B4 ;Congratulations! you've really made it :-)
00405782 .8975 94 mov dword ptr ss:,esi
00405785 .E8 B8B9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
0040578A .8D45 A4 lea eax,dword ptr ss:
0040578D .50 push eax
0040578E .8D45 B4 lea eax,dword ptr ss:
00405791 .50 push eax
00405792 .8D45 C4 lea eax,dword ptr ss:
00405795 .50 push eax
00405796 .6A 40 push 0x40
00405798 .EB 28 jmp short 004057C2
0040579A >E8 A3B9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
0040579F .C745 9C 10274>mov dword ptr ss:,00402710 ;Invalid unlock code, please try again.
004057A6 >8D55 94 lea edx,dword ptr ss:
004057A9 .8D4D D4 lea ecx,dword ptr ss:
004057AC .8975 94 mov dword ptr ss:,esi
004057AF .E8 8EB9FFFF call <jmp.&MSVBVM50.__vbaVarDup>
004057B4 .8D45 A4 lea eax,dword ptr ss:
004057B7 .50 push eax
004057B8 .8D45 B4 lea eax,dword ptr ss:
004057BB .50 push eax
004057BC .8D45 C4 lea eax,dword ptr ss:
004057BF .50 push eax
004057C0 .6A 10 push 0x10
004057C2 >8D45 D4 lea eax,dword ptr ss:
004057C5 .50 push eax
004057C6 .E8 7DB9FFFF call <jmp.&MSVBVM50.#595> ;// 返回到这里
很容易地发现了 对比文本的内容, 和 。55555 这个文本是固定的,所以注册码也是固定的 55555 。但是,这个程序的本意不是搜寻注册码,而是去掉第一个倒计时界面,所以,其实我们的任务还未完成。这个问题的关键是寻找创建窗口的代码位置,然后修改弹窗流程就可以了!
在OD中尝试了很多地方,都无法找到。所以,使用VB反编译工具试试看:
没办法,都无法跟踪到代码,实在没办法了!我们试试一个VB事件跟踪事件的软件:
遗憾的是,仍然无法找到窗口创建的代码位置。所以,只有到此结束!
BY 笨笨D幸福
见证了一个大神的成才之路! 谢谢楼主分享,同意楼上看法,能出视频教程最好 建议出视频的。好理解,做课件又省事。 通过VBExplorer工具我们可以看到有3个窗口。
查看属性的一些信息可以确定。
form1为输入注册码的窗口,为主窗口。
form2为倒记时的窗口
form3为点击关于按钮时弹出的窗口(这个没什么用)
form1有三个事件。
我们找到form_load事件。地址00405905 。我想去掉form2的启动。结果没成功。
找到个方法能跳过倒记时但跳不过那个窗口。
查找form2有6个记时器,我改了其中一个倒记时时间5改为0.结果它又启动的后面的记时器进行验证。(改一个没用,要嘛全改)
倒记时完成后有个按钮事件。地址004059c2。跳向它的来源发现它的下面有6个事件是依次跳向记时器的。
我们在它跳到第1个记时器时改为按钮1的事件 00402345 E9 7B370000 jmp 004059C2
这样他就跳过5秒倒记时了。
00402330 .816C24 04 570>sub dword ptr ss:,0x57
00402338 .E9 85360000 jmp 004059C2 ;这个条向注册窗口
0040233D .816C24 04 330>sub dword ptr ss:,0x33
00402345 E9 7B370000 jmp 00405AC5 ;跳向记时器1
0040234A .816C24 04 3F0>sub dword ptr ss:,0x3F
00402352 .E9 77380000 jmp 00405BCE ;跳向记时器2
00402357 .816C24 04 430>sub dword ptr ss:,0x43
0040235F .E9 73390000 jmp 00405CD7 ;跳向记时器3
00402364 .816C24 04 470>sub dword ptr ss:,0x47
0040236C .E9 6F3A0000 jmp 00405DE0 ;跳向记时器4
00402371 .816C24 04 4B0>sub dword ptr ss:,0x4B
00402379 .E9 6B3B0000 jmp 00405EE9 ;跳向记时器5
0040237E .816C24 04 530>sub dword ptr ss:,0x53
00402386 .E9 673C0000 jmp 00405FF2 ;跳向记时器6
shuguang 发表于 2014-7-19 17:41
通过VBExplorer工具我们可以看到有3个窗口。
查看属性的一些信息可以确定。
form1为输入注册码的窗口,为 ...
{:1_921:}很厉害啊!加油! shuguang 发表于 2014-7-19 17:41
通过VBExplorer工具我们可以看到有3个窗口。
查看属性的一些信息可以确定。
form1为输入注册码的窗口,为 ...
直接在 00405905 处把 push ebp 改成 retn 就可以跳过nag窗口了. shuguang 发表于 2014-7-19 17:41
通过VBExplorer工具我们可以看到有3个窗口。
查看属性的一些信息可以确定。
form1为输入注册码的窗口,为 ...
我想问下大神,你是怎么找到跳向计时器的代码的 fcxfly 发表于 2014-9-10 13:52
直接在 00405905 处把 push ebp 改成 retn 就可以跳过nag窗口了.
你是怎样找到弹nag窗口的call的,大神。
页:
[1]