工程师的笔记本上发现了恶意软件,经排查是一款著名针对工业领域的病毒,溯源分析远控样本文件,确认远程C&C连接地址
-
题目附件: 恶意软件后门分析
-
flag: 5.39.218.152
题目分析
首先确定文件类型:是个window下的pe文件
➜ 恶意软件后门分析 file question_1563938215_f67b65b9346ee75a26f491b70bf6091b\ \(1\)
question_1563938215_f67b65b9346ee75a26f491b70bf6091b (1): PE32 executable (GUI) Intel 80386, for MS Windows
那么确定远程连接地址可以想到可能会利用一些网络函数
导入函数
利用IDA观察导入函数表查看有没有类似网络的函数:
0040311C WinHttpOpen WINHTTP
交叉引用找过去:
char *__cdecl sub_40204D(LPCWSTR pswzServerName, INTERNET_PORT nServerPort)
{
char *v2; // edi
const WCHAR *v3; // eax
void *v4; // eax
void *v5; // esi
void *v6; // ecx
DWORD v7; // eax
void *v8; // ebx
int v9; // eax
DWORD v10; // esi
void *hInternet; // [esp+8h] [ebp-20h]
void *v13; // [esp+Ch] [ebp-1Ch]
char *v14; // [esp+10h] [ebp-18h]
DWORD dwBufferLength; // [esp+18h] [ebp-10h]
DWORD dwNumberOfBytesRead; // [esp+1Ch] [ebp-Ch]
int Buffer; // [esp+20h] [ebp-8h]
DWORD dwNumberOfBytesToRead; // [esp+24h] [ebp-4h]
v2 = 0;
v3 = (const WCHAR *)sub_401DCE();
v4 = WinHttpOpen(v3, 3u, L"10.15.1.69:3128", 0, 0);
v5 = v4;
看到了一个ip地址很可以,但是是个内网地址,点进去看看这个字符串附近:
.rdata:00403218 ; const WCHAR pszProxyW
.rdata:00403218 pszProxyW: ; DATA XREF: sub_40204D+11↑o
.rdata:00403218 text "UTF-16LE", '10.15.1.69:3128',0
.rdata:00403238 ; const WCHAR pwszVerb
.rdata:00403238 pwszVerb: ; DATA XREF: sub_40204D+60↑o
.rdata:00403238 text "UTF-16LE", 'POST',0
.rdata:00403242 align 4
.rdata:00403244 ; const WCHAR pswzServerName
.rdata:00403244 pswzServerName: ; DATA XREF: sub_402174+E↑o
.rdata:00403244 text "UTF-16LE", '5.39.218.152',0
.rdata:0040325E align 10h
找到了一个外网的ip地址5.39.218.152,即为flag
总结
本题比较简单,思路就是通过关键的导入函数来找到所需的参数即可。但是未必所有的逆向都会这样,因为软件的实现的时未必会直接调用网络请求的库函数,可能封装到自己的某些dll中,所以真实工程的分析时往往不会这么简单。