JMP指令转换公式推导

看完郁金香第020课总结:

同样的一句指令 JMP 88881234在不同位置有以下现象

 

找规律:

88881234 - 010073bb = 87879E79

88881234 – 010073c0 = 87879E74

88881234 – 010073c5 = 87879E6F

因为机器码 如E9 749e8787 是按字节排列的所以87879E74显示出来是749e8787

 

所以可得以下公式

JMP的地址(88881234) – 代码地址(010073bb) – 5(字节) = 机器码跳转地址(E9 87879e74)

 

typedef struct _JMPCODE

{

 BYTE E9;

 ULONGJMPADDR;//88881234=B

}JMPCODE,*PJMPCODE

 

 

应用:

跳过ssdt_hook

例如:NtOpenProcess 被hook 真正的地址为 0xAAAAAAAA(old) ,hook之后的地址为0xBBBBBBBB(cur)。

那么我们可以修改0xBBBBBBBB里的内容,内容为一条JMP指令。以达到绕过ssdt_hook的目的。

 

复制代码
//jmp结构
typedef struct _JMPCODE
{
 BYTE E9;
 ULONGJMPADDR;//88881234=B
}JMPCODE,*PJMPCODE

//定义jmp结构
JMPCODE JCode;
JCode.E9=0xE9;  //jmp机器码
JCode.JMPADDR=cur-old-5;//计算JMP 后面的数值
_asm
{        
mov ebx,cur  //取当前地址
     lea  ecx,Jcode //取结构地址
     mov ax,byte ptr [ecx] 
     Mov byte ptr[ebx],ax //写jmp
     mov eax,[ecx+1] //移动指针
     mov [ebx+1],eax //写跳转
}
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值