资源描述:
《浅谈程序脱壳后的优化》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、写这篇文章的目的是想讣大家了解如何利用现有的工具來优化脱壳后的程序。因为要讣脱壳优化过的程序可以用汉化工具正常汉化的话,要求要稍微高一些,我就基于优化后的文件可止常用汉化工具汉化这样的FI标來讲解。这篇文章主要是为新手服务的,所以肯定比较罗唆,高手对以略过。这篇文章中我采用dwing的WinUpack0.39final讲述。采用WinUpack来讲解的原因主要是这款壳把PE头搞得很讣人郁闷,修复其它脱壳后的程序不需要修复PE文件头,而修复WinUpack却要考虑修复PE头的问题,而且这个壳加壳后把原程序的各个区段都合并了,修复的步骤要多一些,这样也方便大
2、家了解的更详细一点。我准备分两部分來讲述,笫一部分我采用WinUpack0.39final来给我口己用MASM写的一个示例程序加壳,然后来进行脱壳优化,第二部分直接讲解WinUpack0.39final中的那个中文版WinUpackC.exe的脱売优化。其实本來直接写WinLpackC.exe的脱売优化就可以了,不过我开始的时候没准备写WinUpack主程序的脱壳,写到后來才发现用自己写的示例程序加壳后再谈脱壳后的优化,冇点自说自话的感觉,所以临时决定加一个WinUpack主程序的脱壳优化。因为文章已经写了一部分了,不想再重新抓图,就搞出两部分了(看见砖
3、头、鸡蛋扔来,我躲!)。一、示例程序的脱壳优化1、脱壳这里的目标程序是我用MASM写的一个对话框的简单例子,我采用WinUpack的默认选项把原程序test,exe加壳,加壳后的程序名为testl.exe,大小由原来的6.5K变为4.4K。因为WinUpack给程序加壳时修改了PE头的缘故,普通OD可能加载不了用winUpack加壳后的程序,所以我们换用看雪兄修改的OllyTCE载入加壳后的testl.exe,会出现一个“32位可执行文件格式错误或未知”的错误对话框,不用管,点确定,又出现一个“无法在内存中分配XXXXX字节”的错误对话框,继续点确定,我
4、们停在这里:00401018>BEB0114000MOVESI,testl.004011B00040101DADLODSDWORDPTRDS:[ESI];ESI地址处的值就是OEP0040101E50PUSHEAXWinUpack的壳比较好脱,F8到上而的第二条指令吋,ESI所显示的值就是存放OEP的地址。我这里在信息窗口中看到的是以下内容:DS:[EST]=[004011B0]=00401000现在我在反汇编窗口中按CTR+G直接来到地址00401000处,按F4,就停在OEP处了:004010006A00PUSH000401002E879010000
5、CALLtest1.00401180;JMP到kerne132.GetModuleHandleA00401007A31C304000MOVDWORDPTRDS:[40301C],EAX现在我们用LordPE完全转存testl.exe的进程,另存为dumped,exe,现在可以看到这个dumped,exe大小有64K了。不要关0D,打开ImportREC,选择进程testl.cxc,OEP填入1000,选“自动杏找IAT”,会有一个“发现一些信息”的对话框,点确定,再点“获取输入表”,现在我们就得到了完整的输入表了。我们先來保存一下树文件,另存为test_
6、tree.txt«不要关0D和ImportREC,让它们都暂时开在那,先复制一份我们刚才用LordPE完全转存出来的dumped,exe备份。2、根据对齐值分析区段中的内容在开始之前,我们先了解一下对齐的一些概念:文件区块有两种对齐值,一种是磁盘文件小的,另一种是内存中的。PE文件被映射到内存吋,区块总是至少以一个页边界为开始,在x86系统中,每个内存页的大小是4K,也就是0x1000字节,所以在x86系统中,PE文件区块的内存对齐值一般等于0x1000,每个区块按0x1000之倍数内存偏移位置开始。另一•种是磁盘对齐值,这个实例磁盘对齐值是0x1000
7、,每个区块按0x1000之倍数的文件偏移位置开始。有时为了使磁盘文件更小些,你可以用0x200对齐值。有了上面的预备知识,我们现在用LordPE的PE编辑器打开dumped,exe来看看:[PE编辑器]一f:testappdu>ped.eze基本FE头信息入口点:
8、00001018子系统:10002匚镜像基址:100400000区段数目:10003镜像大小:
9、00010000FI朗时间标志:14011B0BE代码基址:
10、00000010注意这T值卜.100001000数据基址:
11、00002000J特征值:1010F□块对齐:00001000.F校验和
12、:100000000文件块对齐:
13、00001000可选头部大小:10148标志字