学习笔记-第五章 恶意代码分析实战
第五章
1.加载可执行文件。可以选择加载方式。 使用二进制文件进行反汇编等等。因为恶意代码有时
会带有shellcode,其他数据,加密参数,甚至在合法的PE文件中带有可执行文件,并且包含这
些附加数据的恶意代码在Windows上运行或被加载到IDA Pro时,它并不会被加载到内存。
2.选择合适的反汇编窗口模式
<1>图形模式,图形模式更容易看清流程,对于每一个跳转比较清除
<2>文本模式,是传统的视图模式,并且必须使用它查看一个二进制的数据区。
对分析有用的窗口
函数窗口 列举可执行文件中的所有函数,并显示每个函数的长度。 L指明是库函数,
名字窗口 列举每个地址的名字,函数,命名代码,命名数据和字符串
字符串窗口 显示所有的字符串。默认只显示长度超过5个字符的ASCII字符,可以修改属性
导入表窗口 列举一个文件所有的导入函数
导出表窗口 列举一个文件的所有导出函数。分析dll时这个窗口很有用。
结构窗口 列举所有活跃数据结构的布局。这个窗口也提供用自己创建的数据结构作为内存布局模板的能力
3.搜索
从顶部的菜单选择搜索
search->Next Code ,移动光标到包含你所指定的指令的下一个位置。
search->Text,在整个反汇编窗口中搜索一个指定的字符串。
search->sequence of bytes,在十六进制视图窗口中对一个特定字节序列执行二进制搜索。
4.使用交叉引用
交叉引用,在IDA Pro中被成为xref,可以告诉你一个函数在何处被调用,或者一个字符串在何处被使用,
如果你识别了一个有用的函数,并且想要知道它在被调用时用了那些参数,你可以使用一个交叉引用,
来快速浏览这些参数被放在栈上的什么位置。基于交叉引用关系也可以生成有趣的图形。
代码交叉引用
数据交叉引用
5.分析函数
给定已经分析的函数,变量有意义的变量名字。
6.使用图形工作。
7.增强反汇编。
IDA Pro允许修改它的反汇编。 IDA Pro没有撤销特性,所以做修改时要当心。
<1>重命名位置
<2>注释
<3>格式化操作数。 例如62h可以修改为八进制的 142o,二进制1100010b或者ASCII字符b。
<4>使用命名的常量
<5>重新定义代码和数据
8.使用插件扩展IDA
课后作业
实验软件:IDA Pro
只用IDA pro分析在文件lab05-01.dll中发现的恶意代码。这个实验的目的是给你一个使用ida pro动手的经验,如果你已经用ida pro工作过,你可以选择忽略这些问题,而将精力集中在****恶意代码上。
问题
- DLLMain的地址是什么?
打开IDA进入了入口地址
图模式也可以更改选项查看入口地址
2.使用imports窗口并浏览到gethostbyname,导入函数定位在什么地址?
进入到imports窗口,双击gethostbyname就可以看到定位到什么地址
idata:0x1001 63CC的地址
双击查看gethostbyname
3.有多少函数调用了gethostbyname?
通过查看上面的交叉引用发现有5个函数调用了。
4.将精力集中在位于0x1000 1757处的对gethostbyname的调用,你能找出那个dns请求将被触发吗?
发现一串字符串,+0dH的偏移量,指向网址字符串的第一个字符
查看内容找到了请求的dns。
5.ida pro识别了在0x1000 1656处的子过程中的多少局部变量?
按G跳转到指定位置
以var,初始为负值表示局部变量
6.ida pro识别了在0x1000 1656处的子过程有多少个参数?
值为正表示参数
发现有一个参数
7.使用strings窗口,来在反汇编中定位字符串\cmd.exe /c,它位于哪?
view 打开strings爽口
xdoors_d:1009 5B34 位置, 双击字符串的上箭头查看引用
8.在引用\cmd.exe /c的代码所在的区域发生了什么?
查看附近代码区域的程序。
向上看 查看到this remote shell session 开启远程会话
向下看 cd,recv,quit… 猜测可能开启远程会话
9.在同样的区域,在0x1001 01C8处,看起来好像dowrd_1008 E5C4是一个全局变量,它帮助决定走那条路径。那恶意代码是如何设置dword_1008 E5C4的呢?(提示:使用dword_1008 E5C4的交叉引用)
按g跳转
对于字符也可以使用交叉引用, 地址 ctrl+x
r 读取,w写入。 查找到赋值
查看到 getVersionExA Msdn platform 和2比较判断是不是win32-nt平台
10.在位于0x1000 FF58处的子过程中的几百行指令中,一系列使用memcmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
相等发现 打开了注册表, worktime, 分配内存,send
11.PSLTST导出函数做了什么?
查看导出表,
按下空格转化到图形模式
判断是不是win32-NT平台。
majorversion 大于5表示是 vista 以上的版本
esc返回上一个界面。
createToolHelp32Snapshot 可以获取我们系统中的进程列表
恶意进程 获取所有进程发走,匹配到某一个特定的进程发走
可能发送进程列表,或者寻找特定的进程发送
12.使用图模式来绘制出对sub_1000 4E79的交叉引用图。当进入这个函数时,那个API函数可以被调用?仅仅基于这些API函数,你会如何重命名这个函数?
view->graphs->user xrefs chart查看弹出的图
获取系统默认的语言,sprintf,strlen,send
获取操作系统的语言然后发送, 可以重命名一下,便于识别
13.DLLMain直接调用了多少个Windowss API?多少个深度为2时被调用?
弹出交叉引用图 depth=2
14.在0x1000 1358处,有一个对sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用,那顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
先上查看eax的值。 将"…30"赋值给eax,ascii转化成数值
303E8H ->301000
休眠30s
15.在0x1000 1701处是一个对socket的调用。它的三个参数是什么?
三个参数 2 1 6
16.使用MSDN页面的socket和IDA pro中的命名符号变量,你能使参数更加有意义吗?在你应用了修改之后,参数是什么?
msdn 查看socket ,af==2代表 AF_INET 右键,use symbool
转化之后便于理解和分析
17.搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?
search-> sequence of bytes 查看in
转化成字符串,查看交叉引用,有理由相信说判断是不是VMW虚拟机
发现三个函数调用
查看发现, 找到了虚拟机,安装结束。
18.将你的光标跳转到0x1001 D988处,你发现了什么?
查看一堆乱码
19.如果你安装了IDA python插件(包括IDA pro的商业版本的插件),运行Lab05-01.py,一个本书中随恶意代码提供的IDA pro python脚本,(确定光标是在0x1001 D988处)在你运行这个脚本后发生了什么?
python脚本配置,比较麻烦。
字节取出乱码,和0x55异或,赋值。
可以使用 idc脚本。
#include <idc.idc>
static main()
{
auto ea=ScreenEA(),b,i,decode_byte;
for(i =0x00;i<=0x50;i++)
{
b=Byte(ea+i);
decoe_byte=b^0x55;
PatchByte(ea+i,decode_byte);
}
}
光标放在起始位置,
screaip file->open
xdoor is this backdoor,string decode for analysis lab
20.将光标放在同一个位置,你如何将这个数据转成一个单一的ASCII字符串?
答案见问题19
21.使用一个文本编译器打开这个脚本,它是如何工作的?
答案见问题19