web服务器软件下载-怎样改无线路由器密码

2023年4月2日发(作者:pci device驱动)
感染PE文件的几种讨论
DBinary
PE文件在这里你可以简单而不怎么准确地理解为
windows上的DLL,EXE,COM…后缀的那些可执行文件,即
使没有黑框眼镜的加成,如何感染PE文件,对于混迹在Bin
或者是逆向分析界的猴子们也是身经百战见得多了。虽然本
人并不是二进制安全方面的老司机,不过没见过猪跑,总也
吃过猪肉,所以下面的几个章节中,我将讨论下感染PE文
件的几种姿势,当然,本文行文的最终目的并不是教会你如
何制作病毒程序来感染其他的文件,而是作为一个科普向的
讨论,告诉相关的一些套路。如果你对这方面非常感兴趣,
你可能需要更深入的了解PE格式,《WindowsPE权威指南》,
《加密与解密》都是干货满满的好书。当然我们也可以不做
的那么复杂,实际上感染一个PE文件有非常多简单的手法,
那么其它话不多说,就让我们实际开始吧。
一.囫囵吞枣
在06年那个杀毒软件单纯到还能被任务管理器干掉的年
代,熊猫烧香也算是天朝知名了,但在这个章节我们并不讨
论熊猫烧香的危害性与功能性,而是以熊猫烧香做例子来说
一个简单而且通用性非常高的一种PE文件感染手法。
这种手法非常非常的简单,打个比方就是熊猫烧香病毒想
要感染一个文件,首先是把这个文件整个“吃下去”,然后
替换这个文件,这样在你下次想要执行这个文件的时候,实
际上执行的是个熊猫烧香的病毒,然后熊猫烧香再把源程序
给吐出来再执行源程序。
用图来表示大概是这样的
1.源程序
2.熊猫烧香
3.感染后的源文件
实际上最终感染后的文件就是源程序和熊猫烧香简单的
结合体,“吃下”源程序,可以是直接把这个源程序附加到
熊猫烧香的文件尾部或者是作为资源加到熊猫烧香中。当然
这种不加修饰不加篇幅的暴力感染,因为PE头资源节指向
的仍然是熊猫烧香病毒的资源节,最终感染后的文件图标仍
然是熊猫烧香的,所以也就是为什么被感染文件图标会变成
一只熊猫的原因之一。
那么最终感染方式的优劣如何?
优点:具有非常高的通用性,不管源程序怎么变花样都能
感染,而且释放出来后不会改变源程序本身,避免了很多直
接修改容易导致的问题,而且实现非常简单。即使是对PE
格式没任何研究的新手也能够实现
缺点:首先感染后图标就告诉别人这个文件被感染啦,有
本事你再拷贝到另一台电脑上运行,还有假如这个文件是带
参数执行的,没处理好也会挂掉,最后假如你眼尖的话,可
以看到运行这个程序后那个目录下又出现了一个奇怪的文
件。老手马上会意识到自己电脑中招了。
因此,该方案的评分如下:
兼容性:★★★★
隐蔽性:★
难度:★
二.见缝插针
不管是以前还是现在,如何在PE文件中插入自己写的code
一直是老司机津津乐道乐于讨论的问题,这个技术在很久以
前就已经存在了,但是即使到了今天,该手法仍然被用在了
各种方面,而且随着新技术的发展,也不断的有一些新的问
题,可以说,这个方法是一个古老而不过时仍然在不断被讨
论的手法。
我们这里只说说这种方法一些最基本的原理
首先一个PE文件它实际上被分为了非常多的节
(sections),为了更方便说明,我们使用LordPe来做一个
演示,在这里,我们使用LordPe来随便打开一个EXE文件,
然后点击sections
可以看到,它给我们列出了这个PE文件所包含的所有的节,
其中,.text节一般包含了这个程序的代码,.
可能是一些导入导出、资源这类的数据,.data可能是全局
变量,常量之类的玩意。
那个VSize表示的就是这个资源节被映射到内存时的大
小,RSize则是文件中的数据大小
我们以.text节为例,那么它在文件中类似于这个样子
那么我们需要做的,就是把我们想加的代码添加到那个多
出来的空白数据中,然后修改EntryPoint(程序入口地址)
也就是OEP到我们的代码中,当然,最后我们插入的代码一
般也会跳转回原始OEP,那么每次执行这个程序时,都会先
把我们的代码跑一遍然后再跳转回原始的程序运行。
现在原理说完了,这个方案的可行性如何呢?
优点:首先这个方案的优点是非常明显的,它能够神不知
鬼不觉的把代码插入到原始程序中,然后悄无声息地运行,
除非你插入的代码实在在屏幕上表现的太明目张胆,或者这
个程序本身带有自检程序,否者即使是资深老司机也不能通
过直接运行程序或者简单看看Pe结构看出什么猫腻(在
Header中有个CheckCode这个即使是错的也不影响运行,何
况没谁闲的蛋疼验证checkcode,更何况感染时这个也能改),
再者它不会让被感染文件变成熊猫,即使文件被感染了,即
使是杀毒软件很难判断这个是不是被感染的PE文件(当然
现在情况有所改善,一些杀软会通过编译器特征查看OEP所
指向代码是否被修改,因为一些编译器原始OEP指向代码是
一些不变的初始化代码,当然,误报率也上升了)
缺点:如果要说缺点,这个方案的缺点与对应的解决方案
就算是一本书也讲不完,有点像这样感染道理都懂但并没有
什么卵用的感觉,首先,插入的code一般需要使用汇编直
接编写然后将编译后的bin剥离出来,当然,通用性是个大
问题,一般x86,x64的你得分别写一遍当然也有别的,另
外光懂汇编还不行,为了保证兼容性你还需要保证跳转需要
相对地址而不是绝对地址特别是aslr引入后,否者也会挂,
而且并不是所有的程序都有足够的空间让你插入code,所以
这还需要一点点小运气,最后假如这个程序是具有数字签名
的程序,这样修改后这些自然也不能被保留了,当然存在的
问题还很多,就不一一列举了。
兼容性:★★
隐蔽性:★★★★★
难度:★★★★★
三.添砖加瓦
这个办法实际上可以改叫见“缝插针升级版”或者是“见
缝插针ver2.0”,它解决了见缝插针这个缝不够大的问题同
时也不可避免地引入了其它新的坑爹的问题
这个方法的关键就是,如何在PE格式中插入一个新的
Section,当然,首先我们需要做的是,PE文件中是哪里定
义Section的数目和数据的,为了说明这点,我不得不上点
代码
首先,PE文件的头部肯定是PeHeader,它实际上是一个
IMAGE_DOS_HEADER,通过它我们可以定位到
IMAGE_NT_HEADER,在IMAGE_NT_HEADER中的
IMAGE_FILE_HEADER结构中,我们可以找到
NumberOfSections,它定义了节的数量,所以加入你想新加
入一个节,在PeHeader你需要把这个数量+1,当然这样还
不够,你需要新建一个IMAGE_SECTION_HEADER来定义你新加
节的大小(vsize(映射到内存大小)rsize(文件中大小)),
地址(vAddress(映射到内存的建议地址)rAddress(文
件实际偏移))节的属性(可读可写可执行…)重定向…,
不一一列举,最后,你还需要像见缝插针一样找到一个缝将
新的SectionHeader插入到SectionsTable(由多个
SectionHeader组成)中去,最后,修改ImageSize和
checkCode。你才算把一个Section给成功加了进去
原始程序类似这样
假如我们想加入一个section4实际上会变这样
最后你就可以在section4中填写你想新加入的代码而不用担
心受到大小的限制了。
最后,给这个方案打个分吧
优点:继承了见缝插针的优点,同时对大小限制变宽了,对
有没有空余空间插入代码的运气度也提升了
缺点:同样继承了见缝插针大部分坑爹的缺点,而且新的节
很容易让老司机一眼看出来这个PE文件八成时被动过手脚
了,当然会这样做的老司机并不多。
兼容性:★★★
隐蔽性:★★★★★
难度:★★★★★
四.人面兽心
首先不管是熊猫烧香这种暴力的囫囵吞枣还是伪君子类
的人面兽心,都是先将源程序吞下去,需要的时候还是吐出
来,而有所不同的是,在把该源程序吞下去后,会修改自身
的资源节指向源程序的资源节,这样一来,不仅仅图标看上
去仍然是源程序的,并且右键查看属性也是源程序的属性
同时在需要运行源程序的时候,再将源程序释放出来调用执
行。
优点:在保证了兼容性的前提下,伪装的更加彻底
缺点:修改资源目录并不容易,眼尖的老司机仍然能够发
现,杀毒软件也可能发现点猫腻,建议加密源程序的PE
header,待解密时再释放出来。
兼容性:★★★★★
隐蔽性:★★★★
难度:★★★
小结
最后,放上自写的一个PE类,包含实现上述功能的基本代
码框架,自行玩耍
更多推荐
lordpe
发布评论