iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Security

我逆向你逆向我的逆向工程膩系列 第 18

Dx18 - Hook : 找回你的鍵盤

  • 分享至 

  • xImage
  •  

由於在上一篇你的鍵盤莫名其妙的被一個 DLL 程式偷走,雖然看過他的原始碼但還是有些不清楚。所以現在得來查查看他是甚麼偷走的。

一樣使用昨天的 MainHook.exex64dbg 來解析程式 :

進入 EP 後,首先利用搜字串來到主函式

https://ithelp.ithome.com.tw/upload/images/20221002/20135675EFbT4KKjhR.png

找到一個 DLL 載入失敗會顯示的字串,進去

https://ithelp.ithome.com.tw/upload/images/20221002/20135675vsjiw3ZJWD.png

向上看一下跟 C++ 中寫的差不多,應該就是主函式了。在起始點上建一個 EP

https://ithelp.ithome.com.tw/upload/images/20221002/20135675p0qedcdRKB.png

看到這邊有大部分的程序。

https://ithelp.ithome.com.tw/upload/images/20221002/20135675PXwk9v26a2.png

這邊看起來有點複雜,來解釋一下重要的指令 ( 都用 RVA ) :

10B4 : 把字串放到 rdx ( 64位元的 EDX )

10C3 : 透過 call GetProcAddress 拿到 HookStart 函數的位置 ( 在 RAX )

而 10C9 ~ 10DC 是在做差不多的事。

10DF : 呼叫 HookStart ( 位置在 10D3 傳給 RBX )

10E1 : 與下一行來顯示字串

10FD : 呼叫 HookStop ( 位置在 10DC 傳給 RSI )

那這樣就對主程式的結構清楚了,那來觀察 nodepad.exe 被注射 DLL 時發生了甚麼事。

在 檔案>附加 中選擇 nodepad.exe 的程序來開啟監看。這樣就可以監察運行中的程式。

https://ithelp.ithome.com.tw/upload/images/20221002/20135675weK33EdjbI.png

在偏好設定中把 DLL EP 設為預設中斷點,當掛好的 DLL 使用到時,就可以停在那裏。

https://ithelp.ithome.com.tw/upload/images/20221002/20135675q9re92gIUk.png

按下 F9 讓程式正常運行。

https://ithelp.ithome.com.tw/upload/images/20221002/20135675wqi477bdnQ.png

使用 HookMain.exe 開始注入,注意先不要在記事本上輸入按鍵

https://ithelp.ithome.com.tw/upload/images/20221002/20135675lvdeLhuMg6.png

那我們先來找找這份 DLL 會載入到哪個位置。

用 ProcessExplorer 查到載入位置

https://ithelp.ithome.com.tw/upload/images/20221002/20135675CRUe9KDqKT.png

透過 DLL 檔中的 EP ( 890 )找到指令位置計算位置

7FFAF3530000 + ( 890 - 400 + 1000 ) = 00007FFAF3531490

看一下這邊位置就是 DLL 的程式區。

https://ithelp.ithome.com.tw/upload/images/20221002/20135675uwmnzxi5sf.png

當我們在記事本上按下按鍵時,就可以發現這邊被停止並且被設為 EP了( 其實不用計算那麼多 )。

這時切換到 符號 頁面,可以看到在導出表上記錄著我們的那些函數

https://ithelp.ithome.com.tw/upload/images/20221002/20135675VVvLzhnjBy.png

往下滑到符號類型,可以看到指向 1020 的 KeyboardProc,進入後就可以看到當鍵盤按下時觸發的程序

https://ithelp.ithome.com.tw/upload/images/20221002/20135675U6ipd6PumM.png

KeyboardProc :

https://ithelp.ithome.com.tw/upload/images/20221002/20135675aJ5DG9o5HG.png

嘗試在 1020 的位置設下中斷點,按下 F9 運行。可以發現每次在記事本上按下按鍵時都會觸發 KeyboardProc,又回到 1020 停止。由此可以知道每次按下鍵盤時,你的文字都會被丟掉

小實驗

請試試看透過更改程式名稱比對 “notepad.exe” 的流程,來找回鍵盤。( 提示 : jmp )


題外話

這是在 DLL 上的兩個 function,有興趣可以看一下。

HookStart :

https://ithelp.ithome.com.tw/upload/images/20221002/20135675S7FyUfDQON.png

HookStop:

https://ithelp.ithome.com.tw/upload/images/20221002/201356750hepo4mBHB.png


上一篇
Dx17 - Hook : 勾走你的鍵盤
下一篇
Dx19 - DLL遠程注入攻擊 !
系列文
我逆向你逆向我的逆向工程膩31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言