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 //寫跳轉
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM