-
-
[原创]菜鸟爆破二笔速成
-
发表于:
2005-8-17 13:25
9314
-
================================================================
第一次在论坛里发帖,水平有限,写了篇爆的文章,希望大家能给点意见!
非常感谢!
================================================================
【软件名称】: 二笔速成
【加壳类型】:None
【注册方式】:用户名+注册码
【编译语言】:Delphi
【破解方式】: 爆破
【破解工具】:Olldbg,w32dasm,peid,hiew
【破解声明】:此文纯属学习交流,别无它意,本人菜鸟,写此文没有多大的教学意义,只是把自己破解软件的思路写写,希望能得到高手的指点,如果的确有兄弟技术比我要差点的话,更希望本文能给这些兄弟们一些帮助。
【破解过程】:
根据,大虾们传授的经验,先用peid查查壳,一查,很好没有壳,Delphi编译,呵呵,对Delphi不熟,有点害怕!!
然后,运行程序,发现程序一开始就要求输入用户名,然后提示本机的机器码,让你输入注册码,如果注册码输错,没任何提示,程序终止!
看来,下断不容易!
用w32dasm反汇编,找找线索。在串式数据参考里面发现“请输入注册码”,很好,双击来到
====================================================
004B5A36 68 BC5B4B00 push ebsc.004B5BBC //光标停在这里
004B5A3B 8D45 EC lea eax,dword ptr ss:[ebp-14]
004B5A3E BA 03000000 mov edx,3
004B5A43 E8 C0EEF4FF call ebsc.00404908
004B5A48 8B55 EC mov edx,dword ptr ss:[ebp-14]
004B5A4B 33C9 xor ecx,ecx
004B5A4D B8 945B4B00 mov eax,ebsc.004B5B94
004B5A52 E8 9526F8FF call ebsc.004380EC
004B5A57 8D43 10 lea eax,dword ptr ds:[ebx+10]
004B5A5A 8B55 F0 mov edx,dword ptr ss:[ebp-10]
004B5A5D E8 82EBF4FF call ebsc.004045E4
004B5A62 E8 8DEEFFFF call ebsc.004B48F4
004B5A67 8BC3 mov eax,ebx
004B5A69 E8 F2D7FFFF call ebsc.004B3260
004B5A6E 84C0 test al,al
004B5A70 74 2B je short ebsc.004B5A9D //这里有可能关键跳转
004B5A72 E8 C1F5FFFF call ebsc.004B5038
====================================================
好象是关键的地方!不管,破解心切,来到olldbg,在004B5A36下断,运行程序,弹出对话框,要求输入用户名,随便输入一个,点确定,程序停在004B5A36处,单步运行,遇到call跳过,因为要爆破,没必要进入,只要找到关键跳转,跳过call后,程序要求输入注册码,随便输入,单步运行,此时注意到随便输入的注册码被压到寄存器中,看来,爆破应该不难,往下走,到
004B5A70 74 2B je short ebsc.004B5A9D
这里,发现跳了,呵呵,破解心切,将je改成jne,试试,f9运行程序,呵呵,果然不错,程序进入了界面。
找到了关键,就好解决问题了!
看来作者似乎很给我们这些菜鸟面子!
看看,我们是不是真的爆破了!重新运行程序,发现程序仍然要求输入用户名和注册码,呵呵,看来作者也是有预防的!
不过根据“懒程序员定律”(我自己瞎编的呵呵*^_^*),为了方便,注册码的比较应该是在一个子程序里,呵呵,根据“懒程序员定律”,一般作者如果在程序启动时也要检验注册码的话,会同样调用这个子程序,呵呵!
分析一下上面的代码,我们不难看出,
004B5A69 E8 F2D7FFFF call ebsc.004B3260
004B5A6E 84C0 test al,al
004B5A70 74 2B je short ebsc.004B5A9D
很明显,在关键跳转前调用了ebsc.004B3260
很好,破解心切,来到ebsc.004B3260下断!
运行程序,中断在004B3260处,观察堆栈,
===================================
0012FB58 004B59DE 返回到 ebsc.004B59DE 来自 ebsc.004B3260
0012FB5C 0012FB8C 指针到下一个 SEH 记录
0012FB60 004B5AD9 SE 句柄
0012FB64 0012FB84
0012FB68 0014A6F0
0012FB6C 004FDC04 ebsc.004FDC04
0012FB70 00000000
0012FB74 00000000
0012FB78 0142D854 ASCII "20021051" //我们输入的注册码
0012FB7C 0143D0DC ASCII "82B6DF8BC6EC5357" //机器码
===================================================================
很好,我们离胜利应该不远了!
来到004B59DE处,下断,运行程序,程序马上停在004B59DE处,
===================================================================
004B59D7 8BC3 mov eax,ebx
004B59D9 E8 82D8FFFF call ebsc.004B3260 //这里调用注册码比较子程序
004B59DE 84C0 test al,al //停在这里
004B59E0 74 1A je short ebsc.004B59FC//在此跳转
004B59E2 8BC3 mov eax,ebx
004B59E4 E8 1FDEF4FF call ebsc.00403808
004B59E9 8BC6 mov eax,esi
004B59EB E8 50D9FAFF call ebsc.00463340
004B59F0 8BC6 mov eax,esi
004B59F2 E8 11DEF4FF call ebsc.00403808
===================================================================
一看,又有一个比较和跳转,看来我们找到关键了,修改je到jne,运行程序,果然,直接进入程序!
分析一下上面的代码,很容易发现,al的值是关键,而且在004B59DE处的al值是调用ebsc.004B3260得到的结果,我们到ebsc.004B3260处看看:
===================================================================
004B3260 53 push ebx
004B3261 8BD8 mov ebx,eax
004B3263 8BC3 mov eax,ebx
004B3265 E8 8EFFFFFF call ebsc.004B31F8
004B326A 84C0 test al,al //又一个比较
004B326C 74 04 je short ebsc.004B3272 //如果注册码不对就跳,这才是程序的关键
004B326E B0 01 mov al,1
004B3270 5B pop ebx
004B3271 C3 retn
004B3272 33C0 xor eax,eax
004B3274 5B pop ebx
004B3275 C3 retn
===================================================================
这个子程序很简单,它调用了 ebsc.004B31F8来比较注册码,将结果存到al中作者多此一举又来个跳转,这样我们只要修改004B326C处的跳转就可以了!
呵呵!
拿出hiew,找到004B326C处,将74改为75,运行程序,没问题!
【总结体会】:呵呵,其实作者的保护力度还是很够的,只是我运气好碰上了!我在用hiew修改的时候,把hiew复制到ebsc.exe所在的文件夹,修改完了以后居然程序不能运行!我以为程序有crc校验,又把改的地方改回来了,发现还是能用,但是用olldbg可以,我就又找了个loader程序的源码,还是不行,我又慢慢的分析了一下程序,发现程序用到了CreateToolhelp32Snapshot函数,呵呵,虽然我不是很清楚这个函数的意思,我知道这个函数跟anti-dbg有关,看来作者还是有准备的,并不想我想的那样!我在CreateToolhelp32Snapshot下断,慢慢单步运行,最后我发现了一些常用的破解工具的名字,像softice等,但是,就是没有olldbg!我的运气好,也是作者的问题,大概作者还不了解olldbg吧!否则,我就要碰壁了!
我在再次调试的过程中没有解决hiew修改程序不能运行的问题!不过很偶然,我用loader动态改程序的时候,发现,如果在ebsc.exe所在的目录下有非该软件的文件,ebsc.exe就不能运行,因为我用hiew修改ebsc.exe后,把hiew留在那个目录,也许是这个原因导致了程序不能运行!
我再次修改,并把hiew删除,呵呵,运气好,程序能用了!
作者在保护软件方面还是花了不少心思的!
非常感谢大家能读完全文。我特地找了个简单的程序,写写自己的思路,希望高手们能指点小弟一下!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!