• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 電腦安全 > 病毒知識 > QQ盜號木馬之逆向分析

    QQ盜號木馬之逆向分析

    時間: 若木635 分享

    QQ盜號木馬之逆向分析

      電腦已經走進我們的生活,與我們的生活息息相關,感覺已經離不開電腦與網絡,對于電腦安全防范,今天小編在這里給大家推薦一些電腦病毒與木馬相關文章,歡迎大家圍觀參考,想了解更多,請繼續關注學習啦。

      一般來說,病毒分析不會涉及到算法問題,如果是要分析算法(如我之前對于CM4注冊機制的分析),那么我們更多地是需要關注程序的流程與邏輯,一般不深究CALL的具體內容。而病毒分析則往往需要搞清楚各個不同的CALL的意義,才能夠弄清楚病毒的行為。所以本文的第一部分著重講述對這些CALL的剖析。而第二部分則簡單討論一下進程守護技術的實現。

      逆向分析

      這里我們跳過程序的初始化部分,來到第一個API函數的位置:

      我們能夠直接看到的第一個API函數是GetModuleFileName,這個函數用于獲取當前進程已加載模塊的文件的完整路徑,該模塊必須由當前進程加載。而該函數的返回值則是文件路徑長度,該返回值保存在了EAX中,為2B,也就是說路徑長度為2B個字符。可以看一下所返回的路徑是什么。路徑保存在“PathBuffer”中,跟蹤該地址查看:

      可見程序已正確獲取了當前文件的地址。然后繼續分析下一個API函數:

      這里出現了ShellExecute這個函數,它的功能是運行一個外部程序(或者是打開一個已注冊的文件、打開一個目錄、打印一個文件等等),并對外部程序有一定的控制。具體到本程序,ShellExecute會運行Explorer.exe程序來打開“d:\”,其實也就是使用程序管理器打開D盤根目錄。但是執行這個API函數是有條件的,它需要根據第二行CALL語句的結果進行判定,那么有必要進入這個CALL,看看需要滿足什么條件才能夠執行ShellExecute。

      進入oso.00403C48這個函數

      程序會對EAX和EDX中的內容進行比對,其中EAX保存的字符串就是我們之前使用GetModuleFileName所獲取的當前文件的路徑,只不過被轉化成了大寫字符。而EDX保存的是D盤根目錄下的OSO.EXE這個文件路徑。二者在這里很明顯是不同的。所以黃色高亮顯示的條件跳轉語句也就不成立,程序會繼續順序執行:

      這里需要說明的是,由于本病毒是由Delphi編寫的,那么字符串首地址減去4后,取出的4字節內容便是此字符串的長度。因此的前兩句代碼意思就是獲取兩個路徑的字符數,然后通過相減進行比較。這里很明顯當前路徑的字符數量是要大的,因此黃色高亮顯示的條件跳轉成立,來到oso.00403C6B的位置:

      這里依舊是字符的比較,由于二者不相等,所以最后一句的條件跳轉成立,來到oso.00403CD1的位置:

      這里比較的是盤符,也是不相等的,所以條件跳轉成立,本函數也就執行完畢了。綜合上述分析,這段函數的功用是判斷當前所執行的文件是不是位于D盤的根目錄下,如果是,則執行中的ShellExecute這個函數,反之則跳過這個函數執行。由于我們的這個程序是位于桌面上的,因此不執行ShellExecute函數。

      接下來程序還會繼續判斷當前程序是否位于E、F、G、H、I盤根目錄下,如果不是,那么也就不執行相應的ShellExecute函數。

      之后程序會調用名為oso.004050F0的函數,進入其內部分析:

      可見病毒程序調用了GetSystemDirectory函數用于獲取系統目錄。一般來說,惡意程序使用這個函數的目的就是要將自身復制到系統目錄中,以迷惑用戶(詳見《反病毒攻防研究第001篇:自我復制與自刪除》)。之后病毒程序會將字符“severe.exe”與上面獲得的系統目錄字符串進行組合,新的路徑也就是病毒程序需要隱藏的位置:

      之后可以看到CreateFile函數:

      但是這個CreateFile函數的執行是有條件的,它取決于第一行代碼中的CALL的返回值。進入這個CALL進行分析,可以找到:

      程序調用了FindFirstFile函數來查找系統目錄中有沒有severe.exe這個文件,如果沒有(返回值為-1)則不執行的CreateFile函數。由此可見,CreateFile函數在這里的作用不是創建文件,而是打開文件。接下來就是文件的復制操作:

      之后又是一系列的文件復制,病毒會將自身改名為tfidma.exe,并復制到系統目錄中。還會將自身改名為conime.exe,復制到系統目錄的drivers文件夾中。類似的操作不再贅述。之后程序就會再次調用ShellExecute函數,以執行所創建出來的這些程序。因此在“資源管理器”中就會出現severe.exe、conime.exe與tfidma.exe等進程。可以說在這個時候,我們的計算機就已經中病毒了。接下來我們會遇到線程的創建函數:

      CreateThread函數往往與Sleep或者WaitForSingleObject函數相配合使用。因為每個線程都有自己的CPU時間片,當主線程創建了新線程后,它的CPU時間片有時并沒有完,它還可以繼續執行。有時候如果主線程的代碼非常少,那么在CPU指定的CPU時間片中主線程執行完后就退出了。主線程結束,那么意味著程序也就結束了,所以在這種情況下,我們自己創建的線程根本就沒有被執行到。所以我們需要讓主線程等待我們創建的線程,就需要使用Sleep或者WaitForSingleObject函數。本程序所采用的就是Sleep函數(等待1.3秒)。

      根據OD對CreateThread函數的解析可以知道,該線程所調用的是oso.00404958這個函數。分析這個函數可以知道,它主要是創建了名為“hx1.bat”的批處理文件并執行,而該批處理的內容為:

      其主要作用就是修改系統時間,測試本地網絡系統并刪除自身。病毒的常規分析部分就是這些。

      三、進程守護技術原理

      進程的守護技術最早應該是源于“中國黑客病毒(worm.runouce)”,它開創性地采用了“三線程”結構。創建三線程就是為了更好地保護程序自身不被關閉和刪除。我們可以將想要執行的代碼放在主線程里,然后再生成兩個輔助線程,它們的功能就是實現對程序的保護,防止程序被用戶關閉或刪除。在此,稱我們的可執行文件的進程為主進程。兩個輔助線程相互實時監視,如果監視對象被關閉了,就重新創建線程或進程。比如病毒程序可以選擇Explorer.exe和Taskmgr.exe作為遠程進程駐體。如果用戶知道了遠程線程的駐體為資源管理器后,就會打開任務管理器來結束Explorer,這時我們再把遠程線程駐入到任務管理器中。也就是說,只要Explorer或Taskmgr有一個存在,就不可能結束主進程。如果有其它結束進程的工具,你就可以將其關閉掉,只要資源管理器和任務管理器均不存在時,就沒有駐體來維持遠程進程。不過,如果我們選擇的遠程進程為隨機的,或者就是病毒自創的,這就不容易發現了。

      這種三線程結構的程序框架大致如下(代碼來自《淺析三線程程序開發思路與實現》):

      // 1.主線程:main // 獲得操作系統的系統目錄

      GetSystemDirectory(syspath,MAX_PATH); // 查詢系統目錄下病毒是否存在

      FindFirstFile(virusname,&fdata); // 如果系統目錄下沒有,在將正在運行的程序復制到系統目錄下

      CopyFile(curname,tname,TRUE); // 在查詢完畢后,關閉相關句柄

      FindClose(ffhandle); // 打開系統目錄下的文件

      CreateFile(kname,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); // 修改時間

      SetFileTime(fchandle,&ftime,NULL,&ftime); // 設置屬性

      SetFileAttributes(kname,FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM ); // 創建駐留在主進程內的輔助監視線程

      CreateThread(NULL,0,watch,(LPVOID)rthread,0,NULL);

      // 2.本地輔助監視線程:watch // 以查詢方式打開注冊表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

      RegOpenKeyEx(HKEY_LOCAL_MACHINE,rgspath,0,KEY_QUERY_VALUE,&hkey); // 查詢是否存在virusname的鍵值

      RegQueryValueEx(hkey,_T("virusname"),NULL,NULL,(LPBYTE)lpdata,&dwbuflen); // 如果沒有相關鍵值,就以寫方式再次打開注冊表

      RegOpenKeyEx(HKEY_LOCAL_MACHINE,rgspath,0,KEY_WRITE,&hkey); // 寫入我們想要的東西,系統每次啟動都會運行我們的可執行文件;

      RegSetValueEx(hkey,_T("virusname"),NULL,type,(const byte *)wtname,dwbuflen); // 獲得遠程線程的運行情況,看是否為STILL_ACTIVE,如果不是則創建遠程線程

      GetExitCodeThread(wethread,&exitcode);

      // 3.遠程線程:remote // 以所有可能的訪問方式打開主進程,以便監視主進程的運行情況

      tOpenProcess(PROCESS_ALL_ACCESS,FALSE,erp->rpmousepid); // 等待直到主進程結束

      tWaitForSingleObject(erp->rpprocesshandle,INFINITE); // 重新啟動我們的可執行文件

      tWinExec(erp->rpwinexecname, 0);

      // 4.獲得進程ID:processtopid // 列舉所有的進程

      EnumProcesses(lpidprocesses,sizeof(lpidprocesses),&cbneeded); // 以查詢信息和讀取的方式打開進程

      OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,lpidprocesses[i]); //獲得進程模塊的句柄

      EnumProcessModules(hprocess,&hmodule,sizeof(hmodule),&cbneeded); // 獲得特定模塊的名字,以備比較

      GetModuleBaseName(hprocess,hmodule,normalname,sizeof(normalname));

      // 5.創建遠程線程:createremote // PROCESS_CREATE_THREAD for CreateRemoteThread

      // PROCESS_VM_OPERATION for VirtualAllocEx // PROCESS_VM_WRITE for WriteProcessMemory

      OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,remotepid); // 在遠程進程中分配空間,以備將線程代碼置入其中

      VirtualAllocEx(rphandle,NULL,cb,MEM_COMMIT,PAGE_EXECUTE_READWRITE); // 將遠程線程remote的代碼寫入到遠程進程的地址空間中

      WriteProcessMemory(rphandle,remotethr,(LPVOID)remote,cb,NULL); // 將遠程線程所需的參數也寫入到遠程進程的地址空間中

      WriteProcessMemory(rphandle,remotepar,(LPVOID)&rp,cb,NULL); // 創建遠程監視線程

      CreateRemoteThread(rphandle,NULL,0,(LPTHREAD_START_ROUTINE)remotethr,(LPVOID)remotepar,0,NULL);

      畢竟本系列不是教大家編寫病毒,而是剖析病毒的大概思路,所以上述程序大家有個大概的印象即可,這樣在以后的實際分析中,就能有大概的應對思路。

      四、小結

      至此,QQ盜號木馬(oso.exe)病毒程序的分析就到這里。希望大家喜歡.

    95179 主站蜘蛛池模板: 在线看成品视频入口免| 爱豆传媒在线视频观看网站入口| 日本强伦姧人妻一区二区| 国产成人综合久久精品免费| 亚洲国产欧洲综合997久久| 91大神精品在线观看| 欧美视频中文字幕| 国内精品久久久久影视| 亚洲精品乱码久久久久久不卡 | 亚洲精品欧美精品日韩精品| 国内精品视频一区二区三区八戒 | 久久91精品国产91久久麻豆| 香瓜七兄弟第二季| 日韩小视频在线| 国产偷窥熟女精品视频| 久久av无码精品人妻糸列| 老师您的兔子好软水好多动漫视频 | 一级毛片大全免费播放下载| 精品无码无人网站免费视频| 宅宅午夜亚洲精品| 伊人一伊人色综合网| 91香蕉国产在线观看人员| 欧美性xxxxx极品娇小| 国产欧美日韩中文字幕| 久久伊人精品青青草原高清| 色综合久久88色综合天天| 岛国免费在线观看| 亚洲色图欧美激情| 4ayy私人影院| 日韩电影免费在线观看中文字幕| 国产丰满麻豆videossexhd| 三大高傲校花被调教成好文 | 99久久精品国产一区二区蜜芽| 欧美美女视频网站| 国产极品视觉盛宴| 久久99精品久久久久久清纯 | 国产三级在线观看视频不卡| 三年片在线观看免费观看大全中国 | аⅴ天堂中文在线网| 波多野结衣bt| 国产成人精品视频一区二区不卡|