2013年3月3日 星期日

[Note] - SSDT Hook 筆記 (三)

有在玩對抗HackShield_Driver的朋友一定知道:
HackShield是對nt!_SEH_prolog進行Hook(Call Hook)
來繞到自己函數進行調用對象審查(非白名單就 Return False)

今天就來公布其中一種最簡單的取得nt!_SEH_prolog的方法吧
(本來不想公布的,可是發現已經有人發出來了)

我們以NtProtectVirtualMemory來作範例(Windows7 x86 環境下)

Original:
84490403 6A 38 push   38
84490405 68 485A2A84 push   842A5A48

8449040A E8 99B7E3FF call   842CBBA8  ->  Original
8449040F FF75 14 push   dword ptr [ebp+14]
84490412 E8 CAE9E3FF call   842CEDE1
84490417 83F8 FF cmp    eax, FFFFFFFF
8449041A 75 0A jne    84490426
8449041C B8 450000C0 mov    eax, 0C0000045

...

After HS Hook:
84490403 6A 38 push   38
84490405 68 485A2A84 push   842A5A48

8449040A E8 09E28702 call   86D0E618  -> After HS Hook
8449040F FF75 14 push   dword ptr [ebp+14]
84490412 E8 CAE9E3FF call   842CEDE1
84490417 83F8 FF cmp    eax, FFFFFFFF
8449041A 75 0A jne    84490426
8449041C B8 450000C0 mov    eax, 0C0000045

...

Follow into 86D0E618:
86D0E618 E9 63BE302A jmp    B101A480 -> HS Thread
86D0E61D 90 nop
86D0E61E 90 nop
86D0E61F 90 nop
86D0E620 E9 83D55BFD jmp    842CBBA8 -> Original
86D0E625 90 nop
86D0E626 90 nop
86D0E627 90 nop

...

看到了嗎?! 


沒有留言:

張貼留言