c语言 计算机病毒,关于计算机病毒的定位问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

病毒的生存空间就是宿主程序,而因为宿主程序的不同。所以病毒每次插入到宿主程序中的位置也不同。

那么病毒需要用到的变量的位置就无法确定。所以这就是病毒首先要重定位的原因。在我们编写程序的时候,

所用到的变量的位置都是相对与程序某一个位置的偏移,正常的程序加载的地址是唯一的,所以它们不需要

重定位。而病毒的加载是随机的所以就有了重定位的过程。虽然加载的位置不一定,但是变量到某一个位置

的偏移却是固定的。所以重定位的基本原理就是找到这个特殊的位置。具体的方法有很多种。这里说几种常见的。

1。call vstart

vstart: pop ebx

sub ebx,offset vstart

这种是最简单的。首先得到vstart在内存中的实际地址。offset vstart得到了vstart到这个特殊位置的偏

移,(下文用定位点代替)那么用vstart的在内存中的实际地址减去它到定位点的偏移就可以等到定位点在内

存中的地址了。在确定其它的变量的时候就可以用这个定位点加上变量的偏移了(即 add ebx,offset xxx).

2。vstart:

call getvs

getvs:

call getvs_01

getvs_01:pop ebx

sub ebx,offset getvs_01 - offset vstart

这种方法在原理上是一样的,只是把定位点具体成为vstart了,上面的代码就为是为了找到vstart在内存中的具

体位置。首先得到getvs_01在内存中的位置,然后减去get_01到vstart的偏移,这样就得到了vstart在内存中

的位置了。在确定其它的变量的时候只要用EBX加上这个这个变量到vstart的偏移就可以了

(即 add ebx,offset xxx -offset vstart).

以上两中最为常用,再说个要注意的问题,比如:

call vstart

aa: mov eax,1

..

..

vastart: pop ebx

sub ebx,offset vstart

像这样的代码就不能起到重定位的作用,因为pop ebx得到是aa的地址,用aa的地址减去vstart到定位点的偏移

得到的是什么呢?谁知道啊,我是不知道"),想让上面的代码起到定位的作用只要改一下减去的偏移就可以了。

call vstart

aa:mov eax,1

..

..

vastart:pop ebx

sub ebx,offset aa

对了,这里是不用理会aa:mov eax,1下面的代码的(当然如果有POP或PUSH那就不行了)还要唠叨一下,其实重

定位就是要找到一个起点,其它的变量都要根据他来找到自己哦,所以不管你用什么方法只要找到了这个起点就可以

实现重定位了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值