laser314 发表于 2013-7-15 15:01:06

niub

wh0721 发表于 2013-7-22 11:24:35

谢谢分享

wykyang123 发表于 2013-7-23 15:14:40

好东西瞅瞅~~~

bubuwo 发表于 2013-7-23 16:48:33

和lz学习学习,win64 啊 win64

zhuxinlang 发表于 2013-8-4 09:53:02

学习一下

tony703333 发表于 2013-8-6 21:09:49

最近正在研究SSDT HOOK參考一下感謝

vip235689 发表于 2013-8-21 14:42:18

学习一下

garasmc 发表于 2013-8-22 20:08:58

学习一下,多谢楼主

vincentpra 发表于 2013-9-5 23:29:48

看看

xm2498262 发表于 2013-9-14 17:30:51

学习学习~谢谢分享

looyu 发表于 2013-9-15 13:02:43

顶一下

idt9 发表于 2013-9-26 10:00:59

学习。最近可能要折腾这个。不用知道和32位差别大不大

evanpw 发表于 2013-10-12 21:42:11

在WIN64上实现SSDT HOOK

bennywing 发表于 2013-10-15 13:14:41

看看有帮助吗?

w330820350 发表于 2013-10-23 10:20:19

学习下64下的hook

ramonliu 发表于 2013-10-28 00:04:26

本帖最后由 ramonliu 于 2013-10-30 12:41 编辑

不知道這是 Ring0 還是 Ring3 上來對 SSDT 處理,
回覆一下, 看看內容... {:soso_e121:}


嗯... include <ntddk.h> Ring0 的 {:soso_e149:}


疑, 我在網上扒到的鬼佬, 特徵碼 14個 BYTE {:soso_e122:}
char KiSystemServiceStart_pattern = "\x8B\xF8\xC1\xEF\x07\x83\xE7\x20\x25\xFF\x0F\x00\x00";
不過我用 WinDbg 找了一下位置...
kd> db nt!KiSystemServiceStart
fffff800`03ccfcde48 89 a3 d8 01 00 00 8b-f8 c1 ef 07 83 e7 20 25

唔... 不一樣... {:soso_e134:}


後來發現, nt!xxx 的API, 跟 nt!KeServiceDescriptorTable 的位置是固定相對, 然而 nt!KeServiceDescriptorTable 的位置
卻不一定每次相同, 所以找 nt!KeServiceDescriptorTable 的方式, 可以這麼寫:ULONG_PTR GetKeServiceDescriptorTable64()
{
      //Pattern
      ULONG kiServiceTable_patten = {
                0x04134b00, 0x02f53600, 0xfff6f000, 0x02e80205,
                0x031c3b06, 0x0312ba05, 0x02bacc01, 0x02b49200
      };
      /*
      kd> dd nt!KeServiceDescriptorTable
      fffff800`03f1594003cde800 fffff800 00000000 00000000
      fffff800`03f1595000000191 00000000 03cdf48c fffff800
      */
      
      //Scan boundaries
      ULONG_PTR CodeScanStart = (ULONG_PTR)KdDebuggerNotPresent;
      /*
      kd> dd nt!KdDebuggerNotPresent
      fffff800`03edf39100000000 00000000 bb000000 00db1dbb
      fffff800`03edf3a100000000 14000000 00000000 00000000
      */

      // offset: (fffff800`03f15940-fffff800`03edf391=0x365AF)
      PULONG64 ptrSDT = (PULONG64) (CodeScanStart + 0x365AF);
      ULONG_PTR ptrST = (ULONG_PTR) *ptrSDT;

      if (!memcmp((char*)ptrST, (char*)&kiServiceTable_patten, sizeof(ULONG)*8))
      {
                return (ULONG_PTR)ptrSDT;
      }

      return 0;
}不知道換了 VISTA/8/8.1 X64, 相對位置是否有變化沒? {:soso_e132:}

哈哈, 這二天玩內核, VBOX 被我弄死好多次... {:soso_e117:}
不過也因為如此, 才知道, 位置不是固定的, 這次的偏差值在 0x36C8F
看來還是得用區間找尋法了... {:soso_e135:}

整理一下研究結果:
鬼佬的CODE, 主要是要找出 nt!KiSystemServiceStart 的位置, 再由它裡面的匯編 (0x4c8d)
        fffff800`03c80ff2 4c8d1547782300lea   r10,
        fffff800`03c80ff9 4c8d1d80782300lea   r11,
算出 nt!KeServiceDescriptorTable 的位置, 而尋找位置, 搜尋範圍,
&_strnicmp ~ &KdDebuggerNotPresent, 然而不知道是不是 VS2012的問題,
_strnicmp 的位置, 不是 nt!strnicmp 或 nt!_ascii_strnicmp, 而是 (your driver)!strnicmp
也因為如此會造成讀取錯過而重開機... 我重新找了2個點, 對於目前來說是正確...
如果有人用了, 失效了, 請跟我說喲~ {:soso_e113:}
        ULONGLONG ptrStart = (ULONGLONG)KeSynchronizeExecution;
        ULONGLONG ptrEnd = (ULONGLONG)KeBugCheck;

babyice3 发表于 2013-10-28 19:33:06

给力新东西?

Flhawker 发表于 2013-11-8 11:40:03

不是不能hook他么?

lizhuowu 发表于 2013-11-16 09:42:36

这个必须看看的~~~~

悠悠小楠 发表于 2013-11-29 13:41:37

谢谢分享哈哈哈

大师兄 发表于 2013-12-21 11:48:20

谢谢老大!!!!!!!

w3297425 发表于 2014-1-4 10:10:07

多谢楼主分享,研究了很久

thegfw 发表于 2014-1-17 18:00:41

来看看

wondayer 发表于 2014-2-10 20:43:50

学习下。谢谢分享

heitaizi 发表于 2014-2-23 13:53:34

向大神学习.....

catface0511 发表于 2014-2-25 14:43:33

学习下 谢谢

Yecate 发表于 2014-4-12 11:32:38

正在学习驱动啊

850390626 发表于 2014-4-12 20:52:20

学习一下

860000023 发表于 2014-4-16 14:41:17

学习中,这个只能先看下,目前功力还 不够。

860000023 发表于 2014-4-16 14:41:20

学习中,这个只能先看下,目前功力还 不够。

ugvjewxf 发表于 2014-5-4 16:21:59

论坛好像好久没更新了

dengwenming 发表于 2014-5-6 17:14:56

很给力!
页: 1 2 [3] 4 5
查看完整版本: [原创开源]在WIN64上实现SSDT HOOK