注册忘记密码

黑客论坛,黑客工具,黑客教程,QQ技术,黑客基地,黑客网络,黑客软件,黑客联盟,免杀,远控,ddos,cc,黑客攻防,黑客编程,黑客定位,手机定位,微信定位,hack,黑客网站,查开房,定位,信息查询

查看: 540|回复: 0

[技术文章] 黑客软件如何设计加壳部分

[复制链接]
   0 UID
   0帖子
   0精华
21
   0威望
500
   0金币
45816
   0贡献
5000
   0阅读权限
   200
   积分
   0
   在线时间
   600 小时
   最后登录
   2020-6-6
发表于 2020-5-20 07:25:38 来自手机 | 显示全部楼层 |阅读模式
    对于加壳部分的设计,其主要的难点在于对宿主程序数据的逻辑处理问题,我们要时刻清楚需要提取什么、需要删除什么以及目的是什么,这就要求我们要对加壳的执行流程与逻辑有一个基本的概念。
   我们经常会遇到的就是一种互相制约的状态,例如,如果你想压缩目标文件,就必须先将文件中的关键内容取出来,并放到合适的位置,但是这个位置只有在压缩完目标文件后才能计算出来,这看似陷入了一个死循环。 当遇到类似的问题时要冷静思考,且不要怕麻烦。就上面的情况来说,我们只需要将关键内容取出来后先暂时存放在一个地方即可,等到目标文件压缩完毕后再将其放到合适的位置上。 不过需要注意的是,这种情况在实际操作中并不常见,如果你在写壳的过程中屡次遇到类似的情况,那么你就要反思自己的整体逻辑是否出了问题。 我们以前面的流程为例,先讲讲预处理部分的第2步。有些人可能有疑问,为什么要在压缩前先将宿主程序按照区段信息映射到一个缓存中呢?难道就不能在Stub中做这件事吗? 首先,我们都清楚大多数的壳都会破坏宿主程序的区段信息,当然我们设计的壳应该也不会例外,这就要求我们自己实现对目标程序的内存映射操作,而完成这些操作的基本数据需求就是源程序的区段信息,这样我们就必须要保存源程序的区段信息,并在加壳时将其传递给Stub部分。如果我们将内存映射操作提前到加壳前进行,那么就免去了传递区段信息的麻烦。 其次,内存映射免不了需要宿主程序的一些其他PE关键信息,如果我们在Stub部分执行这个操作,那么这些信息就要逐一重新获取,而如果在加壳前做这个操作,由于前期的一些准备工作难免会用到这些关键信息,因此在执行内存映射时就可以直接就地取材了。 最后,直接压缩的宿主程序与压缩完成内存映射后的宿主程序并不会对压缩结果的体积产生影响,因为映射后的映像文件虽然总体积变大了数倍,但是实际数据并没有因此而增多,只是数据之间的0x00区域变大了而已。但是对一般的压缩算法来说,压缩10个0x00与压缩10万个0x00就压缩结果的体积来说并没有太大区别。 现在我们再说说预处理部分的第3步,有关于关键资源提取的逻辑我在前面已经讲过了,因此这里不再重复,我们现在要探讨的是一些逻辑问题与细节问题。 首先,之所以要在这一步中提取资源,目的就是在植入Stub的第2步中将这些资源数据随同资源头一起备份到Stub中,并修复资源头中的资源数据指针。 其次,在提取资源的过程中要时刻回想资源的3层目录结构。这部分在编码时不需要参考别人的已有代码,只需要对照第7章的内容一点一点地自己编码即可,这样更利于我们快速解决资源数据遍历与提取问题。另外,在做这一步的时候还要注意,并不是所有资源都是用ID来索引的,我们需要兼顾用字符串(资源名)来索引资源的情况。 最后,在索引到关键资源后,要对其进行及时的备份,并将原数据删除,因为这部分数据我们以后永远都不会再用到了。删除后压缩有利于减小整个加壳后文件的体积。 除了这些以外,添加区段也是我们需要着重关注的。添加区段的操作还是比较简单的,只要我们不要搞混各种数值的计算,或在修改时不漏掉例如PE头中的SizeOfImage(映像大小)等关键信息就可以了。

发表回复

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则


快速回复 返回顶部 返回列表