DLL逆向分析技巧

Xtutlab
5 min readOct 9, 2020

--

DLL(Dynamic-Link Library)是動態連結函式庫,主要是將程式碼模組化,並提供外部函式給主程式使用,不過惡意程式往往也有可能是透過DLL來與駭客中繼站通訊。資安工程師在分析惡意程式有時可能只有DLL本身,原來的中介程式已經找不到了,接下來的篇章是介紹去運行單獨一個DLL檔案,然後分析它。

由於DLL不能直接執行它,需要透過rundll32.exe程式來運行我們的DLL,不過rundll32.exe不是GUI(Graphical User Interface)的工具,使用它還需要知道它的參數格式,非常不方便,因此我們會透過Cheat Engine來幫助運行我們的DLL。

Cheat Engine
https://www.cheatengine.org/

DLL檔案(testDll.dll)
https://drive.google.com/file/d/1lEo3RC_A7GWIjZRDdRs3Y__p13KuJ18s/view?usp=sharing

DLL程式碼
https://drive.google.com/file/d/1Qx2kbqqPZLVKdyFQKn-KGp1tKsi6w9xp/view?usp=sharing


一、x64dbg Attach cmd.exe

我們已經知道DLL它必須在執行檔之下運行程式,因此我們要利用cmd.exe(也可以利用其它執行檔)來運行我們的DLL。

開啟cmd.exe,開啟x32dbg.exe(如果是64位元要使用x64dbg.exe),x32dbg.exe->File->Attach->選擇cmd.exe。

二、設定DLL Entry中斷點

在運行到cmd.exe時,我們必須在x32dbg.exe裡面設定載入DLL時,讓程式中斷下來。

x32dbg.exe->Options->Preferences->Events->將DLL Entry打勾。

三、注入DLL

接下來是主要的重點,我們會利用Cheat Engine來注入DLL,並分析它。

開啟Cheat Engine->Attach cmd.exe。

Memory View->Tools->Inject DLL->選擇要分析的DLL(testDLL.dll)。

選取要分析的外部函式(雖然範例只有一個外部函式,不過在真實情境的DLL,可能會有多個外部函式)。

在注入DLL時,會中斷到標準DLL,像是kernel32.dll,所以要在10秒內運行到我們的DLL。

如果沒有在10秒內運行到被注入的DLL,Cheat Engine會注入失敗,cmd.exe會觸發例外(Exception),造成程式當掉。

我們需要按F9運行到我們的DLL模組(testDll),然後按F8或F7進入主程式。

我們在進入DLL(testdll)的EntryPoint後,它會進行一系列的初始化,但是我們又不想要單步執行程式碼到我們要分析的外部函式,所以可以搜尋此函式的字串或Pattern來定位到此函式的位址,然後再下中斷點,這樣就簡單快速的找到此函式的運行位址。

更多技術文章

https://xtutlab.blogspot.com

https://www.facebook.com/Xtutlab-%E6%95%99%E5%AD%B8%E5%AF%A6%E9%A9%97%E5%AE%A4-345668095840741/

--

--

Xtutlab
Xtutlab

Written by Xtutlab

大家好,我是Shin,曾任職於行政院國家資通安全會報技術服務中心(NCCST),參與106金盾獎決賽出題以及在HoneyCon 2015、2016擔任Workshop講師,熱愛駭客技術、程式設計以及電腦科學,並且會不定期發表駭客技術教學文章,希望大家會喜歡!

No responses yet