恶意代码分析实战 — Lab 19-01

首先idapro载入bin文件,默认识别的是data数据

按下C键解析为code代码

大量的inc ecx自增操作,下拉直到0x200地址处,将ecx置零,然后设置cx循环次数,然后jmp跳转

调用sub_208

Sub_208函数体主要有一个循环结构,用于shellcode解码

Pos esi

Push esi

之后,esi的值为call后程序返回地址,即下一条指令地址0x224

首先lodsb指令,将esi指向的地址为0x224的值0x49传给dl, 且esi ++

然后减去0x41,之后左移4位

esi = esi + 0x1 = [0x225] = 0x4A

然后al = esi = 0x4A,减去0x41,之后加上dl值

atosb指令 [edi] = [0x224] = al,  且edi++

ecx计数器减一,进入下一个循环

根据以上分析编写解码脚本

#include <idc.idc>
static main()
{
    auto ea = ScreenEA(),edx,dl,al,esi,i,result,j=0;
    for(i=0x0;i<0x18D;i=i+2)
    {
        esi = Byte(ea+i);       
        dl = esi-0x41;        
        dl = dl<<4;
        esi = Byte(ea+i+1); 
        al = esi-0x41;
        result = dl+al;   
        PatchByte(ea+j, result); 
        j = j+1;  
    }
}

在地址0x224开始解码

使用OD进行动态调试,首先idapro载入exe程序,找到入口main函数地址0x401010

OD中跳转到此地址

然后在此调用的返回地址retn处下断点

运行,然后跳转来到shellcode位置0x12FB80处

设置断点为retn,执行后OD将解码出code

使用scdbg工具来查看程序调用的api,其通过模拟执行和hook多个api来探测shellcode的行为。

通过分析,可以猜测文件的部分行为:从站点处下载annoy_user.exe文件,并复制到system32下重命名为1.exe,调用winexec执行此文件等

您可能还喜欢...