樣本原文件 連接
個人分析過程文件 連接提示:請勿實體機分析
編程
查看文件類型,標準的PE頭編程語言
更名後使用查殼工具查看是否有殼編輯器
總共3個區段,不清楚是什麼殼!也不清楚是用什麼編程語言寫的函數
使用IDA加載,查看是否有關鍵字符串信息工具
看來字符串之類的也被加密或者壓縮了測試
因爲不清楚是什麼殼,因此只有嘗試多種通用脫殼的辦法:諸如單步法,ESP定律以及最後一次異常法!失敗的過程就不贅述了,最終是用最後一次異常配合單步找到的OEP,以下,首先取消勾選全部的忽略異常選項加密
而後Shift+F9忽略異常運行,運行8次以後會到0x430EF1這個位置進行一個很大的循環,是爲了找到kernel32的基址,這時候在下一行下斷運行便可spa
以後再單步F8,程序跑飛就返回來下個斷點從新運行,而後F7進入這個函數內部,跟個幾分鐘就會到jmp oep的地方操作系統
段間大跳轉確定是OEP了,使用Ollydump先dump內存線程
而後用Scylla修復導入表,最終完成脫殼
脫殼後的程序入口
初始化操做,包括獲取模塊句柄以及註冊句柄
該病毒最開始進行的關鍵操做就是分離原始PE文件,由於原始文件實際上是由一個病毒體+一個註冊表編輯器組成的,因此須要分離
(1).讀取病毒體的所有內容到緩衝區
(2).建立」 C:\WINDOWS\uninstall\rundll32.exe」這個文件,並把以前緩衝區的內容寫入到這個文件中,即病毒體寫入rundll32.exe
(3).寫註冊表,讓C:\WINDOWS\uninstall\rundll32.exe實現自啓動
(4).建立C:\WINDOWS\Logon1_.exe文件,而且寫入病毒體
(5).病毒體文件的大小問0x115D5,因此原文件的指針偏移0x115D5以後就是註冊表編輯器的全部數據
(6).而後在桌面新建a.exe.exe,把文件指針指向的地址起復制數據到a.exe.exe中,而且刪除原文件a.exe,以後重命名a.exe.exe爲a.exe以實現文件分離
殺掉程序中全部跟殺毒相關的進程以及服務
(1).先建立查找到的殺毒進程,再kill掉
(2).調用cmd來中止殺軟服務諸如:金山的服務,江民殺毒服務等等
(3).建立線程繼續殺毒,以及關閉系統聲音
Temp目錄下寫入bat文件以及建立進程運行
(1).建立文件C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\\$$a13.bat
(2).解密字符串後寫入內容到$$a13.bat中
(3).建立進程運行該bat文件
(4)關閉本程序的進程,建立C:\WINDOWS\Logon1_.exe進程以及修改後a.exe即註冊表編輯器運行
加載自定義dll實現下載其它病毒文件
(1).解密下載連接,大概十來個這樣子的"http://down.97725.com/downma1.exe"
(2).在一個線程對應的函數中,先訪問資源文件dll1.dll,再建立C:\WINDOWS\RichDll.dll而後將dll1.dll寫入到Richdll.dll中
(3).加載資源管理器來加載這個Richdll.dll
(4).寫註冊表實現開機自動加載dll
建立一個線程,在線程中建立desktop.ini寫入時間而且遍歷Z盤文件
(1).建立C:\_desktop.ini文件,並寫入當前時間
(2).獲取Z盤類型,方便後續操做
(3).遍歷Z盤中的全部文件
(4).設置每一個文件的屬性爲共享可寫
再次建立一個線程,在線程中主要是建立套接字,發送ping測試,嘗試鏈接局域網以及枚舉共享文件夾中的文件
(1).建立套接字以及發送hello,world測試,須要加載icmp.dll使用其中的API
(2).爆破嘗試鏈接局域網
(3).獲取本機計算機名
(4).枚舉局域網共享文件夾中的共享文件
(5).進入消息循環,收到結束消息後會釋放資源關閉句柄
崩潰點就在於遍歷系統dll時,地址訪0崩潰,而xp沒有崩潰的緣由在於遍歷的第一個就是kernel32成功命中,win7崩潰就在於遍歷的時候遇到了不能尋址的地址,下面圖片中這個偏移計算其實就是IAT的內存搜索
,由於IAT中有一個字段是該dll的名稱。但不是全部的dll都有導入表結構,當遇到沒有導入表結構的dll的時候上述尋址很容易遇到訪問地址崩潰
關於爲何xp能從kernel32開始遍歷,而win7卻從ntdll附近開始遍歷,並遍歷地址往高地址走,win7不可能訪問到kernel32這個模塊,緣由很簡單:
這個賦值寫死了0x77000000
,根據xp賦的值,win7賦值應該小於0x74000000
歸根結底就是操做系統不同,模塊加載的地址不同
,寫死地址兼容性就不高