首页
社区
课程
招聘
[讨论]我对病毒EPO技术的理解
发表于: 2010-10-29 14:00 10672

[讨论]我对病毒EPO技术的理解

2010-10-29 14:00
10672

DOS时代的病毒采用在可执行文件首部插入Jmp 跳到自己添加的恶意代码中。WIN32病毒同样在文件中添加代码,通常是通过插入新的节,然后直接修改PE文件的入口点。这样没有添加任何JMP语句就能执行植入到EXE文件中的代码了。杀毒软件的查杀方式很简单,发现PE文件的入口点不在代码段,就认为感染了病毒。所以这种方式已经存活不下去了。

这时引入了EPO技术。病毒仍然是在可执行文件中添加一个新的节。但是要执行该节的方式不是普通的直接修改入口点指向该节来执行。而是在可执行文件中搜索JMP或CALL调用,将JMP或CALL的目的地址改成恶意代码所在的地址。很多病毒都采用了这种方式。

最显而易见的查杀方式是发现某个可执行文件原本在执行代码段,中途却跳到其他段去执行。毕竟大多数可执行文件都是只执行代码段的。那为何说这种方式能躲避一部分杀软的查杀呢?

因为让杀软去搜索整个可执行文件的代码并判断目标地址是否是其他节的工作量太大。很多杀软都不会这么操作的。这样去感染也不会有明显的特征码。因为病毒对不同的可执行文件patch不同的函数。patch的位置各不相同。所以可以认为,病毒的入口被模糊化了。

鉴于此,我认为病毒EPO技术还是挺有用的。
不知道有没有其他能够执行植入的恶意代码的方法,欢迎讨论


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 1556
活跃值: (310)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
通过section去判断,误杀会很高
2010-10-29 15:22
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
你如何保证你patch的地方,程序就一定能执行到?
patch最前面?
反病毒软件不会扫描所有跳转,但是会可以扫描关键点。

所以你不想被杀就要尽量找偏门的call,那越偏门的就越可能导致程序根本就无法执行到那块。所以这是个博弈。。

那为何说这种方式能躲避一部分杀软的查杀呢?


杀软不能只靠这一条就杀了它。而且还有个问题,就是怎么监控?会不会很大的影响到性能?
2010-10-29 16:42
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
4
看到一个程序用EPO,在感染计算器时不会被查,但在感染画图程序时,被360和小红伞报了。我觉得可能原因是画图程序中patch的是第一个调用的地方。杀毒软件对patch的检查一个是ExitProcess()这种常用的应该会查,还有应该就是如果你patch的是一开始的调用。
至于可能patch的程序压根没执行到,这的确是个问题。个人想法是根据IAT,patch某个函数。对该程序所有调用到该函数的地方都做相应的patch。这样大多数情况下应该都可以被执行到的。为了避免多次执行,在patch的code中做相应处理应该就好了。
我现在还没有写过相应的代码,显然ExitProcess()这种patch应该是比较稳妥的。但不知道杀软查杀的情况。感谢pencil兄的讨论
2010-10-29 18:00
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
5
个人觉得在代码段中跳到其他段去执行,应该不大正常吧?误杀率我还不大清楚。。。
X门有试过么?
2010-10-29 18:03
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
哥们,你patch IAT这个会被PE loader覆盖掉的。

跨段执行,壳也会来回跳。还有重点是效率问题,如何实现这种监控又不大的影响性能。 是不是要对每一步执行都进行判断?
2010-10-29 19:18
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
7
我没说清楚。。。是先在IAT中找到某个函数的地址,然后在整个程序中搜索对该函数的调用,patch掉。。。不是直接修改IAT。。。。
杀软仅搜索常用的patch。。。和程序中最前面的函数调用。。。
我现在写代码试试。。。。
2010-10-29 19:34
0
雪    币: 11220
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
嘿嘿,貌似什么,viater不是用的这种方法,在刚开始设计个什么跳转表,好像是个伪指令引擎。搜索刚开始的系统API,然后跳到病毒代码。这种东西,只要逻辑顺清,绝杀绝对没问题。
2010-10-29 20:15
0
雪    币: 611
活跃值: (251)
能力值: ( LV12,RANK:390 )
在线值:
发帖
回帖
粉丝
9
这么强力?求样本,求源码。。。。
2010-10-29 20:19
0
雪    币: 585
活跃值: (578)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
10
没怎么研究病毒,大家继续讨论,,顺便学西
2010-12-27 17:19
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
11
你不patch常见的,你怎么保证你的proc能被执行到呢。
2010-12-27 18:32
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
其实要是想隐藏的好点,可以在代码段中找空息。
如果没有空隙可以把一部分正常代码移到新建的节中,自己的代码放在原来的代码段处。
虽然这种方法会遇到很多问题,但是通过程序实现是没有问题的。
2011-1-13 23:21
0
游客
登录 | 注册 方可回帖
返回
//