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 //写跳转
}
复制代码

 

相关文章
|
5天前
|
存储 程序员
【汇编】“转移”综述、操作符offset、jmp指令
【汇编】“转移”综述、操作符offset、jmp指令
123 1
|
5天前
汇编指令学习(AND,OR,XOR,NOT)
汇编指令学习(AND,OR,XOR,NOT)
45 0
|
5天前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
159 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
9月前
2 算术运算指令【微机原理】
2 算术运算指令【微机原理】
38 0
|
9月前
3 位操作指令【微机原理】
3 位操作指令【微机原理】
24 0
|
9月前
|
存储 缓存
当执行汇编指令MOV [0001H] 01H时,计算机都做了什么?
今天和几位单位大佬聊天时,讨论到一个非常有趣的问题-当程序执行MOV [0001H], 01H计算机实际上都做了哪些工作?乍一看这个问题平平无奇,CPU只是把立即数01H放在了地址为0001的内存里,但仔细想想这个问题远没有那么简单,由于现代计算机体系中CPU速度比内存要快2到3个个数量级,因此从CPU执行MOV指令,到实际把01H写入内存之间,还有非常漫长而复杂的过程。
|
存储 编译器
Win32汇编:算数运算指令总结
汇编中常用的运算符,加减乘除等,另外包括了移位运算等,移位又分为,算数移位,逻辑移位,循环移位,双精度移位等。
117 0
|
Ruby
汇编实验2 寻址方式练习
实验目的: 1.理解存储器分段及寻址方式的意义 2.熟练掌握立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址等几种寻址方式。 3.复习巩固DEBUG中的R、D、E命令。 4.掌握用A命令编制程序,U命令进行反汇编,用G、T命令执行程序。
224 0
汇编实验2 寻址方式练习
实验1 对指令操作码进行霍夫曼编码
了解和掌握指令编码的基本要求和基本原理
实验1 对指令操作码进行霍夫曼编码