Win7 CreateRemoteThread 另類使用方法

逗比汪星人發表於2011-05-31

同樣的程式碼,在XP下面隨便你怎麼整,WIN7的話是相當糾結的,具體哪些錯誤就不解釋了 ~~

 

gg點了二十多頁,在韓國某大牛的部落格上總算找到一點思路(雖然看不懂韓文,但程式碼還算勉強看得懂吧)

 

原來是要用動態呼叫ntdll.dll >> NtCreateRemoteThreadEx ,於是over~~

 

說明:

1、InjectDll.exe   是注入DLL的EXE

2、dummy.dll       是一個普通DLL,載入後彈出MessageBox

 

下面是一個XP中遠端執行緒注入DLL的程式碼,在WIN7 + OD除錯的例子:

 

 

看看錯誤資訊:

 

 

杯具了,接著看! 重新執行OD除錯,bp CreateRemoteThread

 

 

看看CreateRemoteThread 中的幾個引數:

 

 

上圖重要標記的幾個引數:

(1) svchost.exe (PID: 3184) 控制程式碼

(2) kernel32.dll ! LoadLibarayA

(3) 在svchost中為C://Work//dummy.dll字串所分配的首地址

 

進入CreateRemoteThread

 

 

我們發現,實際上是呼叫kernelbase >> CreateRemoteThreadEx 函式。

 

(GG了這個DLL,原來是它是繼VISTA/WIN7之後額外的DLL,負責協助Kernel32.dll的呼叫!)

 

那我們看看這個函式呼叫棧中的引數吧:

 

 

 

發現與kernel32.dll >> CreateRemoteThread 引數一模一樣!

 

OK ! 我們再繼續跟進kernelbase.dll >> CreateRemoteThreadEx

 

 

那我們看看這個函式呼叫棧中的引數吧:

 

 

OK,這算到底兒了,因為ntdll.dll >> ZwCreateThreadEx 已經執行到了核心程式碼,我們的OD沒辦法再除錯了!

 

於是請google sysenter吧!

 

特別說明,kernelbase.dll >> CreateRemoteThreadEx 是對 ntdll.dll >> ZwCreateThreadEx 的補充擴充套件!

 

那我們都得到這樣的結果 :

 

 

ntdll.dll >> ZwCreateThreadEx 是未公開的API,MSDN、GG也很難找到相關資料!

 

下面是看看這個結構體虛擬碼:

 

 

OK ,那剩下的我們只需要重寫CreateThreadEx 函式即可!

 

為了保證XP的相容,所以需要判斷一下OS版本,下面是完整的測試程式碼:

 

 

DLL就不貼了吧,有興趣的友友可以參考一下~~

 

<轉載請註明出處:   http://blog.csdn.net/wangningyu/archive/2011/05/31/6456607.aspx >

相關文章