6.1 Lab 9-1
程序分析
首先,進(jìn)行靜態(tài)分析,使用strings。
CreateFileA
RegQueryValueExA
RegOpenKeyExA
RegSetValueExA
RegCreateKeyExA
RegDeleteValueA
WideCharToMultiByte
GetModuleHandleA
GetEnvironmentVariableA
SetEnvironmentVariableA
SOFTWARE\Microsoft \XPS
HTTP/1.0
GET
SLEEP
cmd.exe
>> NUL
http://www.practicalmalwareanalysis.com
%SYSTEMROOT%\system32\
這里有一些東西我們比較在意,我們可以看到該程序?qū)ψ员砗铜h(huán)境變量進(jìn)行了一些操作,并且具有網(wǎng)絡(luò)特征;出現(xiàn)了cmd.exe可能具有遠(yuǎn)程shell的功能;創(chuàng)建了文件,可能下載了什么東西。
接下來進(jìn)行動(dòng)態(tài)分析,將程序拖入IDA和OllyDbg中,在IDA中查找該函數(shù)的起點(diǎn),然后在OllyDbg中定位到起點(diǎn),進(jìn)行分析。
首先,在地址0x402AFD查看命令行參數(shù)的數(shù)量是否等于1,等于1,ZF等于1,此時(shí)jnz無法跳轉(zhuǎn),cal了函數(shù) 0x401000,我們在IDA中查看一下該函數(shù)是什么。
發(fā)現(xiàn)函數(shù) RegOpenKeyExA ,打開指定的注冊表,RegQueryValueExA 檢索與打開的注冊表項(xiàng)關(guān)聯(lián)的指定值名稱的類型和數(shù)據(jù)。該函數(shù)綜合功能是查找是否存在它指定的注冊表。
沒有查找到指定的注冊表,反返回了0.進(jìn)入了0x402410,我們打開IDA查看一下這個(gè)函數(shù)是干啥的。
GetModuleFileName 函數(shù)獲取當(dāng)前可執(zhí)行文件的路徑,shellExeute函數(shù)對指定文件進(jìn)行操作,我們看得到有“cmd.exe”“>> NUL”“/c del”字符串,可能是對自身進(jìn)行了刪除,在OllyDbg中跟進(jìn)。
可以看到字符串"/c del C:\DOCUME1\ADMINI1\Lab09-01.exe >> NUL",對可執(zhí)行文件進(jìn)行了刪除,然后結(jié)束了程序。
問題
- 如何讓這個(gè)惡意代碼安裝自身?
首先需要跳過__alloca_probe函數(shù),通過加入一個(gè)參數(shù)跳過。
還需要跳過0x402510函數(shù),進(jìn)入這個(gè)函數(shù)分析可以得知,需要的參數(shù)為“abcd”。
- 這個(gè)惡意代碼的命令行選項(xiàng)是什么?它要求的密碼是什么?
可以對幾個(gè)函數(shù)進(jìn)行依次分析。
參數(shù)-in
(1)若帶的參數(shù)是-in,則安裝服務(wù)。
(2) 參數(shù)-re
若帶的參數(shù)是-re,則卸載服務(wù)
(4) 參數(shù)-c
若帶的參數(shù)是-c,則刪除自身并設(shè)置注冊表配置鍵
(5) 參數(shù)-cc
若帶的參數(shù)是-cc,則打印注冊表配置鍵
該惡意程序還能能執(zhí)行多種指令 ‘-in’ 進(jìn)行安裝,‘-re’ 進(jìn)行惡意程序的徹底清除,‘-cc’ 進(jìn)行注冊表打印,‘-c’ 進(jìn)行惡意代碼更新配置;要求的密碼是 ‘a(chǎn)bcd’
- 如何利用OllyDbg永久修補(bǔ)這個(gè)惡意代碼,使其不需要指定的命令行密碼?
可以通過修改跳轉(zhuǎn)條件。
將此處改為je,既可在密碼錯(cuò)誤時(shí)跳轉(zhuǎn)。
- 這個(gè)惡意代碼基于系統(tǒng)的特征是什么?
會創(chuàng)建一個(gè)指定注冊表項(xiàng) “HKLM\SOFTWARE\Microsoft \XPS” 的 “configuration”鍵”;同時(shí)會創(chuàng)建一個(gè)服務(wù),該服務(wù)的名稱由安轉(zhuǎn)時(shí)傳入的參數(shù)決定;另外,該程序還會自我賦值到Windows系統(tǒng)目錄下。
- 這個(gè)惡意代碼是否有網(wǎng)絡(luò)特征?
會向指定的站點(diǎn)發(fā)出http (HTTP/1.0 GET) 請求,默認(rèn)的站點(diǎn)是“http://www.practicaolmalwareanalysis.com”
6.2 Lab 9-2
用OllyDbg分析惡意代碼文件Lab09-02.cxe,回答下列問題。
問題
- 在二進(jìn)制文件中,你看到的靜態(tài)字符串是什么?
使用Strings進(jìn)行分析。
- 當(dāng)你運(yùn)行這個(gè)二進(jìn)制文件時(shí),會發(fā)生什么?
沒有發(fā)生什么就終止了。
- 怎樣讓惡意代碼的攻擊負(fù)載(payload)獲得運(yùn)行?
使用OllyDbg進(jìn)行分析,首先定位到程序入口。
可以發(fā)現(xiàn)這里將很多字符轉(zhuǎn)移到了棧上,我們可以通過IDA來查看一下是什么字符串。
或者使用OllyDbg進(jìn)行跟隨。
繼續(xù)運(yùn)行,發(fā)現(xiàn)調(diào)用了GetMoudleFileName函數(shù)
運(yùn)行到這個(gè)位置。
調(diào)用了一個(gè)函數(shù),有兩個(gè)參數(shù),其中一個(gè)是上面所返回的路徑,另一個(gè)是‘\’,這個(gè)函數(shù)的作用是將當(dāng)前可執(zhí)行文件的文件名找出來。
運(yùn)行到下一個(gè)call調(diào)用函數(shù)的地址。
可以看到棧上有兩個(gè)參數(shù)。
結(jié)合IDA我們可以得知這就是一個(gè)字符串比較函數(shù)。如果這個(gè)函數(shù)發(fā)現(xiàn)兩個(gè)字符串不一樣,那么就會退出程序。
將該可執(zhí)行文件名稱改為ocl.exe就可以運(yùn)行該樣本。
- 在地址0x00401133處發(fā)生了什么?
將兩個(gè)字符串壓入了棧中。
- 傳遞給子例程(函數(shù))0x00401089的參數(shù)是什么?
參數(shù)是字符串和一個(gè)數(shù)據(jù)緩沖區(qū)。
- 惡意代碼使用的域名是什么?
進(jìn)入(函數(shù))0x00401089。
char *__cdecl sub_401089(char *a1, int a2)
{
signed int i; // [sp+4h] [bp-108h]@1
signed int v4; // [sp+8h] [bp-104h]@1
char v5; // [sp+Ch] [bp-100h]@1
char v6; // [sp+Dh] [bp-FFh]@1
__int16 v7; // [sp+109h] [bp-3h]@1
char v8; // [sp+10Bh] [bp-1h]@1
v5 = 0;
memset(&v6, 0, 0xFCu);
v7 = 0;
v8 = 0;
v4 = strlen(a1);
for ( i = 0; i < 32; ++i )
*(&v5 + i) = a1[i % v4] ^ *(_BYTE *)(i + a2);
return &v5;
}
類似于一個(gè)解密函數(shù)。
運(yùn)行看看結(jié)果。
- 惡意代碼使用什么編碼函數(shù)來混域名?
惡意代碼用字符串 1qaz2wsx3edc 異或加密的 DNS 名來解密域名。
- 惡意代碼在0x0040106E處調(diào)用CreateProcessA函數(shù)的意義是什么?
書上的解答是
惡意代碼設(shè)置stdout、stderr和stdin的句柄到socket(被用在CreateProcessA的STARTUPINFO結(jié)構(gòu)中)。由于cmd作為CreateProcessA的參數(shù)調(diào)用,因此通過綁定一個(gè)套接字與命令shell來創(chuàng)建逆向shell
大概意思就是說這個(gè)shell是通過這個(gè)CreateProcessA的STARTUPINFO來綁定stdou,stderr,stdin在cmd上的,只有這樣才能把這些東西綁定在cmd上
6.3 Lab 9-3
使用OllyDbg和IDAPro分析惡意代碼文件Lab09-03.exe。這個(gè)惡意代碼加載3個(gè)自帶的DLL
(DLLI.d、DLL2.dI、DLL3.dI),它們在編譯時(shí)請求相同的內(nèi)存加載位置。因此,在OllyDbg中對照IDAPro瀏覽這些DLL可以發(fā)現(xiàn),相同代碼可能會出現(xiàn)在不同的內(nèi)存位置。這個(gè)實(shí)驗(yàn)的目的是讓你在使用OllyDbg看代碼時(shí)可以輕松地在IDAPro里找到它對應(yīng)的位置。
問題
- Lab09-03.cxe導(dǎo)入了哪些DLL?
首先查看靜態(tài)導(dǎo)入的DLL;
然后打開IDA查看導(dǎo)入函數(shù)LoadLibrary函數(shù)導(dǎo)入了什么DLL;
一共是導(dǎo)入了6個(gè)DLL。
- DLL.dll、DLL2.dll、DLL3.dll 要求的基地址是多少
查看要求的基地址。
- 當(dāng)使用OllyDbg調(diào)試Lab09-03.exe時(shí),為DLL.d、DLL2.d、DLL3.du分配的基地址是什么?
因?yàn)?DLL3.dll 庫需要在程序運(yùn)行時(shí)才能導(dǎo)入,所以先運(yùn)行到導(dǎo)入dll的地址。
查看導(dǎo)入的基地址。
- 當(dāng)Lab09-03.exe調(diào)用DLL1.dll中的一個(gè)導(dǎo)入函數(shù)時(shí),這個(gè)導(dǎo)入函數(shù)都做了些什么
OllyDbg中也給出了一段字符串。DLL1.exe的導(dǎo)入函數(shù)是:
使用 IDA 打開 DLL1.dll,
sub_10001038應(yīng)該是一個(gè)printf函數(shù),dword_10008030中的數(shù)據(jù)是GetCurrentProcessId的返回值。
所以這個(gè)函數(shù)的功能就是打印出dll的進(jìn)程ID。
- 當(dāng)Lab09-03.exe調(diào)用WriteFile函數(shù)時(shí),它寫入的文件名是什么?
文件名稱是DLL2中的函數(shù)返回的。
所以我們有必要查看一下DLL2中的這個(gè)函數(shù)是干什么的。
看來是“text.txt”。
- 當(dāng)Lab09-03.cxe使用NetScheduleobAdd創(chuàng)建一個(gè)job時(shí),從哪里獲取第二個(gè)參數(shù)的數(shù)據(jù)?
分析dll3getstructure。
可以看到這個(gè)函數(shù)有一個(gè)參數(shù),將其賦給eax結(jié)合分析exe時(shí)看到的調(diào)用
傳入的參數(shù)是edx而edx的值是buffer的內(nèi)容
而這個(gè)buffer其實(shí)就是一個(gè)局部變量也就是說在調(diào)用dll3strcture時(shí)其參數(shù)就是局部變量的地址回到dll3.dll的分析在獲取到地址之后
把dword的值賦給eax指向的地址中,也就是前面說的buffer我們跟進(jìn),查看交叉引用
可以看到是一系列的move賦值的操作這些數(shù)據(jù)的地址會保存在buffer里,而buffer保存在ecx,而之后ecx是作為netschedulejobadd的第二個(gè)參數(shù)
Lab09-03.exe 從DLL3GetStructure中獲取NetScheduleJobAdd調(diào)用的緩沖區(qū),它動(dòng)態(tài)地解析獲得第二個(gè)參數(shù)的數(shù)據(jù)
- 在運(yùn)行或調(diào)試Lab09-03.exe時(shí),你會看到Lab09-03.exe打印出三塊神秘?cái)?shù)據(jù)。DLL1的神秘?cái)?shù)據(jù)DLL2的神秘?cái)?shù)據(jù),DLL3的神秘?cái)?shù)據(jù)分別是什么?
DLL1的神秘?cái)?shù)據(jù)是進(jìn)程ID,DLL2的神秘?cái)?shù)據(jù)是打開temp.txt文件的句柄,DLL3的神秘?cái)?shù)據(jù)是字符串“ping www.malwareanalysisbook.com”。文章來源:http://www.zghlxwxcb.cn/news/detail-468734.html
- 如何將DLL2.d加載到IDAPro中,使得它與OlyDbg使用的加地址匹配
+
成功。文章來源地址http://www.zghlxwxcb.cn/news/detail-468734.html
到了這里,關(guān)于惡意代碼分析實(shí)戰(zhàn) 6 OllyDbg的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!