前言
模仿是入门的快速学习方法,阅读汇编代码是逆向分析的基本功,故本文选择网上师傅现成的分析文章(参考资料[1])中的示例进行分析参考学习(先自己分析,遇到问题去参考),这里记录下自己的分析学习过程
样本地址:https://app.any.run/tasks/ba68e2aa-2083-48ad-ac3f-34dcc9e4446b
由于没目前准备恶意代码分析环境,所以这里也是进行纯静态分析
分析工具:IDA
分析目标:
- 初见Downloader类型恶意程序,理解样本的功能
- 练习阅读反汇编
分析
根据之前从《恶意代码分析实战》记的笔记:对PE文件进行分析,可以从这几个角度入手:
- 字符串:有几率可以获得程序功能相关的提示
- 查壳:查看程序是否有进行加密加壳压缩等
- PE文件格式:从PE头中可以获取程序的一些信息,例如编译信息、空间要求等
- 链接库和函数:从程序的链接库中可以初步推断程序的功能,查看DLL,导入表
分析PE格式与查壳
无壳,编译时间是2002-05-09,这个程序应该就是个初学练习使用的古老样本,是个GUI程序
分析字符串
除了调用的函数名和动态链接库之外,字符串里包含了一些关键信息:
网络相关:dload.ipbill.com
的网址,还有个URI:http://dload.ipbill.com/del/cmb_211826.exe
,还有HTTP请求头的字符串
文件相关:c:\\dialler.exe
可以认为结合这些内容可以初步猜测,该程序会从网站上下载一个文件cmb_211826.exe
,保存到C:\\dialler.exe
分析链接库和函数
可以看到,这里有文件操作相关API:WriteFile和CreateFile,是写入文件的,网络相关函数,用来下载
还有个CreateThread,应该用来创建功能线程使用
ShellExecuteA,用来执行下载的程序
这是个GUI程序,所以还有一堆GUI相关的函数,不过无关紧要
到这里已经可以猜测个大概了,这个程序的功能就是从网上下载一个exe执行
代码分析
定位到关键函数
首先是程序OEP:调用主函数(winMain是4个参数),然后执行完之后退出进程,参数是4个0
进入主程序sub_401499:功能很简单,注册窗口类,创建窗口,创建成功就进入消息循环,否则就退出程序,这一层没啥恶意行为出现,但是调用了两个自写函数
首先是第一个自写函数sub_401437功能就是注册窗口类,然后就返回
然后下一个自写函数:sub_4013A3,这个函数首先是查询了一个系统参数,然后调用CreateWindowExA去创建窗口,如果创建失败就返回,创建成功就继续走
窗口创建成功之后,调用ShowWindow显示窗口,然后调用CreateThread创建了一个线程,线程函数是这个StartAddress,到这里都没啥问题,就是这个线程很可疑
下载行为
接下来查看这个线程函数:
首先调用了一个自写函数sub_401068,功能是从指定URI下载内容,保存到缓冲区
进去这个子函数看看:刚开始是个无意义的操作,应该是延时目的
紧接着开始初始化Windows的Socket,并初始化socket连接用的参数,端口地址,网络地址
然后去判断这个网络地址是否存活,成功了就向下跳转
再往下就是发送数据了,发送一个GET的HTTP请求,请求的地址是那个exe的URI
最后接收服务器返回的数据,并将数据保存参数里,接收的长度也保存进来
创建文件
关键函数刚刚接收完了网络上传输来的文件,往下走就是这里,这里的功能是定位接收缓冲区里需要写入到文件的位置
定位完要写入的位置之后,紧接着就是创建文件和写入文件了,写入位置是C:\\dialler.exe
执行文件
最后调用ShellExecuteA打开这个文件,参数是REFID,工作目录是C:\
总结
这个样本的类型是Downloader,功能是:从网络下载恶意程序到本地进行执行
这个文件的文件特征是C:\\dialler.exe
,网络特征是会访问http://dload.ipbill.com/del/cmb_211826.exe
这个URI
很简单的一次逆向过程,这也是很简单的程序,作为反汇编阅读的练习还挺不错,最后我看了下这个师傅的分析文章,分析的非常详细,如果基础不是很好,建议好好阅读学习
参考资料
- [1] 从"新"开始学习恶意代码分析——静态分析 - 安全客,安全资讯平台 (anquanke.com)
- [2] 《恶意代码分析实战》