Win32下的入口模糊技术

                                                 
          +---- Win32下的入口模糊技术 ---+   
          ?        by Benny / 29A       ?    
          +---------- 译:fqh ----------+   
                                                  
**译者的话**
  因格式问题,请用“写字板”打开本文阅读
  因为本文给您及他人造成不良后果,本人不负有责任
  以下为译文正文:


 +--------------+
 ?1.   声明     ?
 +--------------+

 下面的文档仅仅出于教学目的。作者不对任何人滥用本文档中的技术负有责任。


 +-------------+
 ?2.   前言    ?
 +-------------+

 各位好,

 这篇文章是我在成功完成最近一个病毒Win32.Vulcano(特别要感谢ShadSeek的测试工作:D)后决
 定写的,因为该病毒用到了EPO例程。Darkman询问我能否写下它(EPO技术),我回复他说,这是
 个好主意。嗯,也许我不是写这篇文章的合适人选,现在有很多人而不仅是我(JQwerty, GriYo,
 Billy,Vecna, ...)的代码中运用了EPO技术。但是我仍希望这篇文章对初学者有所帮助,虽然它
 很短而且全是理论论述的。


 +-----------------+
 ?3.     介绍      ?
 +-----------------+

 好,代码从哪里进入?这是首要的问题。入口模糊技术(Entrypoint Obscuring techniques),
 也简称EPOs, 是较新的能非常有效地让你的病毒不被现有的启发式扫描器发现的技术。它主要的思想
 是:不修改入口,当被感染的程序运行时不马上激活病毒,插入"JMP VIRUS" 指令到程序的内部。
 例如,病毒不是在程序将运行时而是在程序将调用系统接口函数ExitProcess被激活的。为什么我们
 这样做?很简单。启发式扫描器没有分析整个Win32程序(简而言之,现有扫描器不可能做到的),
 如果把病毒代码隐藏在程序内部,启发式扫描器就找不到病毒代码,这样病毒就不会被发现。依我看
 来,每一个现代的病毒都应包含EPO例程。如果实现EPOs的方式能够随机化,病毒就不可能被清除。
 考虑考虑它。


 +-------------------------------------+
 ?4.      实现EPO的最简单方式           ?
 +-------------------------------------+

  
 如果没记错的话,第一个实现了EPO的病毒是Jacky的Win32.Cabanas(你好,Jacky :D)。病毒通过
 在最后一个节增加代码的方式感染程序。病毒没有触及PE文件的入口,但它用"JMP VIRUS" 指令修改
 代码节中前五个字节(previous bytes were saved before they
 were overwritten and l8r restored).反病毒工作者必须改造他们的引擎来做到不仅检查入口
 还要检查/追踪代码。我相信对他们而言是很头痛的。

 实现这种类型的EPO是非常容易的,我想这次再也看不到它了。所有优秀的反病毒公司都做出了跟踪
 代码的启发式扫描器,还有,jump as the first instruction对任何人来说都不是难题,对启发式扫
 描器来说也不是。

 然而,这个思想引发了很多称为EPO的技术。我再次向JQwerty致意。


 +------------------------------+
 ?5.    EPO代码的另一种方式      ?
 +------------------------------+

 
 好,这种方式与上面描述的第一种方式类似。只是我们在构造简易的jump或call指令的地方,将
 创建完整的polymorphic descryptor。这个思想与在DOS下是相同的。OneHalf, DOS.CommanderBomber,
 WM/Win32.Cocaine or Win32.Legacy for example. 病毒将通过polymorphic decryptor
 保存和重写它。高级的polys能够创建很多层,jumps和calls所有的代码节,但它能被发觉。不像前
 面的情况那么容易,但对新的扫描器来说检测到它不是很难的。如果你尝试编写它,你会发现一些执
 行的问题。例如,在重写前你得保存整个代码,如果你沿着代码块随机放置decryptor的话。我想它
 不是一种好的解决方法,下面有更好的实现EPO的方法。

 +-------------------------+
 ?6.    更先进的EPO技术     ?
 +-------------------------+

 更新的病毒带来了更新的思想。其中一种最好的EPO技术似乎是code patching.设想一下,病毒将
 在某些API被调用后激活(Win32.CTX Phage patches随机的API,所以启发式扫描器检测到它是非
 常难的,如果不是不可能的话)。它有很多优点,但是也遇到很多执行问题。优势给抵消了。

 病毒可能,但不必就会被触发-很多程序包含了一些API的很多调用,这样我们patch了的API在所有情况
 被调用的机率只有1%-这是优点,但也有问题。病毒能感染程序并patch API调用,但程序内部有bug
 的地方,API就不会被调用。同样,执行时也出现问题,所以你也不能仅patch输出地址表。在初始化
 前,程序装载器会重写地址表。这样,你patch的地址会被抹去。解决方法是-探测代码和搜索API调用
 (JMP DWORD PTR [XXXXXXXXh] - Borland API 调用习惯,CALL DWORD PTR [XXXXXXXXh] -
 Microsoft API 调用习惯)。在GriYor的Win32.CTX Phage或是我的Win32.Vulcano病毒中,它看起
 来是完美的。

 病毒也可以重建整个程序,这样每个API调用将导致病毒的初始化。这是个好主意(),但几乎100%
 的Win32程序在代码的开头包含API调用,所以启发式的扫描器能很容易地找到那病毒。很多新的病毒
 是patch ExitProcess API,这样,病毒是在最后的代码而不是在起初就被初始化,
 但是,你不必仅是patch API调用,你可以只是patch随机的code(还得保存原先的字节).它同样具
 有很多的优点和问题。你不必搜索输出表。问题是,你不能只是在代码里写jump指令-你的代码必须
 在真实的指令中配合正确。它能通过重写简单的call和jmp指令来得到解决。

 解决问题有很多方法...


 +------------+
 ?8.  结束语  ?
 +------------+

 “中间插入感染”对抗反病毒清除器,EPO对抗反病毒扫描器。它们不能很好地结合到一起吗?
 我希望这篇文章能激发您的一些思想,并且您能向世界展现出一些新的东西来。

 向GriYo, JQwerty, Vecna and Billy致谢,因为他们在各自代码里向世界展示了第一个EPOT
 程序。请对我在这里描述所有东西进行思考,并让我了解你所知道的所有东西:)。祝你在阅读
 29A#4时感到快乐!

                                                    +---------------------+
                                                    ? Benny / 29A,  1999  ?
                                                    +---------------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值