JMP指令转换公式推导

简介: 看完郁金香第020课总结: 同样的一句指令 JMP 88881234在不同位置有以下现象   找规律: 88881234 - 010073bb = 87879E79 88881234 – 010073c0 = 87879E74 88881234 – 010073c5 = 87879E...

看完郁金香第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 //写跳转
}

 

相关文章
|
10月前
|
存储 程序员
【汇编】“转移”综述、操作符offset、jmp指令
【汇编】“转移”综述、操作符offset、jmp指令
457 1
|
10月前
|
安全 编译器
8086 汇编笔记(四):[BX] 和 loop 指令
8086 汇编笔记(四):[BX] 和 loop 指令
|
10月前
|
编译器 C++
C/C++中的逻辑运算与汇编指令的交互
C/C++中的逻辑运算与汇编指令的交互
63 0
|
10月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
877 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
10月前
汇编指令学习(AND,OR,XOR,NOT)
汇编指令学习(AND,OR,XOR,NOT)
140 0
|
10月前
汇编指令学习(寻址方式)
汇编指令学习(寻址方式)
74 0
|
算法 vr&ar 网络架构
汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】
汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】
118 0
2 算术运算指令【微机原理】
2 算术运算指令【微机原理】
74 0
|
算法 Python
如何将算法翻译成RTL(四)有符号数的加减法实现
如何将算法翻译成RTL(四)有符号数的加减法实现
239 0
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?
西门子S7-1200的移动指令包括移动和块移动指令、填充指令、交换指令。
西门子S7-1200移动指令编程实例,移动和块移动指令、填充指令、交换 指令的作用是什么?