脱壳----对用Petite2.2加壳的程序进行手动脱壳的一点分析
(以后如未特别说明,这里所说的脱壳均是指对用Petite2.2加壳的程序而言)
前言:这几天一直在对Petite2.2做试验。总结一下这几天的一点经验,希望对大家对Petite2.2加壳的程序进行手动脱壳时有一点帮助。一般按照以下方法可以简化跟踪的过程,也节省一点大家手动脱壳的时间。(当然大家如果手头上有对此的自动脱壳的工具的话,就不在此列了。可惜现在我手头上还没有。也没有编写这类脱壳程序的经验,不知道如何下手。希望以后我能对此知其一二 :-) )这里能简化的一点步骤就是不需要重建import table,(以下可以看到原因)。看到r!sc的文章对Petite.exe(注意是加壳程序本身)脱壳时,需要自己构造一个import table(我没有构造import table的经验,想来这是一件很花工夫的事情),这很让人以为Petite加壳的程序也需要这样做。实际上情况比想象的好 :-)。这也是我写篇文章的动机所在。
以下用Petite2.2加壳Notepad.exe(M$自带的记事本程序)来说明一下。
目标文件: Notepad.exe (用Level 4级压缩方式加壳)
加壳方式: Petite 2.2
所用工具: SoftICE v4.0, ProcDump v1.6.2, ICEDump v6.0.15
作者: ljttt
1、首先,当然少不了用ProcDump来分析一下对我们有用的文件信息。
Entry Point: 0000D042
Size of image: 0000E000
Image Base: 00400000
2、用SoftICE的Loader加载加壳程序。
3、设断点
bpx loadlibrarya do "dd esp->4"
4、F5运行程序,将中断在我们所设断点上。观察数据窗口。可以看到将要被程序加载的的动态链接库的名字字符串。如下:
0030:00400800 4C454853 2E32334C 006C6C64 4E52454B SHELL32.dll.KERN
0030:00400810 32334C45 6C6C642E 45535500 2E323352 EL32.dll.USER32.
0030:00400820 006C6C64 33494447 6C642E32 6F63006C dll.GDI32.dll.co
0030:00400830 676C646D 642E3233 41006C6C 50415644 mdlg32.dll.ADVAP
0030:00400840 2E323349 006C6C64 00000000 00000000 I32.dll.........
0030:00400850 00000000 00000000 00000000 00000000 ................
但是这里不是image_import_descriptors的部分。大多数时候我们看到的内存地址为400800,(这是在PE头的空间内),从我跟踪的几个程序的情况分析,还原代码总是把要加载的链接库名字复制到此,而没有破坏真正的image_import_descriptors,因此我们要找到真正的import table的入口地址。
5、下指令。向后搜索字符串
s 30:400850 l ffffffff 'SHELL32.dll'
搜索结果如下:
Pattern found at 0030:0040D382 (0000CB32)
6、下指令。搜索import table部分
s 30:400000 l ffffffff 82,D3,00,00
搜索结果如下:
Pattern found at 0030:0040D234 (0000D234)
7、我们来看看真正的import table的入口,下指令
dd 40d234-c
显示如下:
0030:0040D228 00000000 356C813B 7FCE0000 0000D382 ....;.l5.......
0030:0040D238 0000D2D4 00000000 355A749D BFF70000 .........tZ5....
0030:0040D248 0000D38E 0000D2C0 00000000 356C8139 ............9.l5
0030:0040D258 BFF50000 0000D39B 0000D2B4 00000000 ................
我们要记在其RVA=40D228-400000=0000D228。大小嘛,向下找到大量00字节的地方。计算1B4=0040D3DC-0040D228。
(我想大一点也无所谓吧)
8、好了import table的问题结解决了。再来看看找Entry Point的问题。按F12键回到Notepad.exe领空。(如果你刚才中断在Loadlibrarya领空时,没有按F12的话)显示如下:(需要把光标向上移动几行才能看到我这样的显示结果)
015F:0040596C BE00600000 MOV ESI,00006000
015F:00405971 03F5 ADD ESI,EBP
015F:00405973 8D8D00080000 LEA ECX,[EBP+00000800]
015F:00405979 8BD8 MOV EBX,EAX
015F:0040597B 833E00 CMP DWORD PTR [ESI],00
015F:0040597E 0F840E020000 JZ 00405B92 <---注意了,下一段是循环。这里才是跳出大循环的地方
015F:00405984 51 PUSH ECX
015F:00405985 51 PUSH ECX
015F:00405986 FF9590070000 CALL [EBP+00000790]
015F:0040598C 85C0 TEST EAX,EAX <---按F12后,你回到的就是这个地方
015F:0040598E 0F84DF000000 JZ 00405A73
015F:00405994 8BF8 MOV EDI,EAX
015F:00405996 03403C ADD EAX,[EAX+3C]
015F:00405999 8B4078 MOV EAX,[EAX+78]
015F:0040599C FF743818 PUSH DWORD PTR [EDI+EAX+18]
015F:004059A0 8B4C3824 MOV ECX,[EDI+EAX+24]
9、对于大循环,我们可以直接跳出,下指令
bd *
bpx 405B92
10、按F5键,中断在此:
015F:00405B92 59 POP ECX <--你停在此处
015F:00405B93 5E POP ESI
015F:00405B94 FD STD
015F:00405B95 33C0 XOR EAX,EAX
015F:00405B97 B956030000 MOV ECX,00000356
015F:00405B9C E898740000 CALL 0040D039 <--小心了,按F8键进入
11、按F8键进入Call 0040D039,就到了程序的入口处了。如下:
015F:0040D039 5F POP EDI
015F:0040D03A F3AA REPZ STOSB
015F:0040D03C 61 POPAD
015F:0040D03D 669D POPF
015F:0040D03F 83C408 ADD ESP,08
015F:0040D042 E98540FFFF JMP 004010CC <--这就是真正程序的Entry Point了
12、在JMP 004010CC处,保存内存的映象的时候到了。下指令
Pagein d 400000 e000 c:\temp\dump.exe
13、开始修补dump.exe。用ProcDump把每个Section的Offset改成RVA大小。把PSize改成VSize大小。
把Entry Point改成000010CC (即004010CC-00400000=10CC)。把Directory中的Import Table的RVA改成D228,Size改成1B4即可。
后记:(现在我怎么这么多废话)
从步骤8-13可以发现。Petite2.2加壳的程序一般从Loadlibrarya中断回来就快到真正程序的Entry Point了。一般在循环退出后的一个Call调用内就可以看到Entry Point了。(该循环应该是加载动态链接库的各个函数吧) 而真正的import table一般在LoadLibrarya中断后用搜索的方法可以找到。
俺现在还没能写出ProcDump的Script :-( 。只好Post此文滥芋充数了。不过还好,写此文只花俺1个多小时。写文章看来同样也是熟能生巧的哦。:-)
好了,写Script的历史暂时告一段落。对于写ProcDump中的Bhrama Client不是一日之功,以后有时间再学习学习。
或者哪位高手写个教学,我再学习后再说,那样可以省不少摸索的功夫了。呵呵....
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>