欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

PE病毒学习(四)重定位的常见谬误和正确写法

PE病毒学习(四)重定位的常见谬误和正确写法

1.为何需要重定位?
病毒的生存空间就是宿主程序,而因为宿主程序的不同。所以病毒每次插入到宿主程序中的位置也不同。那么病毒需要用到的变量的位置就无法确定。所以这就是病毒首先要重定位的原因。在我们编写程序的时候,所用到的变量的位置都是相对与程序某一个位置的偏移,正常的程序加载的地址是唯一的,所以它们不需要重定位。而病毒的加载是随机的所以就有了重定位的过程。虽然加载的位置不一定,但是变量到某一个位置的偏移却是固定的。所以重定位的基本原理就是找到这个特殊的位置。具体的方法有很多种。这里说几种常见的。
前面介绍的“前置病毒”根本不需要重定位的,因为病毒写在病毒文件最前面,所以它的相对偏移和绝对偏移是相等的。
然而,从本章开始,我们要为名为“追加病毒”的病毒,做技术积累。因为该病毒将病毒体追加到病毒文件尾,它的相对偏移和绝对偏移显然是不相等的。
2.常见的重定位错误写法
call Entry
Entry:
pop ebp
sub ebp,offset Entry
mov ImagePosition,ebp
   其实这是一些关于计算机病毒教科书的故意错写的方法,,然而相当多的人不亲自动手实践,人云亦云,造成迄今为止大量的错误代码的出现,和病毒编写入门困难。
3.重定位正确写法和变体
start0:
...
start:
call Entry
...
Entry:
pop eax ;也可以用MOV EXX,[ESP]代替pop eax取出栈顶的内容
sub eax,5 ;减5是定位start的位置,如果定位start0的位置可写为sub eax,offset start- offset start0

本文来自CSDN博客,转载请标明http://blog.csdn.net/yangbostar/archive/2010/10/07/5925648.aspx

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功