恶意代码分析实战——高级反汇编
QQ 1274510382
Wechat JNZ_aming
商業聯盟 QQ群538250800
技術搞事 QQ群599020441
解決方案 QQ群152889761
加入我們 QQ群649347320
共享學習 QQ群674240731
紀年科技aming
網絡安全 ,深度學習,嵌入式,機器強化,生物智能,生命科學。
叮叮叮:產品已上線 —>關注 官方-微信公眾號——濟南紀年信息科技有限公司
民生項目:商城加盟/娛樂交友/創業商圈/外包兼職開發-項目發布/
安全項目:態勢感知防御系統/內網巡查系統
云服項目:動態擴容云主機/域名/彈性存儲-數據庫-云盤/API-AIeverthing
產品咨詢/服務售后(同)
紙上得來終覺淺,絕知此事要躬行 !!!
尋找志同道合伙伴創業中。。。抱團滴滴aming聯系方式!!
學習惡意代碼對抗反匯編的技術。
學習識別惡意代碼采用的反匯編技術,并針對性地進行破解;
在此過程中我們會使用idc腳本輔助我們的分析;
如何分析出程序的網絡特征(user-agent,url等)。
惡意代碼分析實戰
本科/專科信息安全專業
計算機網絡、操作系統
1.IDA Pro
IDA Pro是一款交互式的,可編程的,可擴展的,多處理器的,
交叉Windows或Linux WinCE MacOS平臺主機來分析程序,
被公認為最好的花錢可以買到的逆向工程利器。
IDA Pro已經成為事實上的分析敵意代碼的標準并讓其自身迅速成為攻擊研究領域的重要工具。
它支持數十種CPU指令集其中
包括Intelx86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。
服務器:Windows 7
輔助工具:IDA Pro
將會分析 exe文件。先來看看要求解答的問題
Q1.程序初始化請求的URL是什么?
Q2. User-Agent 域是如何產生的?
Q3.初始化請求時,程序在內存頁中查找什么?
Q4.程序如何處理它從頁中提取的信息?
首先IDA載入分析,從頭到尾稍微看下main
在0040115a遇到了第一個對抗反匯編技術
因為esp值是非0的,所以test指令返回結果一定是非零值
那么下面的jnz指令的跳轉是永遠成立的
其跳轉的目的是40015e+1
也就是jmp指令中間的位置,這是有問題的,
而且IDA將跳轉的位置標記為紅色,也能說明這里是不正常的
將光標定位40115e,按d鍵,將這個指令變為數據
然后光標定位到40115f,按c鍵轉為代碼
這樣就正常了。
繼續往下,在4011d0看到了對抗反匯編的技術
這里通過xor給eax賦0,下面的jz指令跳轉是永遠成立的
jz的目的第4011d4處的call目的地址同樣是紅色的,說明也是不正常的
光標定位到4011d4,按d鍵轉數據
然后定位到4011d5,按c鍵轉代碼
之后都是同樣的處理,結果如下
繼續往下,在401215處也存在對抗反匯編的技術
可以option->general如下設置,用于顯示出機器碼
如下所示
這是一個雙字節的jmp指令。跳轉目標是它的第二個字節
按d鍵轉為數據
光標定位到00401216,按c鍵轉為代碼
繼續往下,在401269處存在對抗反匯編技術
這里的jz和jnz指令都是跳轉到同一個地址,說明命中目標代碼不取決于零標志位的置位與否
將光標定位到跳轉的目標,也就是0040126d,按d鍵轉為數據
光標定位0040126e,按c鍵,轉為代碼
繼續往下,在4012e6位置存在對抗反匯編技術
這里的jz跳轉的目的地是4012e8,是向上跳轉,跳到mov指令中間的位置。
這不是正常的跳轉,而且和我們之前看到的向下跳轉也是不同的
光標定位到4012ee,按d鍵轉為數據
定位到4012ef,按c鍵轉為代碼
定位到4012e6,按d鍵轉為數據
定位到4012e8按c鍵轉為代碼
至此,main函數中所有對抗反匯編的地方都被我們調整回來了。
不過可以看到,還存在一些多余的db字節,
我們需要將其轉換為nop指令(0x90),這樣才能構造出一個函數
替換nop,使用腳本就可以自動化進行
腳本內容如下
注意文件后綴名為idc
來測試一下,定位到0040115e,這里有多余的db字節
然后file->script file
選中test.idc,點擊打開即可
此時已經被修改為90h了
其他地方也是同樣如此
這樣就全部修改完畢了,接著選中全部main函數
從00401000到0040130e
然后按p鍵,再按空格鍵,就可以圖形化地查看生成的函數
在InternetOpenUrlA前調用了sub_401386,跟入
可以看到是在將字符拷貝到棧空間里
可以將這些16進制通過按r鍵進行轉換為字符
可以看到往棧上拷貝的字符組成的字符串其實是一個網址
http://practicalmalwareanalysis.com/bamboo.html
Q1.程序初始化請求的URL是什么?
A1.程序第一個請求的URL是http://www.practicalmalwareanalysis.com/bamboo.html。
返回上層函數
我們就知道了InternetOpenUrlA就是嘗試訪問這個網站
為了知道user-agent,我們來分析InternetOpenA
其第一個參數lpszAgent其實就是user-agent
其值edx來自name,往上回溯
可以看到是gethostname的返回值保存在name中。
所以我們可以認為user-agent的字符串就是主機名
我們f5查看偽碼繼續分析
將case里的數字轉為字符,更直觀一點
可以看到是一個for循環。
for循環的作用就是將name字符串中的每個字符進行修改:
如果是Z則修改為A,如果是z則修改為a,
如果是9則修改為0,如果不是這三種情況,
則自增,檢查下一個
Q2. User-Agent 域是如何產生的?
A2. User-Agent 字符串由hostname中
每個字母和數字加1組成(Z和9對應的是A和0)。
程序使用InternetOpen初始化,然后使用InternetOpenUrlA打開一個網址
然后是InternetReadFile將數據下載到一個本地緩沖區
緩沖區包含的數據是第二個參數,上圖中已經被IDA標記為Buffer
在004011DA又出現了Buffer
上圖中調用了strstr查找一個大字符串中的子串,
這里就是在緩沖區Buffer中查找字符串Bamboo::,
Buffer里包含從原始的url中提取的所有數據。
如果查找成功,則eax會保存該子串在Buffer里首次出現的位置,
通過mov指令賦給了Str
Q3.初始化請求時,程序在內存頁中查找什么?
A3.程序在它請求的網頁中查找字符串Bamboo::。
上圖又是調用了strstr,用來搜索::,如果找到了,
則將地址保存在eax里,而00401212又將0賦給了eax
其實也就是說將::的第一個:賦0,或者說賦NULL,
用于終止Bamboo::和::之間的字符串
0040123e,ecx+8,其實就是Str+8,而Bambo:長度就是8,
那么這里的作用就是讓指針跳過Bambo:,指向后面的內容
之后是調用InternetOpenUrlA,其第二個參數就是要打開的url
所以我們就知道了,Bamboo::和尾部冒號之間的數據的目的,
就是程序要下載的一個網址
調用InternetReadFile將文件保存在文件里
文件名稱保存在ecx,而ecx來自于Filename,往上回溯
Filename來自eax,而eax是sub_40130f的返回值
跟入該函數
同樣有拷貝字符的操作,按r鍵轉換
這里合在一起就是AccountSummary.xls.exe
這就是文件名稱,我們通過InterReadFile下載的文件就是保存在這里
回到上層函數,繼續往下分析
調用ShellExecute函數啟動文件
之后程序就退出了。
Q4.程序如何處理它從頁中提取的信息?
A4. 除了搜索字符串Bamboo外,
程序還查找一個額外的::,它被轉換為一個NULL結束符。
Bamboo與結束符之間的字符串被下載到一個名為AccountSummary.xls.exe的文件中,
下載完后, 程序運行它
配套學習資源
1.《惡意代碼分析實戰》
總結
以上是生活随笔為你收集整理的恶意代码分析实战——高级反汇编的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员到高级程序员,只需要10个步骤!
- 下一篇: layui上传图片(加大小限制)