恶意样本分析初探
详细分析
首先静态分析该exe文件,看下导入函数,其中一个调用了 WININET.dll
中的 InternetGetConnectedState
函数,这个跟其他调用 kernel32.dll
中的函数相比,显得有些特殊。
查阅文档可知,这是一个 判断本地网络连接状态的函数,连接成功返回1,连接失败返回0
互联网连接状态功能 (wininet.h) - win32 应用程序|微软文档 (microsoft.com)
1 | BOOL InternetGetConnectedState( |
找到了main 函数,就从这里开始分析
main
函数位于401040
,调用了401000
处的函数
跳过去看看
上面一大堆没用的是编译器生成的,不要陷入其中
看到该区段的权限是 可读/可执行,并且调用了 InternetGetConnectedState
函数
不看流程图的话大概也可以看出这是一个 if 语句的汇编代码,cmp [ebp+var_4] ,0
,根据结果跳转到不同的分支
在 View->Graphs->Flow chart
可以查看流程图,相比较于空格的 流程图,更简洁明了
这里使用cmp指令对保存了返回结果的eax寄存器与0比较,然后使用 jz 指令控制执行流。上面我们提到,当 建立网络连接时,InternetGetConnectedState
函数返回1,否则返回0. 如果结果是1,0标志位(ZF)会被清除,jz跳转到1所在的false
分支,否则跳转到true
分支
下面分析这个位于 40105f
处的子过程
其实这里是 printf
函数,但是我们并没有看到一些printf函数的特征,这就需要去找一些其他的特征来证明这里是printf
函数
在调用这个函数之前,都向栈中push
了 一串 格式化字符串,并且结尾是 \n
换行符,因此可以推出这里调用的函数就是 printf
上面都是是根据静态分析得出的结论,真正的结果还是要实践检验一下
总结
这个恶意代码的主要功能就是检查是否存在 Internet
连接,存在输出1,否则输出0。
Peace.