目录
漏洞分析方法
漏洞分析是指在代码中迅速定位漏洞,弄清攻击原理,准确地估计潜在的漏洞利用方式和风险等级的过程
常用分析方法:
动态调试:通过od等,从栈中一层层地回溯出发生溢出或其他漏洞的函数
静态分析:ida,通常辅助动态调试
指令追踪技术:现正常运行程序,记录下所有执行过的指令序列,再触发漏洞,记录攻击状况下程序执行过的指令序列,比较这两轮执行过的指令,重点逆向表现不同的代码区,并动态调试跟踪这部分代码,从而迅速定位漏洞函数
补丁比较:一些经验丰富的黑客,在补丁发布当天就可以写出exploit
运动中寻求突破:调试技术
漏洞分析与源码调试的不同点:
断点技巧
畸形RetAddr断点
就是将POC中溢出覆盖的函数返回地址修改为一个非法地址(如0xffffffff),从而触发一个非法的内存访问错误,使得调试器中断下来,从栈中找到前一次函数调用,往往就是触发漏洞的函数
条件断点
就是一个带有条件表达式的int3断点
如bp CreateFileW UNICODE[[ESP+4]] = "c:\\test.txt"
可看到颜色都不一样
我们打开c盘我们新建的test.txt看看
接下来看看记录断点,在刚才的断点处shift +f4
上面解码选错了
在选一下就可以了
消息断点
这是调试UI程序的常用技巧
打开calc.exe,f9运行,看到windows窗口
但这里没显示0到F的标题啊
上面是win7,吓得我打开了xp
清晰极了
直接在上面的下断点,都不能用了
我们在TranslateMessage过程中下断点
bp TranslateMessage MSG==WM_LBUTTONUP
还是在xp耍好了,按下1时
回到程序领空,看到消息分发函数
我们f7进入到DispatchMessageW,之后在内存窗口f2 calc的代码段下断点
f9运行,就暂停在下面这了
那就可以借助ida分析这个窗口过程处理函数了
内存断点
有时候我们更关心是内存的读取和访问操作,这就用到内存断点了
一次性断点,在内存窗口处
硬件断点
4个调试寄存器用来保存断点的地址,DR7设定状态,应该是执行,读取还是写入什么的
执行硬件断点
读取或写入硬件断点
回溯思路
一般都是通过栈回溯
alt+k就可以打开函数调用栈窗口
还可以加载符号
用“白眉”在PE中漫步
本来装了py2.7,看看装2.4行不行
装有点问题,装好再写