代码重定位技术

int g_nTest;
__asm
{
                  call Dels
              Dels:
                  pop ebx
                  lea eax, g_nTest
                 sub eax, Dels
                 lea edx, [ebx + eax]
}

上面的这段代码是我们在编写病毒时用到的,目的是要计算出正确的全局变量g_nTest的地址,如果直接在病毒本体中写入一个全局变量,病毒感染目标后绝大多数情况是无法找到这个全局变量的,因为感染到目标程序以后的病毒起始位置改变了,通过上面几行简单的汇编代码,就可以做到动态寻址全局变量g_nTest。
原理是利用了全局变量跟病毒起始位置的差值是永远不会变的。

我们假设执行完pop ebx的值是0x801009,这个值是病毒起始位置,全局变量的值是0x401000,根据汇编代码接着会将g_nTest减去Dels,Dels是本体病毒起始位置,它是0x401009,差值是-0x09。
病毒起始位置加上差值就是重定位后的全局变量地址,也就是0x801009-0x9 = 0x801000。

还有一种方法如下:

int g_nTest;
__asm
{
                 call Dels
            Dels:
                 pop ebx
                 sub ebx, Dels
                 lea edx, [ebx + g_nTest]

}

它是先计算病毒起始位置的差值,再加上全局变量的值,最后算出重定位后的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值