1.对分析有用的窗口
函数窗口 |
Functions window 位于左半部分 |
列举可执行文件中的所有函数,可以在众多函数中过滤出想要的函数。这个窗口也对每一个函数关联了一些标志(F L S等),这其中最有用的是L,指明是库函数。 |
字符串窗口 |
Strings window (Shift + F12) |
显示所有的字符串,可以右键Setup来修改它的属性 |
导入表窗口 |
Imports window |
列举一个文件的所有导入函数 |
导出表窗口 |
Exports window |
列举一个文件的所有导出函数,分析DLL文件时很有用 |
结构窗口 |
Structures |
列举所有活跃数据结构的布局。这个窗口也提供用自己创建的数据结构作为内存布局模板的能力 |
2.常用快捷键
❶.交叉引用 ctrl+x 或者 x,可以看到函数在哪里被调用
❷.跳转 g ,直接跳转到该地址
❸.Search列表快捷键
next code:移动光标到包含你所指定的指令的下一个位置
text:在整个反汇编窗口中搜索一个指定的字符串
Sequence of bytes:在十六进制视图窗口中对一个特定字节序列执行二进制搜索
❹.数据操作
将十六进制数据转换成十进制 H
将十六进制数据转换成二进制 B
将十六进制数据转换成字符串 R
实验:Lab5-1
使用IDA pro分析文件Lab05-01.dll
问题:(1-10)
1.DllMain的地址是什么?
在IDA pro右侧的Functions window 查找DllMain函数
按空格进入汇编窗口,即可看到函数地址
2.使用Imports窗口并浏览到gethostbyname,导入函数定位到什么地址?
进入Imports window,并按ctrl+f进行搜索gethostbyname
双击跳到对应位置获取地址
3.有多少函数调用来gethostbyname?
函数交叉引用,p是引用,r是读取,必须先读取,再引用。引用了9次,被5个函数调用。
4.将精力集中在位于0x10001757处的对gethostbyname的调用,你能找出那个DNS请求将被触发吗?
在汇编窗口按g,跳转到对应位置
根据函数的传参规则,一般将eax寄存器存的值作为参数传给函数,于是我们在这条指令上面寻找对eax的赋值语句
其中off_10019040对应的值为
又因为将off_10019040赋值给eax之后,还进行来add eax,0Dh 此处是对地址进行加法,则c语言的指针加法就相当于从该字符串的第十三位开始,于是为pics.praticalmalwareanalysis.com
5.IDA Pro识别了在0x10001656处的子过程中的多少个局部变量?
相同方式跳转到对应的地址
这里为负值的均为局部变量23个
6.IDA Pro识别了在0x10001656处的子过程中的多少个参数?
由上图的函数所给可以得到参数为 lpThreadParameter,为1个
7.使用Strings窗口,来在反汇编中定位字符串\cmd.exe /c。 它位于哪?
在Strings window 使用搜索功能
双击跟随过去
位置:xdoors_d:10095B34
然后点击上图位置就可以跳转到对应函数
9.在引用\cmd.exe /c的代码所在的区域发生了什么?
在上图选择位置F5
查看这个参数
发现了对应有 remote shell session
应该是个远程shell会话函数
9.在同样的区域,在0x100101C8处,看起来好像dword_1008E5C4是一个全局变量,它帮助决定走哪条路径。那恶意代码是如何设置dword_1008E5C4的呢?(提示:使用dword_1008E5C4的交叉引用。)
使用交叉引用 x
根据type可以确定有一处是w 写入,被修改,双击进入
因为是把eax的值赋给dword_1008E5c4,因为eax是存返回值的,所以我们需要看上面的call指令的函数
F5反汇编
其中GetVersionExA获取版本信息
判断该系统是否为WinNT系统。
然后上面的setz al指令
setz:当ZF标志被设定时,AL寄存器设1
当当前系统为winNT系统时,cmp指令返回ZF为1,于是setz 指令根据ZF的值将AL设为1,所以sub_10003694的返回值是1,最后的dword_1008E5C4的值就被赋成了1,所以这个全局变量在程序运行的时候一直保持的是1
10.在位于0x1000FF58处的子过程中的几百行指令中,一系列使用memecmp来比较字符串的比较。如果对robotwork的字符串比较是成功的(当memcmp返回0),会发生什么?
使用g跳转到该地址
F5反汇编,然后找到robotwork
当memcmp返回值为0,那么会执行这条语句,然后我们进入下面这个函数
看汇编代码比较直观
看一下loc_10005309
有个call函数,继续跟进,直接看反汇编代码
发现使用了send函数,这里我们可以推断出,通过获取我们的注册表信息,然后使用send函数发送给某地址。
11.PSLIST导出函数做了什么?
在Exports window 搜索PSLIST函数
双击跟进
进入sub_100036C3
根据汇编代码可以看出,是获取对应操作系统版本
12.使用图模式来绘制出对sub_10004E79的交叉引用图。当进入这个函数时,那个API函数可能被调用?仅仅基于这些API函数,你会如何重命名这个函数?
在函数窗口找到该函数
然后
根据其使用的函数可以知道获取使用的语言ID,即可判断使用的是什么语言,并且使用了send函数,可以重命名为
send_SystemLangID
在函数名处右键—>rename即可重命名
13.DLLMain直接调用了多少个Windows API? 多少个在深度为2时被调用?
和上题一样,但需要把深度修改为2即可
14.在0x10001358处,有一个对Sleep(一个使用一个包含要睡眠的毫秒数的参数的API函数)的调用。顺着代码向后看,如果这段代码执行,这个程序会睡眠多久?
跳转到该地址
其中这几条指令决定了eax的值,即传入Sleep函数的参数的值
这里我们可以知道off_10019020的值
用该地址加上0x0D,就是偏移了0x0D,指向30,然后atoi函数将字符串转换为int,然后使用30 * 0x3E8(十进制为1000),即30000毫秒,为30秒
15.在0x10001701处是一个对socket的调用。它的3个参数是什么?
跳转到该地址
容易看出入栈的三个数即为参数,分别为2 1 6
16.使用MSDN页面的socket和IDA Pro中的命名符号常量,你能使参数更加有意义吗?在你应用了修改以后,参数是什么?
socket函数:socket function (winsock2.h) - Win32 apps | Microsoft Docs
根据对应参数的对应值
首先找到这个,修改成使用标准常量符号,之后rename即可
修改完为
17.搜索in指令(opcode 0xED)的使用。这个指令和一个魔术字符串VMXh用来进行VMware检测。这在这个恶意代码中被使用了吗?使用对执行in指令函数的交叉引用,能发现进一步检测VMware的证据吗?
使用search功能
做如下搜索
然后找到in指令,双击跟进
选择十六进制串,按r将其变成字符串
发现存在VMXh
其他地方也存在该字段
18.将你的光标跳转到0x1001D988处,你发现了什么?
跳转到对应地址
发现是一些十六进制的数据
结合脚本可以进行解密,我们选中所有数据,然后使用 shift+E 键倒出数据
选择c数组类型,使用对应脚本解密即可文章来源:https://www.toymoban.com/news/detail-449604.html
Decode.py文章来源地址https://www.toymoban.com/news/detail-449604.html
a = [0x2D, 0x31, 0x3A, 0x3A, 0x27, 0x75, 0x3C, 0x26, 0x75, 0x21,
0x3D, 0x3C, 0x26, 0x75, 0x37, 0x34, 0x36, 0x3E, 0x31, 0x3A,
0x3A, 0x27, 0x79, 0x75, 0x26, 0x21, 0x27, 0x3C, 0x3B, 0x32,
0x75, 0x31, 0x30, 0x36, 0x3A, 0x31, 0x30, 0x31, 0x75, 0x33,
0x3A, 0x27, 0x75, 0x05, 0x27, 0x34, 0x36, 0x21, 0x3C, 0x36,
0x34, 0x39, 0x75, 0x18, 0x34, 0x39, 0x22, 0x34, 0x27, 0x30,
0x75, 0x14, 0x3B, 0x34, 0x39, 0x2C, 0x26, 0x3C, 0x26, 0x75,
0x19, 0x34, 0x37, 0x75, 0x6F, 0x7C, 0x64, 0x67, 0x66, 0x61]
for i in range(0x00,0x50):
out = a[i] ^ 0x55
print(chr(out),end=“")
#output : xdoor is this backdoor, string decoded for Practical Malware Analysis Lab :)1234
到了这里,关于恶意代码分析实战--IDA pro的使用及课后练习l的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!