Q
Lab9-1:使用IDA Pro和OllyDbg分析恶意文件Lab9-1.exe,回答以下问题。
- 如何让这个恶意代码安装自身?
- 这个恶意代码的命令行选项是什么?它要求的密码是什么?
- 如何利用OllyDbg永久修补这个恶意代码,使其不需要指定的命令行密码?
- 这个恶意代码基于系统的特征是什么?
- 这个恶意代码通过网络命令执行了哪些不同操作?
- 这个恶意代码是否有网络特征?
A
Lab09-01
使用IDA Pro打开Lab09-01.exe文件,查看main函数的地址,发现main函数位于0x00402AF0
.
首先会检查参数的个数是不是1。
check_argc.png如果只有一个参数,就会检查注册表是否有SOFTWARE\Microsoft \XPS
,执行删除自身的操作。
其他逻辑先不细看,先使用OllyDbg动态调试。(这里需要注意一下,以管理员权限打开OD,不然之后调试逻辑可能有问题,我是从后面穿越过来的。)
call_main.pngF8到 CALL 00402AF0
处,这里是对主函数的调用,F7步入,继续单步执行。0x00402AFD
处查看参数个数是否为1。
继续执行到0x00401000
处,该函数检查注册表。
步入0x402410
处的函数,会在0x004024EE
处调用ShellExecuteA
参数是/c del C:\Users\doinb\Desktop\BINARY~1\CHC9F5~1\Lab09-01.exe >> NUL
执行删除自身的操作,这和静态分析的结果一致。
此时由于参数不正确,恶意代码只是删除自身,难以继续分析,可以继续使用IDA Pro 找到合适的执行流程。
args.png可以看到参数主要有以下几个可选项
- -in
- -re
- -c
- -cc
程序还会检查最后一个参数是不是合法,跟进sub_402510
函数,此函数会检查最后一个参数是不是abcd,相当于密码,检查失败程序也不会正常执行。
第一种方式我们可以直接逆向处sub_402510
的逻辑,输入正确的密码,第二种思路,我们可以改变0x00402B38
处的逻辑,无论sub_402510
的执行结果为什么,直接跳到loc_402B3F
函数处。
将此处的JNZ
指令修改为JMP
指令。
修改成功后,可以直接跳到00402B3F
位置。
可以修改指令绕过检查密码的函数,输入-in abcde
后继续执行,执行到00402600
位置。
BOOL __cdecl sub_402600(LPCSTR lpServiceName)
{
SC_HANDLE hService; // [esp+Ch] [ebp-1408h]
char v3[1024]; // [esp+10h] [ebp-1404h] BYREF
CHAR Filename[1024]; // [esp+410h] [ebp-1004h] BYREF
CHAR DisplayName[1024]; // [esp+810h] [ebp-C04h] BYREF
CHAR BinaryPathName[1024]; // [esp+C10h] [ebp-804h] BYREF
SC_HANDLE hSCManager; // [esp+1010h] [ebp-404h]
CHAR Src[1024]; // [esp+1014h] [ebp-400h] BYREF
if ( sub_4025B0(v3) )
return 1;
strcpy(Src, aSystemrootSyst); // %SYSTEMROOT%\system32\
strcat(Src, v3);
strcat(Src, aExe); // .exe
hSCManager = OpenSCManagerA(0, 0, 0xF003Fu);
if ( !hSCManager )
return 1;
hService = OpenServiceA(hSCManager, lpServiceName, 0xF01FFu);
if ( hService )
{
if ( !ChangeServiceConfigA(hService, 0xFFFFFFFF, 2u, 0xFFFFFFFF, BinaryPathName, 0, 0, 0, 0, 0, 0) )
{
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager);
return 1;
}
}
else
{
strcpy(DisplayName, lpServiceName);
strcat(DisplayName, aManagerService); // Manager Service
hService = CreateServiceA(hSCManager, lpServiceName, DisplayName, 0xF01FFu, 0x20u, 2u, 1u, Src, 0, 0, 0, 0, 0);
if ( !hService )
{
CloseServiceHandle(hSCManager);
return 1;
}
}
CloseServiceHandle(hService);
CloseServiceHandle(hSCManager);
if ( !ExpandEnvironmentStringsA(Src, BinaryPathName, 0x400u) )
return 1;
if ( !GetModuleFileNameA(0, Filename, 0x400u) )
return 1;
if ( !CopyFileA(Filename, BinaryPathName, 0) )
return 1;
if ( sub_4015B0(BinaryPathName) )
return 1; // ups
return sub_401070(aUps, aHttpWwwPractic, a80, a60) != 0;// http://www.practicalmalwareanalysis.com
}
运行到函数OpenServiceA()
函数处,lpServiceName
参数为Lab09-01
.
继续执行至0x004028A1
处,参数为C:\Users\***\Desktop\BinaryCollection\Chapter_9L\Lab09-01.exe
和C:\WINDOWS\system32\Lab09-01.exe
,作用为复制自身到系统目录下。
继续执行至0x004028B9
处,关注函数sub_4015B0
和sub_4014E0
函数参数为C:\WINDOWS\system32\Lab09-01.exe
和C:\WINDOWS\system32\Kernel32.dll
,目的是将修改Lab09-01.exe
的时间戳,此种技术被称为timestomping,ATT&CK中解释如下。
https://attack.mitre.org/techniques/T1070/006/
Adversaries may modify file time attributes to hide new or changes to existing files. Timestomping is a technique that modifies the timestamps of a file (the modify, access, create, and change times), often to mimic files that are in the same folder. This is done, for example, on files that have been modified or created by the adversary so that they do not appear conspicuous to forensic investigators or file analysis tools.
Timestomping may be used along with file name Masquerading to hide malware and tools.[1]
can.png
继续执行代码到0x004028E0
处。
调用函数sub_401070
,参数为ups,http://www.practicalmalwareanalysis.com,80,60
(注意压栈顺序)
继续执行到0x004011D5
处,调用函数RegSetValueExA()
函数处,进入函数,这时EDX
处保存的就是lpdata位置。这是以ups
开头的字符串,就是把这个恶意domain和port的配置文件写入到了注册表中 HKLM\SOFTWARE\\Microsoft \\XPS
位置,名为Configuration
值为ups.http://www.practicalmalwareanalysis.com.80.60
,将配置信息持久化。右键EDX
,选择Follow in Dump
转储文件。
之后就会在16进制视图上显示。
dump3.png命令行参数-in
的行为分析结束,总结一下:
- 创建服务
Lab09-01
- 复制文件到
C:\WINDOWS\system32\Lab09-01.exe
- Timestomping技术修改时间戳
- 创建注册表项
HKLM\SOFTWARE\\Microsoft \\XPS
,名为Configuration
值为ups.http://www.practicalmalwareanalysis.com.80.60
。
继续分析其他的命令行选项。
输入参数-re abcd
运行函数到0x00402C18
处,调用函数00402900
该函数主要作用为删除服务。删除系统目录下的文件。C:\WINDOWS\system32\Lab09-01.exe
,总体上来说-re
参数执行的行为和-in
参数相反。
以-cc abcd
参数运行文件。调用sub_401280
。
参数如下
1280_argv.png v12.png继续运行至0x00402D60
位置,call 00402E7E
,参数如下,格式化字符串,并打印。
以参数-c
运行程序比较特殊,要检查是否有七个参数,所以使用以下命令运行
-c AA BB CC DD abcd
,这里参数看似是六个,实际上文件名也是参数,这时一共有七个参数argc=7
,argv=(Lab09-01, -c, AA, BB, CC, DD, abcd)
。
运行程序跟进至0x00402CC5
处,关注函数sub_401070
,参数如下
继续运行至RegSetValueExA
处,查看参数
这个地址上保存的就是RegSetValueExA
函数的参数lpData
,之后右键选择Follow in Dump
在16进制窗口查看。
所以这个函数就是把参数用.
拼接,然后重新设置注册表的键。
后门分析
继续查看strings页面,发现有网络连接和疑似后门字符串,查看引用。
back.png在函数sub_402020
发现对后门字符串的引用,对HTTP/1.0\r\n\r\n
的直接引用在sub_401AF0
处,继续查看引用,看到函数sub_401E60
继续查看引用发现到了函数sub_402020
,接下来就重点分析sub_402020
函数。
支持的命令如下
命令 | 实现地址 | 行为 |
---|---|---|
SLEEP | 0x402076 | 睡眠 |
UPLOAD | 0x4019E0 | 通过端口port连接远程主机并且读取内容,在本地文件创建file |
Download | 0x401870 | 读取文件file并通过端口port发送到远程主机 |
CMD | 0x402268 | 运行command命令 |
NOTHING | 0x402356 | 无操作 |
实现地址除了UPLOAD
和Download
可以直接在伪代码里面看到,其他可以在图形模式里清晰看到。(_strncmp以后jnz的跳转)
回答:
1、可以使用命令行-in abcd
也patch程序,跳过密码验证流程。
2、有四个可选的命令行和密码abcd
3、将0x00402B38
处的jnz
指令改为jmp
指令
4、创建了注册表项HKLM\SOFTWARE\Microsoft \XPS\Configuration
会在此写配置ups.http://www.practicalmalwareanalysis.com.80.60
,相关配置信息之间使用.
连接,在使用-c
参数重新修改配置信息的时候,也会修改注册表此处的信息。
5、执行了上述分析的五个操作,不再赘述
6、恶意代码向http://www.practicalmalwareanalysis.com
发出GET请求。
网友评论