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:哪些特征集可能检测到这个恶意代码(以及新的变种)?
文中分析的细节都是对的~