下载地址http://www.onlinedown.net/soft/2878.htm 工具:dede,peid,upx,ollydbg 平台:windows 2000 professional 声明:本文只作学习目的,如果需要此软件,请购买正版软件
最近好像ollydbg比较流行,softice有点被大家冷落了,:) 特别是由于windows2000的流行,hmemcpy断点的失效,使softice在2000下调试的难度更大了。其实,softice毕竟还是王牌级的工具。即时中断的功能,我觉得还是比ollydbg强的。本文介绍一下动态跟踪幻影,取得其注册码的思路。
不太喜欢爆破,所以,这篇破文还采用动态分析,来取得软件的注册码。
还是用peid检测一下,呵呵,是upx加的壳。用upx shell脱了壳。观察窗口的类名,得知程序是delphi编的。那当然得请出dede了,哈哈!打开注册窗口,此软件是采用机器码+用户名+注册码的方式注册的,机器码已经生成。打开注册窗口,用winsight得知这个窗口的类名是TfrmReg。呵呵,T开头的类名,97%是delphi的程序了,:)。用dede打开脱壳后的程序。找到这个窗口的代码Regform单元,查看它的button2click事件代码,也就是按下确定按钮时执行的代码,至于确定按钮为什么是button2,而不是button1,button3,其实很简单的,看dfm的坐标就可以了,不过,我是直接看了三个button的代码,一下就看出来,哪个是判断注册码的按钮了,呵呵。
这个时间的汇编代码如下,dede反编译的真整齐!整个过程不长,我就全贴出来吧。
* Reference to control edRegCode : TEdit | 004D5A45 8B8320030000 mov eax, [ebx+$0320]
* Reference to: controls.TControl.GetText(TControl):System.String; | 004D5A4B E8E44BF9FF call 0046A634 //delphi中vcl类的取控件文本方法,从TControl继承 004D5A50 8B45FC mov eax, [ebp-$04] //取得输入的假注册码 004D5A53 50 push eax 004D5A54 8D55F4 lea edx, [ebp-$0C]
* Reference to control edRegID : TEdit | 004D5A57 8B831C030000 mov eax, [ebx+$031C]
* Reference to: controls.TControl.GetText(TControl):System.String; | 004D5A5D E8D24BF9FF call 0046A634 004D5A62 8B45F4 mov eax, [ebp-$0C] //取得生成的机器码 004D5A65 50 push eax 004D5A66 8D55F0 lea edx, [ebp-$10]
* Reference to control edRegName : TEdit | 004D5A69 8B8318030000 mov eax, [ebx+$0318]
* Reference to: controls.TControl.GetText(TControl):System.String; | 004D5A6F E8C04BF9FF call 0046A634 004D5A74 8B45F0 mov eax, [ebp-$10] //取得注册名称 004D5A77 8D4DF8 lea ecx, [ebp-$08] 004D5A7A 5A pop edx
* Reference to : TfrmReg._PROC_004D51CC() | 004D5A7B E84CF7FFFF call 004D51CC //根据机器码和注册名生成真正的注册码 004D5A80 8B55F8 mov edx, [ebp-$08] //edx中存放真正的注册码 004D5A83 58 pop eax //将假注册码取出来
* Reference to: system.@LStrCmp; | 004D5A84 E8BBF2F2FF call 00404D44 //比较之 004D5A89 0F8515010000 jnz 004D5BA4 //不等的话,就去见鬼吧,:) 004D5A8F B201 mov dl, $01 004D5A91 A10CC34300 mov eax, dword ptr [$0043C30C]
| 004D5A96 E87169F6FF call 0043C40C 004D5A9B 8BF0 mov esi, eax 004D5A9D BA02000080 mov edx, $80000002 004D5AA2 8BC6 mov eax, esi
* Reference to: registry.TRegistry.SetRootKey(TRegistry;Windows.HKEY); | 004D5AA4 E8036AF6FF call 0043C4AC 004D5AA9 B101 mov cl, $01
* Possible String Reference to: 'SOFTWARE\Super Computer Companion' | 004D5AAB BA2C5C4D00 mov edx, $004D5C2C 004D5AB0 8BC6 mov eax, esi
............... ...........
004D5B6A 687C5C4D00 push $004D5C7C 004D5B6F 6A00 push $00 004D5B71 6A01 push $01 004D5B73 6A00 push $00 004D5B75 6A00 push $00 004D5B77 8D55E0 lea edx, [ebp-$20] 004D5B7A A1087F5000 mov eax, dword ptr [$00507F08] 004D5B7F 8B00 mov eax, [eax]
* Reference to : TApplication._PROC_0048A164() | 004D5B81 E8DE45FBFF call 0048A164 004D5B86 8D45E0 lea eax, [ebp-$20]
* Possible String Reference to: '-注册成功' | 004D5B89 BA8C5C4D00 mov edx, $004D5C8C
* Reference to: system.@LStrCat; | 004D5B8E E86DF0F2FF call 00404C00 004D5B93 8B55E0 mov edx, [ebp-$20] 004D5B96 33C9 xor ecx, ecx
* Possible String Reference to: ' 感谢你对超级电脑伴侣的支持!希? | 004D5B98 B8A05C4D00 mov eax, $004D5CA0
| 004D5B9D E86651FFFF call 004CAD08 004D5BA2 EB38 jmp 004D5BDC
* Possible String Reference to: '确定' | 004D5BA4 687C5C4D00 push $004D5C7C //注册码不对时,跳到这 004D5BA9 6A00 push $00 //下面将弹出一个窗口,提示错误 004D5BAB 6A01 push $01 //可不是简单的messagebox哦,:) 004D5BAD 6A00 push $00 004D5BAF 6A00 push $00 004D5BB1 8D55DC lea edx, [ebp-$24] 004D5BB4 A1087F5000 mov eax, dword ptr [$00507F08] 004D5BB9 8B00 mov eax, [eax]
* Reference to : TApplication._PROC_0048A164() | 004D5BBB E8A445FBFF call 0048A164 004D5BC0 8D45DC lea eax, [ebp-$24]
* Possible String Reference to: '-输入错误' | 004D5BC3 BAE85C4D00 mov edx, $004D5CE8
* Reference to: system.@LStrCat; | 004D5BC8 E833F0F2FF call 00404C00 004D5BCD 8B55DC mov edx, [ebp-$24] 004D5BD0 33C9 xor ecx, ecx
* Possible String Reference to: ' 注册码错误,请重新输入注册码!' | 004D5BD2 B8FC5C4D00 mov eax, $004D5CFC 004D5BD7 E82C51FFFF call 004CAD08 004D5BDC 33C0 xor eax, eax 004D5BDE 5A pop edx 004D5BDF 59 pop ecx 004D5BE0 59 pop ecx 004D5BE1 648910 mov fs:[eax], edx
用ollydbg加载程序,随便输入一个密码,34343434,注册名cby,在004D5A4B 处下断点,点击确定,程序被拦下来了,边单步执行,边分析。分析结果,看上面。执行到004D5A80 时,d ecx 就可以看到可爱的注册码了。我的机器上是SCC-1273319695192326899922242331022116027104。如果要知道注册码的算法,到004D5A7B 跟进去,分析就可以了。 由于这个程序是delphi编的,而且错误提示不采用messgebox,又是在2000下调试,如果不对症下药,用dede调试,将麻烦不少。
ollydbg还是个好东西哦,好好利用吧~~~
written by coolbaby 2003-06 http://coolbaby.delphibbs.com |
|
查看所有0条评论>>