• 恶意代码分析实战 IDA分析 lab 73 一个通过感染主机exe 修改kernel.dll为恶意dll的后门程序 要做清理的话 是很难的!


     winxp运行该后门后:

    win7下:

    运行前:

    运行后还是一样,即便是用cmd管理员运行。看来该病毒只是适合在xp下运行。

    静态分析strings + IDA pro

    查看字符串
    exe
    在这里插入图片描述

    kerne`132`.dll
    kernel32.dll
    C:\windows\system32\kerne`132`.dll
    C:\Windows\System32\Kernel32.dll
     

    WARNING_THIS_WILL_DESTROY_YOUR_MACHINE 本书专制
    dll

    在这里插入图片描述
    exec、sleep、hello
    127.26.15.13 恶意代码可能访问该IP地址
    SADFHUHF
    导入函数
    exe重点看kernel32.dll下大量和文件相关的函数
    在这里插入图片描述
    CreateFileACreateFileMappingA以及MapViewOfFile表明该程序可能打开一个文件,并将其映射到内存中。这个 FindFirstFileA 和FindNextFileA函数组合,可能会搜索文件,并使用CopyFileA 对找到的文件进行复制操作。该程序没有导入Lab 07-03.dll(DLL中的函数)、LoadLibrary或者GetProcAddress,暗示它可能没有在运行时加载那个DLL。
    dll文件的导入函数
    重点看kernel32.dll
    在这里插入图片描述
    GetProcessA函数,可能会创建另一个进程。

    分析EXE

    .text:00401440                 mov     eax, [esp+argc]
    .text:00401444                 sub     esp, 44h
    .text:00401447                 cmp     eax, 2#①
    .text:0040144A                 push    ebx
    .text:0040144B                 push    ebp
    .text:0040144C                 push    esi
    .text:0040144D                 push    edi
    .text:0040144E                 jnz     loc_401813#②
    .text:00401454                 mov     eax, [esp+54h+argv]
    .text:00401458                 mov     esi, offset aWarning_this_w ; "WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"
    .text:0040145D                 mov     eax, [eax+4]#③
    .text:00401460
    .text:00401460 loc_401460:                             ; CODE XREF: _main+42j
    .text:00401460                 mov     dl, [eax]#④
    .text:00401462                 mov     bl, [esi]
    .text:00401464                 mov     cl, dl
    .text:00401466                 cmp     dl, bl
    .text:00401468                 jnz     short loc_401488
    .text:0040146A                 test    cl, cl
    .text:0040146C                 jz      short loc_401484
    .text:0040146E                 mov     dl, [eax+1]
    .text:00401471                 mov     bl, [esi+1]
    .text:00401474                 mov     cl, dl
    .text:00401476                 cmp     dl, bl
    .text:00401478                 jnz     short loc_401488
    .text:0040147A                 add     eax, 2
    .text:0040147D                 add     esi, 2
    .text:00401480                 test    cl, cl
    .text:00401482                 jnz     short loc_401460#⑤
    .text:00401484
    .text:00401484 loc_401484:                             ; CODE XREF: _main+2Cj
    .text:00401484                 xor     eax, eax
    .text:00401486                 jmp     short loc_40148D
     

    ①:cmp eax, 2检查参数个数是否为2,如果不是,跳转另一节,直接退出。在③处mov eax, [eax+4]移动argv[1]到EAX,以及将字符串"WARNING_THIS_WILL_DESTROY_YOUR_MACHINE"移动到ESI寄存器。在④和⑤之间的循环,会对EAX和ESI中的值进行比较,如果不相同,则跳转,并从这个函数返回,不执行其他操作。
    所以该程序的正确用法是

    Lab 07-03.exe WARNING_THIS_WILL_DESTROY_YOUR_MACHINE
     

    在字符串C:*处
    在这里插入图片描述
    sub_4011E0函数
    在这里插入图片描述
    FindFirstFileA用于检索C盘驱动器
    在这里插入图片描述
    比较用一个字符串和.exe进行检查,调用sub_4010A0函数,查看是否匹配
    sub_4010A0
    为了节省时间,只查看函数调用。CreateFileACreateFileMappingA 以及MapViewOfFile表明该程序打开文件,并将其映射到内存中。
    出现了大量的IsBadReadPtr

    .text:0040116E                 push    offset Str2     ;"kernel32.dll"
    .text:00401173                 ⑥push    ebx             ; Str1
    .text:00401174                 ①call    ds:_stricmp
    .text:0040117A                 add     esp, 8
    .text:0040117D                 test    eax, eax
    .text:0040117F                 jnz     short loc_4011A7
    .text:00401181                 mov     edi, ebx
    .text:00401183                 or      ecx, 0FFFFFFFFh
    .text:00401186                 ③repne scasb
    .text:00401188                 not     ecx
    .text:0040118A                 mov     eax, ecx
    .text:0040118C                 mov     esi, offset dword_403010
    .text:00401191                 ⑤mov     edi, ebx
    .text:00401193                 shr     ecx, 2
    .text:00401196                 ④rep movsd
    .text:00401198                 mov     ecx, eax
    .text:0040119A                 and     ecx, 3
    .text:0040119D                 rep movsb
     

    在②处检查是否为kernel32.dll。③处调用repne scasb,④处调用rep movsd,在功能上等价于strlenmemcpy函数。memcpy调用写入的地址在EDI中,首先需要知道EBX。EBX在⑥处压入栈传给strcmp函数,意味着函数如果找到字符串kernel32.dll,这段代码将用某些东西替换该字符串。什么东西呢?转到rep movsb,查看源头在dword_403010
    在这里插入图片描述在这里插入图片描述

    检查这个程序如何修改kernel32.dll以及Lab07-03.dll。使用md5检查
    发现运行Lab07-03.exe程序后Lab07-03.dll名称修改为kerne132.dll,并且有导出函数,该导出函数是kernel32.dll中的导出函数,并且作了重定向,所有功能还是kernel32.dll中的功能。

    所有在main方法中访问kernel32.dll以及Lab07-03.dll的代码是在解析kernel32.dll的导出节,并在Lab07-03.dll中创建一个导出节,来导出同样函数并创建到kernel32.dll的转发。好绕啊

    分析DLL

    在这里插入图片描述
    __alloca_probe:在空间分配栈

    在这里插入图片描述

    OpenMutexA、CreateMutexA 互斥量
    在这里插入图片描述

    远程socket建立建立连接
    使用了固定ip地址127.26.152.13。端口0x50,为80端口,常用于Web流量。
    数据如何传输?
    send
    在这里插入图片描述
    recv
    在这里插入图片描述
    判断回复的内容:

    在这里插入图片描述
    strncmp检查是否字符串是否为"sleep",并检查返回值是否为0,如果是休眠60秒。
    在这里插入图片描述
    检查该缓冲区是否以"exec"开始。如果是strncmp返回0,然后顺序执行到jnz处,调用CreateProcessA函数。
    该函数的一个重要参数是CommandLine,告知被创建的进程。未发现写过程。
    对应的值在0xFFB处。

    1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?

    通过DLL到C:\windows\system32\,并修改系统上每一个导入它的.exe文件,达到持久化驻留。

    2.这个恶意代码的两个明显的基于主机特征是什么?

    硬编码使用文件名kerne132.dll
    硬编码使用一个的互斥量SADFHUHF

    3.这个程序的目的是什么?

    创建后门程序来接远程主机,且难以被删除。两个命令分别用于执行和休眠

    4.一旦这个恶意代码被安装,你如何移除它?

    难以删除,因为感染了系统上每一个使用kerne132.dll的exe文件。

    最好的方法是从备份系统中恢复或者留下这个恶意kerne132.dll文件并修改它,或者复制kernel32.dll为kerne132.dll进行替换,取消对所有PE文件的修改

    参考

    1.斯科尔斯基, 哈尼克. 恶意代码分析实战[M]. 电子工业出版社, 2014.

     
  • 相关阅读:
    python_levenshtein 的安装和使用
    接口测试困难
    pycharm修改windows的IP
    Excel读取,修改,新建
    appium混合应用的处理
    冒泡排序
    选择排序
    插入排序
    python中两种退出方式os._exit(),sys.exit()
    二分查找
  • 原文地址:https://www.cnblogs.com/bonelee/p/16749791.html
Copyright © 2020-2023  润新知