庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>脱壳技术>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

对PECompact.exe v1.34的手动脱壳(2)

 作者:本站收集   日期:2005-5-28
字号选择〖 〗/ 双击滚屏 单击停止   
现在我们来保存输入表,下指令
PAGEIN D 40D000 C40 C:\TEMP\DUMP.BIN

现在再来确定程序真正的Entry Point

1、这里我为了省事,干脆
BD *
禁止所有中断,然后按F5运行程序,重新在SoftICE的Loader中单击Load按钮运行程序,(当然这种方法在对PECompact.exe的脱壳中可以用,其他的就不一定了)又中断在第一条指令。窗口显示如下:
015F:0041E800 EB06 JMP 0041E808 (JUMP )
015F:0041E802 6800E00100 PUSH 0001E000
015F:0041E807 C3 RET
==> 0041E808 9C PUSHFD
015F:0041E809 60 PUSHAD
015F:0041E80A E802000000 CALL 0041E811 (注意了,这里可不是什么过程调用,只是JMP的变形而已)
015F:0041E80F 33C0 XOR EAX,EAX
015F:0041E811 8BC4 MOV EAX,ESP
015F:0041E813 83C004 ADD EAX,04

注意,在Call 0041E811语句处我们要按F8键继续,不然就Over了。这里的Call语句可不是什么真正的过程调用。无非是变相的一种Jmp跳转语句而已。要识别它也不难。看看它跳转的地址是否就在附近。如果是就小心了。按F8键不要按F10键。
好了,转过了一道小小的弯,一路F10下来,还顺风顺水。直到如下
015F:0041E860 5F POP EDI
015F:0041E861 8DB570804000 LEA ESI,[EBP+00408070]
015F:0041E867 B99F030000 MOV ECX,0000039F
015F:0041E86C F3A5 REPZ MOVSD
015F:0041E86E 5F POP EDI
015F:0041E86F C3 RET
到了第一个ret。看!它要跳转了。又一段旅程开始。按F8继续,这一段就要小心一点,直到。
015F:00420121 8BB53E854000 MOV ESI,[EBP+0040853E]
015F:00420127 8BBD42854000 MOV EDI,[EBP+00408542]
015F:0042012D E82E0A0000 CALL 00420B60
015F:00420132 61 POPAD
015F:00420133 9D POPFD
015F:00420134 50 PUSH EAX
015F:00420135 6800E04100 PUSH 0041E000
015F:0042013A C20400 RET 0004
又要跳转到41E000了。瞧这里,又要小心了。不要在Call 0041E009语句处按F10哦
015F:0041E000 9C PUSHFD
015F:0041E001 60 PUSHAD
015F:0041E002 E802000000 CALL 0041E009
015F:0041E007 33C0 XOR EAX,EAX
015F:0041E009 8BC4 MOV EAX,ESP
015F:0041E00B 83C004 ADD EAX,04
一路下来到
015F:0041E092 FFD0 CALL EAX
015F:0041E094 FFA59A214000 JMP [EBP+0040219A]
015F:0041E09A 61 POPAD
015F:0041E09B 9D POPFD
015F:0041E09C 6800704100 PUSH 00417000
015F:0041E0A1 C3 RET
又要跳到417000了。这里又要小心Call 00417009语句了。
015F:00417000 9C PUSHFD
015F:00417001 60 PUSHAD
015F:00417002 E802000000 CALL 00417009
015F:00417007 33C0 XOR EAX,EAX
015F:00417009 8BC4 MOV EAX,ESP
015F:0041700B 83C004 ADD EAX,04
一路下来,终于到终点站了。万岁!
015F:00417090 6A00 PUSH 00
015F:00417092 FFD0 CALL EAX
015F:00417094 FFA59A214000 JMP [EBP+0040219A]
015F:0041709A 61 POPAD
015F:0041709B 9D POPFD
015F:0041709C 6800104000 PUSH 00401000
015F:004170A1 C3 RET
程序真正的入口到了。在ret指令处我们下指令:
PAGEIN D 400000 31000 C:\TEMP\DUMP.EXE

第三步。开始我们的后期修补工作。(Zzzzzz.....Zzzzzz......什么,大家都睡着了,没办法我总不能就此结束吧。咬牙继续写下去。)

1、启动HexWorkShop,打开Dump.exe。用菜单中的Go命令定位到0000D000处。用Select Block命令选择C40个字节,按Del键删除。

然后打到Dump.bin文件,用菜单中的Select Block命令选择C40个字节(用Select All一样)。用Copy命令复制到剪贴板。切换到Dump.exe窗口用菜单中的Paste命令粘贴过来。(注意当前位置是从D000开始的,不要贴错位置哦)

2、启动ProcDump。单击PE Editor打开Dump.exe文件。然后单击Sections,把每个Section中
PSize改成和VSize同样大小,Offset改成和RVA同样大小。按OK确定。

3、然后修改Entry Point为00001000。单击Directory按钮修改其中的Import Table的RVA为0000D000,Size为00000C40,然后保存。

4、该收工吧。看看成果。运行Dump.exe。屏幕显示 "找不到所需的.Dll文件 - JCALG1.DLL"不存在。 (险些晕倒)。
5、再看看,回到HexWorkShop窗口。用菜单中的Go命令定位到00D000处,找到如下位置:
0000D000 0000D0C8 00000000 00000000 0000D4A0 ................
0000D010 0000D2B4 0000D1A0 00000000 00000000 ................
0000D020 0000D4AD 0000D38C 0000D1CC 00000000 ................
0000D030 00000000 0000D4B7 0000D3B8 0000D260 ............`...
0000D040 00000000 00000000 0000D4C2 0000D44C ............L...
0000D050 0000D284 00000000 00000000 0000D4CF ................
0000D060 0000D470 0000D28C 00000000 00000000 p...............
0000D070 0000D4DC 0000D478 0000D294 00000000 ....x...........
0000D080 00000000 0000D4E9 0000D480 0000D2A4 ................
0000D090 00000000 00000000 0000D4F5 0000D490 ................
0000D0A0 0000D2AC 00000000 00000000 0000D500 ................
0000D0B0 0000D498 00000000 00000000 00000000 ................
0000D0C0 00000000 00000000 0000D50A 0000D51A ................
0000D0D0 0000D526 0000D538 0000D548 0000D556 &...8...H...V...
6、把从0000D08C开始到0000D0B2之间的字节全部改为00。保存。为什么这样改?因为
这之间的字节分成两段,分别对应着输入表中对JCALG1.DLL和aplib.dll的引入。
0000D2A4 00000000 00000000 0000D4F5 0000D490
0000D2AC 00000000 00000000 0000D500 0000D498

7、运行,Ok!

附:
我写了个ProcDump的Script如下,可以省略大部分步骤。现在简要说明一下。
运行ProcDump。用Script脱壳出文件Dump.exe,然后按修补工作中的第3-5步修改即可。不过第5步时定位到0000C600字节处。因为ProcDump脱壳出的Dump.exe文件头只有600个字节,而内存中文件头要占1000个字节。所以可以得到VA=D000-1000-600=C600字节。

[5'My ONE PECompact v1.34]
L1=OBJR
L2=LOOK 60
L3=BP
L4=OBJR
L5=LOOK C3
L6=BP
L7=WALK
L8=OBJR
L9=LOOK EB,14
LA=BP
LB=WALK
LC=OBJR
LD=LOOK C2,04,00
LE=BP
LF=WALK
L10=OBJR
L11=LOOK C3
L12=BP
L13=WALK
L14=OBJR
L15=LOOK 68,??,??,??,??,C3
L16=BP
L17=STEP
OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
上一篇:天意+Procdump脱PE Compact 1.4 beta6    下一篇:对PECompact.exe v1.34的手动脱壳(1)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-28
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿