401000是典型的BASE64

4010BB:

发现这个函数就是调用了BASE64对字符串进行加密隐藏

4011A3:

然后根据v3的值是否为0:

根据msdn:

Downloads data into the Internet cache and returns the file name of the cache location for retrieving the bits.

HRESULT的返回有三种可能: <dl> <dt> E_FAIL </dt> <dd> The operation failed. </dd> <dt> E_OUTOFMEMORY </dt> <dd> The buffer length is invalid or there was insufficient memory to complete the operation. </dd> <dt> S_OK </dt> <dd> The operation succeeded. </dd> </dl>

下载失败时返回E_FAIL,当缓冲区长度不够时返回E_OUTOFMEMORY,成功返回S_OK

main:

这里给了我们动态调试,得到字符串名称的机会~

GetCurrentHwProfile:得到当前硬件设备环境的结构体指针

BOOL WINAPI GetCurrentHwProfile(
  _Out_ LPHW_PROFILE_INFO lpHwProfileInfo
);

看到了这个:


GetUserName:取得当前用户的名字

来单步调试一下看这些API返回了什么

最终的数据块都在堆栈里,这个样子

4011A3下断点分析:



一般都是F8到call的前后,注意函数参数,以及堆栈里的返回值


代码分析完了,问题一个都回答不来。。。直接看书后的题解了

问题1:代码使用了哪些网络库?它们的优势是什么?

程序中包含URLDownloadToCacheFile函数,其使用的是COM接口。当恶意代码使用COM接口时,HTTP请求中的大部分内容都来自Windows内部,因此无法有效地使用网络特征进行针对性检测。

问题2:用于构建网络信令的信息源元素是什么,什么样的条件会引起信令的改变

信息源元素是主机GUID与用户名的一部分。GUID对于任何主机操作系统都是唯一的,用户名会根据登陆系统的用户而改变。


问题3:为什么攻击者可能对嵌入在网络信令中的信息感兴趣

跟踪运行下载器的特定主机以及特定用户

问题4:是否使用了标准的Base64编码?

不是标准的~

填充的时候不是 “=”而是 “a”

问题5:恶意代码的主要目的是什么?

作为控手的框架,可以用来下载并且运行其他的代码

问题6:使用网络特征可能有效探测到恶意代码通信中的什么元素?

域名字符串、base64、PNG文件名为单个字符

字符串在连接的时候有冒号和减号作为分隔符

从BASE64的原理可知:3个字符转换为4个,正好原字符串中冒号":"都出现在3的倍数的位置

所以,4的倍数的位置前几个都是6!

问题7:分析者尝试为这个恶意代码开发这个特征时,可能会犯什么错误


问题8:哪些特征集可能检测到这个恶意代码(以及新的变种)?

文中分析的细节都是对的~