病毒/壳中用到的代码重定位技术




当把壳加在软件上(或者病毒感染PE文件/补丁加在软件上)时,在壳代码上定义的变量和常量的地址都会无法访问,因为编译器给壳中变量A生成的地址是A,但是把壳段加在软件上时变量A的地址就不在是A了,为了继续能够寻址到壳的变量,需要对代码重新定位


下面是一个壳中用到的重定位代码:

DepackerCode:
	pushad
	call CallMe
  CallMe:
	pop ebp
	sub ebp,offset CallMe

一个pushad,一个CALL,学过脱壳的都很熟悉吧,不过这不是重点。。

如果这段代码是独立编译的话,看起来好像很奇怪,因为offset CallMe本来就等于ebp的值了啊,相减的话不等于0吗,等于0有什么用?(解释一下pop ebp获取到call下一行的代码)

但是这段程序不是独立编译的,而是放到其他软件上面运行,所以offset CallMe是本来的地址,而ebp中获取到的是现在的地址

看看OD反汇编代码:

00440060 Z>  60               pushad
00440061     E8 00000000      call ZR.00440066
00440066     5D               pop ebp
00440067     81ED F31D4000    sub ebp,ZR.00401DF3

两个相减得到壳加在软件身上产生的偏差,得到这个偏差之后,如果以后要访问其他的变量就可以这么做(401E3B是一个编译器生成的常量的地址)

lea edi,[ebp+401E3B]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值