软件名称:copyall2.06b 50KB
下载地点:http://www.vdsarg.com
撰 稿 人: 井 风
时 间: 2002-03-28
破解工具:Soft-ice 4.05 Trw2000 1.22 BW2000 0.2
解题难度:[专 业] ##[学 士]## [硕
士] [博 士]
前 言:
这个例子所涉及的问题包括:手工脱壳、自身校验、解除时间限制、除去提醒对话框四个方面。
过 程:
1、手工脱壳
第一步:启动 BW2000 0.2 (下载:fsdb.yeah.net),点[Track],启动copyall.exe,这时
BW2000显示入口点为00404768,将它记下来;
第二步:用TRW2000载入copyall.exe,下命令GO 404768,这时程序来到0167:00404768处,
下命令MAKEPE,稍后命令执行完毕,退出TRW2000,这时在copyall.exe所在目录
便产生一个新执行文件newpe.exe,至此手工脱壳完成。
2、解决自身校验
第一步:执行TRW2000,设断点BPX MESSAGEBOXA,执行NEWPE.EXE,程序中断于[1]CALL中
CALL USER32!MESSAGEBOXA,按F12返回到调用处,可找出[1]。
0167:00403816 PUSH ECX
0167:00403817 LEA EAX,[ESP+0314]
0167:0040381E PUSH EDX
0167:0040381F PUSH EAX
0167:00403820 CALL `USER32!wsprintfA`
0167:00403826 LEA ECX,[ESP+031C]
0167:0040382D PUSH ECX
0167:0040382E CALL 00401640 <===执行此行出现自身校验错误框,记为[1]
0167:00403833 ADD ESP,BYTE +18
0167:00403836 XOR EAX,EAX <===记为[2]
0167:00403838 POP ESI
0167:00403839 ADD ESP,0504
0167:0040383F RET
0167:00403840 MOV EAX,[0040FCA8]
0167:00403845 SUB ESP,0400
0167:0040384B CMP EAX,0400
0167:00403850 JNA 0040387C
0167:00403852 MOV ECX,[0040FC9C]
0167:00403858 MOV EDX,[0040FCA0]
0167:0040385E SHR EAX,0A
0167:00403861 PUSH EAX
0167:00403862 MOV EAX,[0040FCA4]
第二步:用16进制编辑器将[1]行5字节改成90 90 90 90 90,将[2]处2字节改成B0 01。
第三步:运行newpe.exe,程序正常运行了,OK!
3、解除时间限制
第一步:将系统时间调回到2002年3月,运行程序,提示本软件试用期已结束,程序退出。
第二步:设断点:BPX MESSAGEBOXA,运行程序,程序中断于[32]行CALL中,按F12返回到
[32]处。
0167:00402DBA CMP ESI,BYTE +4E
0167:00402DBD JZ 00402E0B
0167:00402DBF CMP ESI,0111
0167:00402DC5 JNZ 00402DFA
0167:00402DC7 CALL 00401090 <===深入跟踪此CALL,看看应如何才能使它永远
返回‘0’值。
0167:00402DCC CMP EAX,BYTE +01
0167:00402DCF JNZ 00402DE4 <===此处若跳则会越过[31],只要前面调用返回
的值永远是“0”就OK。
0167:00402DD1 PUSH DWORD 0040ACE4
0167:00402DD6 CALL 00401630 <===执行此行则出现提示试用期结束,记为[31]
0167:00402DDB PUSH EBX <===记为[32]
0167:00402DDC CALL 00402EB0
0167:00402DE1 ADD ESP,BYTE +08
0167:00402DE4 MOV EDX,EDI
0167:00402DE6 PUSH EBP
0167:00402DE7 SHR EDX,10
第三步:分析以上代码,由后向前
第四步:深入分析0167:00402DC7 CALL 00401090 这行调用,如何使它永运返回“0”值。
0167:00401090 A174B94000 MOV EAX,[0040B974]
0167:00401095 83EC10 SUB
ESP,BYTE +10
0167:00401098 56 PUSH
ESI
0167:00401099 BE01000000 MOV ESI,01
0167:0040109E 3BC6 CMP
EAX,ESI
0167:004010A0 750A JNZ
004010AC <===这行改成全不跳,记为[33]
0167:004010A2 A170B94000 MOV EAX,[0040B970]
<===这行改成移入EAX寄存器“0”,记为[34]
0167:004010A7 5E POP
ESI
0167:004010A8 83C410 ADD
ESP,BYTE +10
0167:004010AB C3 RET
<===到此行返回,岂不是很好!
0167:004010AC 33C0 XOR
EAX,EAX
0167:004010AE 8D4C2404 LEA ECX,[ESP+04]
0167:004010B2 89442404 MOV [ESP+04],EAX
0167:004010B6 51 PUSH
ECX
0167:004010B7 8944240C MOV [ESP+0C],EAX
0167:004010BB C70570B940000000+MOV DWORD [0040B970],00
0167:004010C5 89442410 MOV [ESP+10],EAX
0167:004010C9 893574B94000 MOV [0040B974],ESI
0167:004010CF 89442414 MOV [ESP+14],EAX
第五步:如上分析,就能永远返回‘0’。
第六步:修改程序,将[33]处2 字节改成 75 00,将[34]处5字节改成B8 00 00 00 00。
第七步:运行程序,一切OK!
4、除去注册提醒框
第一步:运行程序,随便拷贝一个目录,跳出提醒框。
第二步:设断点:BPX MESSAGEBOXA,如上述方法,可找出提醒框的[41]CALL。
0167:0040257F NOP
0167:00402580 MOV EAX,[0040FB74]
0167:00402585 MOV ECX,0190
0167:0040258A CDQ
0167:0040258B IDIV ECX
0167:0040258D SUB ESP,0504
0167:00402593 TEST EDX,EDX
0167:00402595 JNZ 0040259C <===只要全跳就可越过[41]行,记为[42]
0167:00402597 CALL 00402850 <===执行此行出现提醒框,记为[41]
0167:0040259C PUSH ESI
0167:0040259D PUSH EDI
0167:0040259E PUSH DWORD 0104
0167:004025A3 LEA EDX,[ESP+0C]
0167:004025A7 PUSH DWORD 0040A81C
第三步:将[42]处1个字节改成 75 。
第四步:运行程序,一切OK!
小 结:
这个程序破解过程虽然简单,但它具有一定的代表性。
后 记:
有疑问请与我联系:hz.cy@163.net
- 标 题:copyall2.06b (4千字)
- 作 者:井 风
- 时 间:2002-3-24
- 链 接:http://bbs.pediy.com