关于PE病毒编写的学习

来源:互联网 发布:天猫seo 编辑:程序博客网 时间:2024/05/16 12:06

首先声明,因为害怕被删帖,我肯定不会展示正确完整病毒代码,但是会介绍可行的学习方法。

 

网上有很多关于介绍PE病毒编写的帖子,但基本上都是分析源码FunLove和《计算机病毒分析与对抗》中PE病毒的代码翻版。事实上这两个代码是用于原理展示,前者根本通不过编译,后者编译后并不能正确运行,虽然有部分帖子对其做了修改,受到正统汇编教材代码的影响,导致其修改方法是错误的。

 

关于病毒编写充满了各种各样的迷信和谬论,因此在学习的过程中,我走了不少弯路,让我来一一说明:

 

误区1:PE病毒一定要用汇编来写,其生成文件小,效率高,病毒最好小于4KB

 

      实际上,从DOS时代的文件型病毒开始,就有相当多的著名文件型病毒使用C、Pascal编写,到了windows时代,PE病毒的编写成员又加入了VB、dephi等重要角色。用这些高级语言开发病毒的优势相当明显,开发快,升级快,调试方便,Bug少,有时能跨平台。

      如今病毒短小,再也不是汇编的优势,现在百G磁盘是常态,磁盘缺少几百MB不会引起用户的注意,大一点病毒文件反而增大了安全分析人员的分析难度。

      但是还是有相当多的病毒编写技巧是汇编所独有的,不过本人十分懒惰并且汇编优化功底欠佳,可是偷懒的方法我是有的,我先用VC的写出初始代码,设置为Release,然后用它自带的调试器反汇编,copy到Radasm上,再进行手工修改,这样用汇编写的代码就成了。

 

误区2:DOS病毒毫无参考价值,FunLove代码是最好的入门教材

 

      相当长的一段时间,我也秉持这种看法。然而我对PE病毒的顿悟,却完全来自DOS病毒的灵感,才写出我的第一个病毒代码。事实上,现在的PE病毒除了网络方面,各种技术的思想基本都是源自DOS病毒,只是技术上的另一种实现。

      DOS病毒也不是都有用,比如引导区病毒的扇区引导方面就没什么参考价值,但作为早期病毒,它的很多其他思想至今仍在应用。

 

误区3:win32汇编与16位汇编有很大不同,可以直接学习win32汇编,16位汇编没什么价值

 

      也许在其他地方,这是是正确的,虽然中断很少应用(不是不用,内核代码依然可用),但是像Radasm这样很好支持.if  .while  invoke 的高级宏汇编的编译,可我还是很少用它们,跳转、call、这两门功课不能回避。很多病毒独有的汇编技巧,是.if .while 所不能表达的

 

误区4:网上帖子PE代码的常见错误,建立(.data?)段或向(.code)段写入数据

 

      虽然建立(.data?)段也不是不可以,但是建立(.data?)后,重定位技术单靠简单(call delt  |delt: pop ebp)是不可能成功的,因为它不在.code里,还得建立单独的寻址表,感染时,还得将其写如.idata节里,重定位自然与.code里不一样,反正挺复杂,写多节感染PE病毒时可以试一试。

     .code是只读的,虽然可以改为可写,但是杀毒软件可是不会轻易放过它的。在.code嵌入常量是可以,变量还是用sub esp,xxx申请堆栈吧

 

误区5:用汇编写病毒应该使用Tasm,大牛们都用它们

 

      这个误解来自于DOS病毒的书籍,1989年,TASM早在1.0版本就有了对80386处理器指令的完全支持(MASM要到5.0版本才支持80386指令),Tasm4.0版是编写DOS程序使用比较广泛。它与Masm又比较大的差异,但Tasm5.0已经全面兼容Masm

      目前,Tasm已经停止更新,而Masm随Visual Studio不断更新。

      如果分要我推崇某个编译器,那么Nasm是个不错的选择,原因如下:

      1.免费

      2.使用Intel汇编格式

      3.各个平台都有这个软件,学Masm的人写跨平台程序的首选

另外有人说fasm很好,我从未接触过,所以没有发言权

 

http://blog.csdn.net/yangbostar/archive/2010/08/30/5851009.aspx