网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | 防火墙 | IDS/IPS | VPN | PKI | Honeypot | Hacker/Intruder | 黑客技术 | 破解技术 | 加密技术 | 病毒防护 | 木马 | 反垃圾邮件 | 反流氓软件 | 漏洞 | 无线安全 | UNIX | Windows | 安全编程 | 安全软件 | TPM/TCG | 数据恢复 | 企业信息安全 | 个人信息安全
 当前位置: Home > 破解技术 > 文章  
系统安全系列之浅谈程序脱壳后的优化
文章来源: 赛迪网安全社区 文章作者: hackmaster 发布时间: 2007-01-30   字体: [ ]
 

  代码大小和已初始化数据大小改不改都无所谓,我是为了好看点把它改了。一般的代码大小就是指 .text 段的大小,.text 段后面所有段的大小加起来就可以作为已初始化数据大小。全部改完后点镜像大小后面的那个“?”按钮,纠正一下镜像大小,现在就可以保存退出 PETools 了。

  到这基本工作已经完成了,修复后的 dumped_.exe 大小为 20K,运行一下,一切正常。不过这里的 20K 大小还和我们原来的 6.5K 有差距,如果手工修改的话我们可以先把文件对齐的粒度设为 200,再用16进制工具打开程序,把按照 200H 倍数对齐的各个区段的多余的全是 0 的部分删掉,再根据保留下来的部分调整一下区段的 RAW 偏移和大小。当然你可以用 PETools 或 LordPE 的重建功能来重建一下程序,也会完成上述功能。不过我们这里是希望能用汉化工具正常汉化的,所以我们不能用 PETools 或 LordPE 的重建功能来重建程序, 因为它们重建的程序虽然可以正常使用,也比较小,但若用来汉化是很容易出错的。这里还是不要手工来调整了,我们直接用一下 PE Optimizer 这个工具来优化程序一下,这个工具优化出来的程序基本上和手工修改的差不多。优化后我们再看一下大小:20K->6.5K,呵呵,和我们原来的程序一样大。

  二、 WinUpack 主程序的脱壳及优化

  如果文章写到这里收工的话,估计会有人说你自己编个程序,再加个壳来谈脱壳后的优化,你完全可以对照原程序来进行啊。OK,那我们就来个没有对照的,冒着被 dwing 狂扁的危险,我就拿 WinUpack 0.39 final 中的那个中文版 WinUpackC.exe 来开刀。不过 dwing 要来了,大家要掩护我逃跑啊,呵呵。

  WinUpackC.exe 脱壳我就不多说了,OEP 是 0040A4BE,直接在 OD 中 CTR+G 转到地址 0040A4BE,F4 运行到这,就可以用 LordPE 完全转存了。我们还是把转存后的文件保存为 dumped.exe。现在不要关 OD,在 ImportREC 中选择 WinUpackC.exe 的进程,输入 OEP:A4BE,选自动查找 IAT,可以得到正确的输入表,大小是 00000B18。保存一下树文件备用。让 OD 和 ImportREC 都开在那,现在我们用 LordPE 的16进制编辑区段功能来观察一下第一个区段中的内容。具体怎么分析原来区段的起始地址我前面已经说过了,此处只谈结果。经分析可知偏移 1000-AFFF应该是代码段,大小为 A000;B000-DFFF 应该是数据段,E000-FFFF 应该是另一个段;功能我不是很清楚,可能原来也用于存放输入表信息的。我就把它和前面的 B000-DFFF 一起当成数据段,这样数据段就大小就是10000 - B000 = 5000;10000-11FFF 应该是资源段;12000-12FFF 包含了部分输入表的信息,应该是加壳后搞出来的。不过这个段对我们毫无作用,不作考虑。现在对我们有用的就是偏移 1000-FFFF 的部分,这里有两个区段。根据 ImportREC 中所显示的输入表大小 00000B18 及前面两个段用到的偏移,我们只要在偏移 10000 处添加一个大小为 1000 的段用来存放输入表信息就可以了。因此资源段我们应该让它从 11000 开始。分析完了就可以开工了,先把 dumped.exe 复制一份留作参考,WinHEX 上场,ALT+G 转到偏移 10000 处,从此处开始选择一个直到文件结尾的块,删除。我们还是借用一下 XP_SP2 记事本的文件头,把记事本偏移 0-FFF,大小为 1000 的内容复制过来,覆盖到 dumped.exe 的对应位置。全部完成后保存 dumped.exe。现在由 PETools 上场,用其 PE 编辑器打开 dumped.exe,先把区段数改为 2,再修正一下镜像基址为 00400000,然后转到区段编辑器,根据我们上面分析的两个区段的偏移及大小调整区段的虚拟偏移、大小;RAW 偏移、大小。完成后再新建一个区段用来保存输入表信息,偏移是 10000,大小为 1000,再修改一下特征值。

  现在关掉 PETools,我们开始用 ImportREC 来修正输入表。去掉添加一个新的节前面的勾,在新建输入表信息中填入 RVA:00010000,点修复转存文件,选择我们修改过的 dumped.exe 来修复,完成后我们得到 dumped_.exe。到这就要开始把资源加进去了。 FixRes 上,选我们原来备份的那个 dumped.exe,新建 RVA 为 11000,文件对齐为 200,Dump 资源为 rsrc.bin。

  再让 LordPE 上场吧(有人要说了,这么多工具换来换去你也不嫌累?这个...是比较累,本来是打算自己写一个工具来减小工作量的。不过因为太懒,能将就就将就了)。用 LordPE 打开修正过输入表的那个 dumped_.exe,点区段按钮,在区段编辑窗口中右键选择从磁盘载入段,把我们前面 Dump 的那个 rsrc.bin 添加进来。编辑一下区段。

  现在关掉区段编辑,点击目录按钮,再用 LordPE 打开备份的 dumped.exe 进行参考,我们来编辑一下 dumped_.exe 的目录,主要是调整一下资源目录的 RVA 和大小,把其他一些没用到的目录 RVA 和 大小清零。

  完成后退出 LordPE,再用 PETools 打开 dumped_.exe,编辑可选头中的一些内容及调整镜像大小。

  保存我们所做的工作,退出 PETools,现在 dumped_.exe 文件大小是 72.5K。运行一下 dumped_.exe,呵呵,正常运行了。把 dumped_.exe 复制一份保存为复件 dumped_.exe,用 dumped_.exe 给复件 dumped_.exe 用默认选项加个壳看看, 72.5K->27.3K,原版未脱壳前是 26.6K,看来还是有差距啊。不管了,用 PE Optimizer 来优化一下 dumped_.exe,72.5K->59.5K,收工。

  WinUpack 加壳时合并了区段,而一些其他的壳给程序加壳时并没有合并区段,也没有破坏 PE 头,这样脱壳后的程序优化起来要简单一点,可以省掉前面的到脱壳后的第一个段中判断区段及修正 PE 头的步骤,只要把有用的段给保存下来,没用的去掉,选好位置重建输入表和资源,再装配起来就可以了。要想优化后的程序可以用汉化工具汉化的话,一般都要把资源放在最后一个区段,否则容易出错。而对应 DLL 这样的文件修复时要考虑重定位和输出表,重定位可以采用 ReloX 来修复,同样可以指定位置重建。输出表可以采用看雪兄的工具 PeMove 来挪移,同样这个工具也可以挪移重定位表。关于 DLL 这类文件的脱壳后优化我就不讲了,基本方法类似。

  (参考链接: http://security.ccidnet.com/art/1099/20070129/1012763_1.html)

 
推荐文章
·不用返厂维修,实战破解交换机密
·破解高手常用的破解工具介绍
·经典 常见计算机密码破解实用手
·愚公移山 文档密码全面暴力破解
·解密宝典——十招教你学会软件破
·“猫和老鼠”的较量 软件破解大
 
 
共4页: 上一页 [1] [2] [3] 4 下一页
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
热点文章
·破解QQ密码保护的方法
·USB软件狗的设计及反破
·软件狗[Dongles]的加密
·经典 常见计算机密码破
·破解高手常用的破解工具
·愚公移山 文档密码全面
·解密宝典——十招教你学
·“猫和老鼠”的较量 软
相关分类
相关文章
·系统安全之各类脱壳方法
·顶尖网络高手写的alexa
·强力破解E-mail密码三种
·软件狗[Dongles]的加密
·破解高手常用的破解工具
·经典 常见计算机密码破
·解密宝典——十招教你学
·“猫和老鼠”的较量 软
更多...
 
 

Copyright(c) 2001-2008 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统
$Id: article_article.html,v 1.3 2007/02/10 12:00:37 yjs Exp $