恶意代码分析-第九章-OllyDbg
目录
笔记
加载文件:
执行代码:
Execute till Return -> 在当前函数返回时暂停执行 -> CTRL-F9
Execute til User Code ->从库函数中出来回到user code -> ALT-F9
单步跳过陷阱:
010073a4 call 01007568
010073a9 xor ebx,ebx
首先OllyDbg在010073a9处设置一个断点,然后恢复执行,当子例程执行ret指令时,由于命中隐藏断点,会停在010073a9.
但在有些情况下,例如01007568处的子例程可能没有ret指令,或者可能是一个从栈中弹出地址来获得EIP的操作。在这种情况下,没有暂停效果。
加载DLL
停的地方
调试导出函数
跟踪
运行跟踪
Add Selection:
异常处理
Shift + F7 进入异常
Shift + F8 跳过异常
Shift + F9 将运行异常处理
修补操作
修改
Copy to executable -> all mod
save file
分析shellcode
可以借助于OllyDbg进行分析,方法如下:
1 将shellcode从一个十六进制编辑器复制到剪贴板。
2 在内存映射面板窗口中,选择类型为Priv的内存区域(这是分配给进程的私有内存,与只读的可执行镜像不同,这些内存被多个进程共享)。
3 在内存映射面板窗口中,右击被选择的区域,选择Set Access --> Full Access,赋予该区域读、写、运行的权限。
4 双击内存映射面板窗口的某行,会弹出一个十六进制转储窗口,你可以检查它的内容。该区域应该包含几百个连续为0的字节。
5 返回内存转储窗口。0字节填充的高亮度区域足以容纳整个shellcode,右键单击选择的内存区域,然后选择Binary --> Binary Paste。这个操作将步骤1中复制的shellcode粘贴到选择的区域。
6 设置EIP寄存器,指向你修改的内存区域(右击返汇编面板窗口的一条指令,选择“此处为新EIP”,可以很容易设置EIP寄存器的值)。
插件
繁(烦)多的插件http://www.openrce.org/downloads/browse/OllyDbg_Plugins
书签
Bookmark -> Insert Bookmark
ImmDbg
实验
Lab 9-1
Lab 9-2
1.查看静态字符串
2. 静态/动态分析
调用CetModuleFileNameA获得带路径的文件
_Strrchr函数找最好一个“\”的位置,看与ocl.exe是否一致
sub_401089是对域名的字符串解密
进去sub_401000的函数
shell
是通过这个CreateProcessA
的STARTUPINFO
来绑定stdou
,stderr
,stdin
在cmd
上的,只有这样才能把这些东西绑定在cmd
上 。
Lab 9-3
1.Lab09-03.exe导入了哪些DLL
DLL1 DLL2 KERNEL32 NETAPI32
查看对LoadLibraryA的交叉引用,当引用第三方库的时候会调用这个函数
2.DLL1.dll、DLL2.dll、DLL3.dll要求的基地址是多少
对LoadLibraryA加断点,让其加载DLL3。然后再OD中查看各个基地址
4.当Lab09-03.exe调用DLL1.dll中的一个导入函数时,这个导入函数都做了什么
打开DLL1找到DLL1Print函数,可以判断出这个是个输出字符串函数,现在要找到变量dword_10008030
对dword_10008030跟踪,找到对这个变量修改的地方
输出当前线程ID
5.当Lab09-03.exe调用WriteFile函数的时候,它写入的文件名是什么
跟踪hFile得到这个值来自于DLL2ReturnJ的返回值
在另一个IDA中打开DLL2,找到Export窗口
值来自于dword_1000B078
跟踪 dword_1000B078这个值
可以看到下面的地方对这个值进行修改了,并且值为temp.txt
6.当 Lab09-03.exe使用NetScheduleJobAdd创建一个job时,从哪里获取第二个参数的数据
第二个参数是一个指向的结构体,这个参数同时也是DLL3GetStructure函数的参数
所以跟踪到Dll3 的DLL3GetStructure函数的参数是stru_1000B0A0
找到这个位置,查看交叉引用
7.在运行或调试Lab09-03.exe时,你会看到Lab09-03.exe打印出三块神秘数据。DLL 1的神秘数据,DLL 2的神秘数据,DLL 3的神秘数据分别是什么
如上
8.如何将DLL2.dll加载到IDA Pro中,使得它与OllyDbg使用的加载地址匹配
手动加载
选择 OD中的Dll2基地址