目录
漏洞分析方法
漏洞分析是指在代码中迅速定位漏洞,弄清攻击原理,准确地估计潜在的漏洞利用方式和风险等级的过程
常用分析方法:
动态调试:通过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行不行
装有点问题,装好再写

