0x00 前言
因为工作中遇到僵木蠕比较多,所以打算学习一下恶意代码、样本分析。最近在看《恶意代码分析实战》发现内容都挺不错的,为了让自己印象深刻点所以就把课后作业做一下,正好学习一下 IDA Pro 的一些操作
0x01 实验
本次实验分析的是一个恶意 dll 文件
1、DllMain 的地址是什么
dllmain 函数是 dll 文件的入口文件,ida 打开文件,直接在左侧边栏通过 command + shift + f 搜索函数名,可以看到 dllmain 的入口地址为 .1000D02E
2、使用Imports窗口并浏览到gethostbyname
,导入函数定位到什么地址?
通过 ida 的 import 来查看导入函数,并进行搜索可以快速定位到 gethostbyname 函数的地址 100163CC
3、有多少函数调用了gethostbyname
?
可以在函数名上按 x 来查看交叉引用(当前函数在其他地方的调用&引用)
这里可以看到窗口种有一个 type 属性
type:p 就代表函数调用
type:r 代表读取权限
https://hex-rays.com/products/ida/support/idadoc/1305.shtml
所以就是 9 处调用
4、将精力集中在位于0x10001757
处的对gethostbyname
的调用,你能找出哪个DNS请求将被触发吗?
在 IDA pro 中可以通过按 g 来对特定地址进行跳转,同时也可以在上个问题中的交叉引用种找到该地址
可以看到在 10001757 处调用了 gethostbyname 这个函数
gethostbyname 需要传入 char 类型的变量,所以往上看
在上方可以看到将 off_10019040 变量存到寄存器 eax 种并通过 push 进行入栈,跟进查看 off_10019040
发现变量为 pics.praticalmalwareanalysis.com
,所以该恶意 dll 会向该域名发起 DNS 请求
5、IDA Pro识别了在0x10001656
处的子过程中的多少个局部变量?
通过 g 跳转到该地址,带负号的就是局部变量,一共 23 个
6、IDA Pro识别了在0x10001656
处的子过程中的多少个参数?
偏移为正的是参数
7、使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c
。它位于哪?
利用 ida pro 的 strings 配合搜索可以定位到字符串常量
地址为 10095B34
8、在引用cmd.exe /c
的代码所在的区域发生了什么?
按 x 查看交叉引用,点击之后可以直接来到 cmd.exe 的调用代码
切换到图视角先查看一下大概的逻辑,可以看到大致的流程是先进行命令的构造,然后会通过一些函数来判断,并且根据判断的结果选择对应的执行程序
直接 f5 进行反编译
可以看到在开头部分进行了一些基础变量的获取,通过调用 windows api 的一些函数来获取时间、目录等信息
接下来通过调用 sprintf 来进行字符串格式化
查看字符串变量发现该段信息疑似为与 C&C 通信的心跳包
然后通过调用了windows api 的 CreatePipe 建立了一个与父进程通信的管道(个人感觉类似 python 中的 subprocess)应该是通过创建子进程来进行命令执行
然后通过调用了 GetSystemDirectoryA 获取系统目录并将结果追加到 Destination 变量,然后 while 一直循环读取,并对数据进行解析处理
然后会根据解析的结果跳转到 LABEL_21 处,这里主要是处理 C&C 的不同类型的命令
通过 memcmp 函数来进行比较根据对应的字符串来调用对应的函数,其实就是各种恶意模块
最后
本文其实并没有将题目做完 8/21 不过之前目的主要是通过题目来学习一下 ida 的使用所以暂时就先做这些题目,后续感觉有需要了我再进行完善
图片加载不出来呀