恶意样本分析初探
详细分析
首先静态分析该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.