JMP指令转换公式推导
看完郁金香第020課總結(jié):
同樣的一句指令 JMP 88881234在不同位置有以下現(xiàn)象
?
找規(guī)律:
88881234 - 010073bb = 87879E79
88881234 – 010073c0 = 87879E74
88881234 – 010073c5 = 87879E6F
因?yàn)闄C(jī)器碼 如E9 749e8787 是按字節(jié)排列的所以87879E74顯示出來(lái)是749e8787
?
所以可得以下公式
JMP的地址(88881234) – 代碼地址(010073bb) – 5(字節(jié)) = 機(jī)器碼跳轉(zhuǎn)地址(E9 87879e74)
?
typedef struct _JMPCODE
{
?BYTE E9;
?ULONGJMPADDR;//88881234=B
}JMPCODE,*PJMPCODE
?
?
應(yīng)用:
跳過(guò)ssdt_hook
例如:NtOpenProcess 被hook 真正的地址為 0xAAAAAAAA(old) ,hook之后的地址為0xBBBBBBBB(cur)。
那么我們可以修改0xBBBBBBBB里的內(nèi)容,內(nèi)容為一條JMP指令。以達(dá)到繞過(guò)ssdt_hook的目的。
?
//jmp結(jié)構(gòu) typedef struct _JMPCODE {BYTE E9;ULONGJMPADDR;//88881234=B }JMPCODE,*PJMPCODE//定義jmp結(jié)構(gòu) JMPCODE JCode; JCode.E9=0xE9; //jmp機(jī)器碼 JCode.JMPADDR=cur-old-5;//計(jì)算JMP 后面的數(shù)值 _asm { mov ebx,cur //取當(dāng)前地址lea ecx,Jcode //取結(jié)構(gòu)地址mov ax,byte ptr [ecx] Mov byte ptr[ebx],ax //寫(xiě)jmpmov eax,[ecx+1] //移動(dòng)指針mov [ebx+1],eax //寫(xiě)跳轉(zhuǎn) }總結(jié)
以上是生活随笔為你收集整理的JMP指令转换公式推导的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VC6.0蕉HOOK_timeGetTi
- 下一篇: 反调试技术