2011-7-9:经过前期调试器污点分析VDT-tracer和intel指令集的学习,初步可以跟踪内存中的污点。
见以下示例:
这里主要记录了mov相关指令和字符串拷贝相关指令,
Mov指令包括:case 0xA0: case 0xA1: case 0xA2: case 0xA3: case 0x8B: case 0x88: case 0x89: case 0x8A:
字符串拷贝相关指令包括:case 0xA5: (movsd)
能够将其中指定的污点数据所拷贝到的地方进行准确记录。上例中标记0x12ff20之后的4字节为污点,经过0x401000-0x4010bf整个函数,被传播的地址有3处:
根据检查,无误。
其中有一处寄存器被传播:
此时ebx指向12ff20,因此被传播。
注意:之后的al的操作被用作比较:。这里污点将影响指令流的逻辑。需要进一步分析。
1、调试进程和被调试进程的关系问题;
2、
问题1:对其他指令进行污点传播,现已处理9条指令,还有200多条指令。
问题2:除了对污点的增加,还需要考虑污点的消失;
问题3:调试器中,污点传播的线程相关问题;
问题4:对标志位的影响问题;
问题5:解决段寄存器的问题;
高级问题:
问题1:污点传播策略问题,如一级传播策略,多级污点传播策略。设计与实现。
问题2:污点之间的约束关系问题;
问题3、对于大的商业程序的可行性问题;
问题4:污点标记数据结构的优化问题;
对PrivateScope的参考:
1、对指令的处理
2、函数级的处理
3、约束关系的处理问题
需要做的,将污点传播进行应用。
对Temu的参考:
1、temu也可以通过hook readfile来实现污点标记,利用temu本身的污点传播功能,已经初步实现。但标记的是物理地址。打印出来后如图:
问题:
1、 标记了4个字节,为什么bitmap只有一位是1?
2、 传播过程对哪些指令进行了处理?
Temu的污点传播过程见附件《temu传播记录》,(o:\xqxbak\bitblaze\污点分析附件\)
调试器的污点传播过程见附件《vdt传播记录》,(o:\xqxbak\bitblaze\污点分析附件\)
分析中可见:
一致性:每次污点增加的地方一致。
不一致性1、temu中有污点从3个增加到4个,又减少到3个的过程,而vdt中没有。记录如下:
猜测:1)在cmp al , 0x41后增加,temu对控制流进行了污点传播?
2)增加的污点数据中增加了一个0x63,在第41位,与bitmap相符,可能是在某个地方操作了物理内存,而应用层无法感知???
不一致性2:vdt传播记录中有将第一个污点消除,而temu中没有。实验证明,第一个污点确实别消除,覆盖。如记录:
猜测:temu中是否没有设计将污点消除???
问题1:temu中污点设置的是4个字节,为何bitmap表示为0x 100000000?
问题2:如何通过eip知道在哪个函数中?
本文来源:https://www.2haoxitong.net/k/doc/7e33741d227916888486d7eb.html
文档为doc格式