工控题目练习IDA(静态)之 恶意软件后门分析

工程师的笔记本上发现了恶意软件,经排查是一款著名针对工业领域的病毒,溯源分析远控样本文件,确认远程C&C连接地址

题目分析

首先确定文件类型:是个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+11o
.rdata:00403218                 text "UTF-16LE", '10.15.1.69:3128',0
.rdata:00403238 ; const WCHAR pwszVerb
.rdata:00403238 pwszVerb:                               ; DATA XREF: sub_40204D+60o
.rdata:00403238                 text "UTF-16LE", 'POST',0
.rdata:00403242                 align 4
.rdata:00403244 ; const WCHAR pswzServerName
.rdata:00403244 pswzServerName:                         ; DATA XREF: sub_402174+Eo
.rdata:00403244                 text "UTF-16LE", '5.39.218.152',0
.rdata:0040325E                 align 10h

找到了一个外网的ip地址5.39.218.152,即为flag

总结

本题比较简单,思路就是通过关键的导入函数来找到所需的参数即可。但是未必所有的逆向都会这样,因为软件的实现的时未必会直接调用网络请求的库函数,可能封装到自己的某些dll中,所以真实工程的分析时往往不会这么简单。