题目:Windows Commander破解教程
软件版本:4.53
文件大小:1.30MB
适用平台:Win9x/NT
软件简介:对于文件与路径的寻找、复制、移动都相当方便。可直接阅读Hex、Binary 或纯文本格式的文件,功能
远胜于资源管理器。
工具:TRW,FI(或者PEID),OD
难度:易(keyfile保护)
引子:今天看了2篇关于这个软件的破解,一时兴起拿这个Windows Commander 开刀,首先拿FI或者PEID查看这个
软件是用ASpack2.1压缩过的,我参考其他大侠在精华3的文章,用TRW脱壳,下pnewsec命令却没有反应,泄气。
看到那些作者能够顺利脱壳,真是羡慕。不知为什么会这样呢?精华3的6篇文章有5篇(其中3篇是一个作者写的,
重复出现的)关于这个软件的4.52版本的注册破解,都是这么描述的,看来我是例外???我纳闷极了。用
ASpackDIE脱壳后总是提示出错“该程序执行了非法操作,即将关闭。”而且接着出第二个提示框“本次操作由于
这台计算机的限制被取消,请与系统管理员联系”。我Faint!不知怎么回事,这个AspackDIE看来无法使Aspack
类型的壳Die掉!!我只有自己想其他出路了。我先用TRW载入这个程序,F10跟踪直到跳到一个新Section,我一看
地址是549f2c,根据经验应该有跨两个节的跳转才对,但是没有发现,因为看到代码里面许多CALL指令都是调用的
40xxxx处的程序,而且用F10跟踪,发现很快程序就执行起来了。我没有找到第二个跨段跳跃。据说可以用“冲击
波”可以找到真正的入口点,我手头还没有这个工具。我先SUSPEND再说,用Prodump转存一下这个程序,用PEID
一看,依然是带壳的。我就尝试用Prodump去壳吧,选择Unpack,选择Aspack2.00类型,然后选择刚才转存的程序
文件,一会儿提示可以保存了,说明脱壳成功,我赶紧用PEID查看一下,果然没有壳了!!用Delphi写的,成功之
路开始第一步了!:)我的脱壳方法可能是独树一帜的吧。:)
1. 去掉脱壳后的错误提示
首先运行一下脱壳的程序如何,结果随便操作几下,大概过3秒钟提示“The wincmd file is
corrupted,possible virus!Wincmd will close.”此刻Ctrl+N唤出TRW,下断点bpx messageboxA,F5退出TRW
,再次运行程序,被TRW拦住。按F10直到返回主程序处,我们发现这个提示框来自4DF186,通过向上查看,这个
CALL所在的函数来自4DEE2C处的跳转。如下代码:
004DF145 > 68 41050000 PUSH 541 //函数入口点
004DF14A . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004DF14D . E8 DA2BF4FF CALL WINUN2.00421D2C
004DF152 . 50 PUSH EAX
004DF153 . E8 B868F2FF CALL <JMP.&USER32.KillTimer>
*
*略去无用代码
*
004DF17D . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004DF180 . E8 A72BF4FF CALL WINUN2.00421D2C
004DF185 . 50 PUSH EAX
004DF186 . E8 D568F2FF CALL <JMP.&USER32.MessageBoxA>
004DF18B . 6A 00 PUSH 0 //我们会停在此处,上面的这个CALL就是出现那个提示框的
函数。
004DF18D . 68 60F00000 PUSH 0F060
004DF192 . 68 12010000 PUSH 112
004DF197 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
================================================
往上寻找蛛丝马迹,发现这个CALL所在的函数来自004DEE2C 的跳转。
004DEE10 > 83E8 09 SUB EAX,9
004DEE13 . 0F84 3E060000 JE WINUN2.004DF457
004DEE19 . 48 DEC EAX
004DEE1A . 0F84 EA060000 JE WINUN2.004DF50A
004DEE20 . 48 DEC EAX
004DEE21 . 0F84 8B060000 JE WINUN2.004DF4B2
004DEE27 . 2D 36050000 SUB EAX,536 //与536h比较,如果相等则没戏。
004DEE2C . 0F84 13030000 JE WINUN2.004DF145 //此跳转跳到上述函数处。把此指令换成6个NOP。
004DEE32 . E9 68070000 JMP WINUN2.004DF59F
004DEE37 > 6A 02 PUSH 2
004DEE39 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004DEE3C . E8 EB2EF4FF CALL WINUN2.00421D2C
004DEE41 . 50 PUSH EAX
004DEE42 . E8 C96BF2FF CALL <JMP.&USER32.KillTimer>
================================================
2.去除操作后立刻退出问题
虽然程序启动后不出现那个错误提示框了,可是如果进行一下操作,比如删除文件什么的,接着就退出了。还有不
少猫腻在里头。打开trw然后下bpx messageboxA断点,F5退出,启动Windows Commander,我们找一个软件功能
试一下,比如我们打开File菜单,执行Combine File命令,被TRW拦住,F12退出TRW,接着弹出一个提示框,点击
OK,再次被拦下。按2次F12,1次F10跟踪到如下地方:
004E8272 |> A1 ECC25400 MOV EAX,DWORD PTR DS:[54C2EC]
004E8277 |. 2D B9230000 SUB EAX,23B9 // 与23B9比较,相等则OK,否则没戏。
004E827C |. 74 0A JE SHORT WINUN2.004E8288 //通往光明之路。改74->EB
004E827E |. B8 01000000 MOV EAX,1
004E8283 |. E8 7CC2F1FF CALL WINUN2.00404504 //调用此CALL则over.
004E8288 |> E8 7780F6FF CALL WINUN2.00450304
004E828D |. 33C0 XOR EAX,EAX
004E828F |. 5A POP EDX
004E8290 |. 59 POP ECX
004E8291 |. 59 POP ECX
004E8292 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004E8295 |. 68 B8824E00 PUSH WINUN2.004E82B8
004E829A |> 8D85 E0FDFFFF LEA EAX,DWORD PTR SS:[EBP-220]
004E82A0 |. E8 4BB3F1FF CALL WINUN2.004035F0
004E82A5 |. 8D85 E4FDFFFF LEA EAX,DWORD PTR SS:[EBP-21C]
004E82AB |. E8 40B3F1FF CALL WINUN2.004035F0
004E82B0 \. C3 RETN
================================================
3.去除NAG窗口问题。这是一个KEYFILE保护程序。我们下bpx createfileA断点,启动程序被拦住,用pmodule命
令回到主程序空间,结果失败,程序接着运行了。没有办法,只有按F12达23次,然后按F10经过一个“世纪”的旅
行,最后还有一个漫长的消息循环过程,最后你会来到这里:
0043C9A3 |. 50 PUSH EAX
0043C9A4 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0043C9A7 |. 50 PUSH EAX
0043C9A8 |. 6A 00 PUSH 0
0043C9AA |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0043C9AD |. 50 PUSH EAX
0043C9AE |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0043C9B1 |. 50 PUSH EAX
0043C9B2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0043C9B5 |. 50 PUSH EAX //如果在此处下断点重新运行程序,你d eax可以看到文件名
Wincmd.key。
0043C9B6 |. E8 8586FCFF CALL <JMP.&KERNEL32.CreateFileA>
0043C9BB |. 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX //回到这个地方来。
0043C9BE |. 837D E4 FF CMP DWORD PTR SS:[EBP-1C],-1
0043C9C2 |. 75 16 JNZ SHORT WINUN22.0043C9DA //此处可改可不改。关键在下面。
0043C9C4 |. E8 5F6BFCFF CALL WINUN22.00403528
0043C9C9 |. 8D80 0C000000 LEA EAX,DWORD PTR DS:[EAX+C]
0043C9CF |. 50 PUSH EAX
0043C9D0 |. E8 7B87FCFF CALL <JMP.&KERNEL32.GetLastError>
0043C9D5 |. 5A POP EDX
0043C9D6 |. 8902 MOV DWORD PTR DS:[EDX],EAX
0043C9D8 |. EB 0D JMP SHORT WINUN22.0043C9E7
0043C9DA |> E8 496BFCFF CALL WINUN22.00403528
按F10继续赶路吧,我们会到这里来:
004CCDAE . 8D85 60FAFFFF LEA EAX,DWORD PTR SS:[EBP-5A0]
004CCDB4 . 8D95 70FEFFFF LEA EDX,DWORD PTR SS:[EBP-190]
004CCDBA . B9 10000000 MOV ECX,10
004CCDBF . E8 685CF3FF CALL WINUN22.00402A2C //此函数处理KEY文件。
004CCDC4 0F84 AE000000 JE WINUN22.004CCE78 //如果为0则OK 。修改此处为JMP,
即E9AF00000090
004CCDCA . 33DB XOR EBX,EBX
004CCDCC . 33D2 XOR EDX,EDX
004CCDCE . 55 PUSH EBP
继续赶路,我们还会遭遇第二个地方校验。如下:
004CD1C9 8D85 60FAFFFF LEA EAX,DWORD PTR SS:[EBP-5A0]
004CD1CF 8D95 60FEFFFF LEA EDX,DWORD PTR SS:[EBP-1A0]
004CD1D5 B9 10000000 MOV ECX,10
004CD1DA E8 4D58F3FF CALL WINUN23.00402A2C //此函数处理KEY文件。
004CD1DF 74 02 JE SHORT WINUN22.004CD1E3 //此处须跳,改为EB 02即JMP。否则下面的标
志被清除就OVER。
004CD1E1 33DB XOR EBX,EBX //或者把这个指令改为mov ebx,1(B301)
004CD1E3 8B85 FCFEFFFF MOV EAX,DWORD PTR SS:[EBP-104]
004CD1E9 E8 D65AF3FF CALL WINUN23.00402CC4
004CD1EE 8B85 F8FEFFFF MOV EAX,DWORD PTR SS:[EBP-108]
004CD1F4 E8 CB5AF3FF CALL WINUN23.00402CC4
004CD1F9 8B85 F4FEFFFF MOV EAX,DWORD PTR SS:[EBP-10C]
================================================
后记:我研究这个软件好几天没有进展,:)当然也参考了几位大侠以前的教程,觉得有些描述的含糊。我自己尝试
了一把,这个软件非常奇怪。以前也从来没有遇到过这样的情况。我的指导思想是,破解软件不在乎新与旧,关键
在于增长经验。破解的多了经验就自然丰富起来了。比如这个软件,执行一个功能后立即退出了,怎么下断点是个
技巧。
另外,我在反汇编过程中使用了OD,的确不错,不过也有其不便之处,和SICE比起来真是尺有所短,寸有所长,不
能说哪个更好。我认为能够解出软件就是好工具。我在用ULTRAEDIT修改软件时,自己想当然的认为4CCDC4处的指
令应该改为0FEB AE000000,就是所谓JMP了,结果我保存了多次最后执行都是出现地址异常错误,我百思不得其解
。最后用OD的Binary Edit功能进行修改,一看原来是我想错了,正确的指令应该是E9 AF000000 90,因为字节数
不够,故补90。就这个小地方折腾我好长时间,最后才发现问题。但多失败不是坏事,说明经验不足,更需要磨练
了:)!
感谢您花费宝贵时间阅读这篇破文!能够对菜鸟有点启发的话,我就认为足矣了。
送菜鸟一副对联:
破文不在长短,能够讲清晰就中;
软件不在新旧,可以供练手则成。
我认为破解分这么几个阶段:
1.初级菜鸟:暴力破解软件,给软件打补丁。一时还找不出注册码算法。
2.中级菜鸟:能够通过跟踪找出注册码算法,但是可能编程功底不行,写不出注册机。
3.高级菜鸟:能够根据算法,写出注册机。
4.初级高手:能够破解比较复杂的安装软件序列号并写出注册机来(如破解用RSA,BLOWFISH等加密算法加密的软
件),实时校验序列号,用VB等写的软件等。
5.中级高手:破解软件狗等比较复杂算法的保护。
6.高级高手:破解硬件狗保护,对系统底层了解非常透彻如操作系统的保护模式下的任务调度。
以上全是一家之言,由于上网相对不方便,没有了解更多的信息,如果存在孤陋寡闻现象也属可以理解!希望高手
多多写出美文指导菜鸟。
QduWg
2006年1月6日下午3:00
qduwg@163.com
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!