1. 程式人生 > >病毒分析教程第五話--動態除錯分析(下)

病毒分析教程第五話--動態除錯分析(下)

動態除錯分析(下)

Lab 9-3

本節實驗使用樣本Lab09-03.exe、DLL1.dll、DLL2.dll、DLL3.dll。

Lab09-03.exe匯入了哪些DLL?

我們用OD開啟函式呼叫,發現Lab09-03.exe顯性地匯入了DLL1和DLL2、kernel32.dll和NetAPI32.dll。為什麼說是顯性呢?因為樣本一般還會通過呼叫LoadLibrary隱形地呼叫敏感的DLL,如下就是,我們看到Lab09-03.exe有呼叫LoadLibrayA。 1

我們使用IDA可以方便地看到樣本在兩處呼叫了LoadLibraryA,分別匯入了DLL3.dll和user32.dll。 2

3

DLL1.dll、DLL2.dll、DLL3.dll要求的基地址是多少?

DLL基地址的值儲存在PE結構的Optional Header -> ImageBase,很多工具都可以檢視,這裡我們發現DLL1.dll、DLL2.dll和DLL3.dll的基地址都為0x10000000。 4

當使用OllyDbg除錯Lab09-03.exe時,為DLL1.dll、DLL2.dll、DLL3.dll分配的基地址是什麼?

因為DLL1.dll和DLL2.dll在匯入表中,所以它們被立即載入,而DLL3.dll由於是動態載入的,所以我們需要執行到0x401041處 (LoadLibrary)才可以得知DLL3.dll被載入到了哪個地址。使用OD在0x401041下斷點,然後單步步過LoadLibrary。檢視Memory視窗。DLL1.dll獲得了它想得到的基地址0x10000000,DLL2.dll和DLL3.dll分別在0x1E0000和0x1F0000上。 5

當Lab09-03.exe呼叫DLL1.dll中的一個匯入函式時,這個匯入函式都做了些什麼?

使用IDA開啟DLL1.dll,定位到DLL1Print函式,雖然複雜,但主體功能就是呼叫了_write_char在控制檯處輸出資料。 6

我們可以看到,輸出的資訊為“DLL 1 mystery data”+PID。 7

DLL2Print的功能也一樣,也是輸出一段字串。 8

但它跟DLL1Print輸出PID不一樣,它是輸出了temp.txt的控制代碼值。 9

當Lab09-03.exe呼叫WriteFile函式時,它寫入的檔名是什麼?

DLL2ReturnJ返回temp.txt的控制代碼,那麼WriteFile寫入的檔名就是temp.txt,內容為“

malwareanalysisbook.com”。 10

當Lab09-03.exe使用NetScheduleJobAdd建立一個job時,從哪裡獲取第二個引數的資料?

而DLL3GetStructure函式比較奇怪,它只做了一個操作,將0x1FB0A0寫入0x12FF2C的位置。 12

而0x1FB0A0恰恰就是後面NetScheduleJobAdd的第二個引數ecx的值。 13

使用MSDN查詢NetScheduleJobAdd,得知該函式的功能為建立一個定時任務(job),而這個job的內容就是在Buffer中定義的,其中Buffer是一個AT_INFO結構的指標。14

也就是說0x1FB0A0指向的是一個AT_INFO結構。 15

我們使用IDA定位到了修改AT_INFO結構的地方,在DLL3.dll的DllMain裡。 16

為了更清晰地看出AT_INFO的賦值過程,我們可以在dword_1000B0A0處,選擇Edit->Struct Var,選擇AT_INFO,若你找不到AT_INFO,請看《病毒分析教程第四話–高階靜態逆向分析(上)》如何新增結構。 17

定義了AT_INFO結構後,顯示友好了很多,我們可以清晰的知道,這個定時任務的功能是,一週中任意一天的1:00AM,執行“ping www.malwareanalysisbook.com”的命令。 18

在執行除錯Lab09-03.exe時,你會看到Lab09-03.exe打印出三塊神祕資料。DLL1的神祕資料,DLL2的神祕資料,DLL3的神祕資料分別是什麼?

分別是程序的ID,temp.txt的控制代碼,“ping www,malwareanalysisbook.com”的地址。

如何將DLL2.dll載入到IDA Pro中,使得它於OllyDbg使用的載入地址匹配?

我們使用IDA開啟樣本時,勾選Manual load,就可以自定義基地址了,然後輸入DLL2.dll對應的0x1E0000,就可以跟OD中的匹配上了。 19