代码重定位技术

代码重定位技术一般用于远程线程注入和病毒感染技术当中,当注入和感染的代码使用了全局变量,全局变局的地址就需要进行重定位,否则代码无法正常执行。这是因为,代码注入其他进程空间以后,注入的位置跟原来程序中的位置不一样,而全局变量在汇编层其实就是一个偏移,因此无法再通过原来的偏移找到全局变量了。
既然如此,我们只要找到注入位置的差值,我们就能一直准确定位到我们想要的全局变量了。
所以写入到目标进程的代码一开始就会计算出注入位置的差值,下面的代码就是用来计算差值,然后通过差值就可以找全局变量,一般来说不直接使用全局变量或者标号的偏移量。
下面是重定位的经典代码

	dwvar  dd    ?  ;全局变量
	call @F  
@@: 
	pop ebx 
	sub ebx,offset @B
	mov  eax,[ebx + offset dwvar] 

首先调用call @F,@F是指后面最近的@@标号,我们知道call指令其实相当于push eip,jmp xxx,所以下一句pop ebx会使ebx得到eip的值,这个值其实就是代码注入位置。
然后再看sub ebx,offset @B,@B是指前面最近的@@标号,这个@B在注入之前和注入之后都是同一个值,它永远不会变。
offset @B在注入之前的程序中就已经写死,是指@@的偏移量,而ebx此时也是指@@的偏移量,它们不同的是:前者永远不会变,而后者会因为进程的不同而变化。所以执行过sub ebx,offset @B以后ebx中保存的就是注入位置的差值。
既然找到差值了,就可以使用[ebx+offset xxx]的方式使用全局变量了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值