通过分析代码结构来理解一个恶意样本的总体功能
1.基础静态分析
2.基础动态分析
3.高级静态分析
Lab06-01.exe
导入表:wininet.dll、kernel32.net
导入函数:InternetGetConnectedState
字符串值:Error 1.1: No Internet、Success: Internet Connection
从导入库、导入函数、以及字符串可以看出该样本存在检测网络状态的功能
运行样本后,通过联网和断网两种情景样本打印出不同输出,基本可以确定存在网络状态检测功能
通过一个if-else语句,根据不同网络状态返回值来打印不同的字符串,并且根据基础动态分析的反馈可以判断sub_40105F函数为printf函数
导入函数
InternetOpenUrlA
InternetCloseHandle
InternetReadFile
InternetGetConnectedState
InternetOpenA
字符串
http://www.practicalmalwareanalysis.com/cc.htm
Error 1.1: No Internet
Success: Internet Connection
Error 2.3: Fail to get command
Error 2.2: Fail to ReadFile
Error 2.1: Fail to OpenUrl
Internet Explorer 7.5/pma
Success: Parsed command is %c
从导入函数和字符串可以看出,这个样本应该对网页发起请求,并且可能存在解析网页来获取命令的操作
根据返回的信息,是访问url失败,手动在浏览器访问该网页缺失已经实效
跟进main函数分析代码得到只有跟进上面的两个if语句内部,即满足这两个if语句的成立条件才可以打印出'Success: Parsed command is %c'
,而如果不满足条件就会退出,接着我们跟进sub_401000函数,分析如果满足第一个if语句的跳转条件
直接跟进sub_401000函数,和实例1的功能一样,需要联网才可以返回为1,即满足一个if成立条件
直接跟进第二函数sub_401040,分析得到需要打开 http://www.practicalmalwareanalysis.com/cc.htm 网页进入下一层if语句,接着读取到网页文件才可以进入最后一层if语句,在最后满足读取文件内容以<!--
开头就可以将网页的第5个字符返回。
最终满足两个if语句的成立条件,打印出Success: Parsed command is %c
根据MSDN上的函数介绍,我们知道 InternetReadFile函数是向lpBuffer这个数组内写入数据的,大小有dwNumberOfBytesToRead决定
在分析最后一个条件判断时,ida并没有识别出这个函数的数组长度,所以后面三个比较都是用变量var_20F等来表示的。
手动修复数组大小为512字节
这样IDA就可以识别出这个函数的其他参数并且给其命名,相应的伪代码也可以识别出位数组的元素了