我想使用 angr 进行漏洞研究。我在想,如果我做了以下事情:
p = angr.Project('a.out', auto_load_libs=False)
sm = p.factory.simulation_manager()
while len(sm.unconstrained) == 0:
sm.step
那么不受约束的状态可能会指向一个漏洞。我编写了一个明显的潜在缓冲区溢出如下:
void processPacket( char * pkt )
{
char buffer[255];
memcpy(buffer, &pkt[3], *((uint16_t*)&pkt[0]));
}
其中数据包的前两个字节决定了数据包其余部分的长度,因此也决定了 memcpy 的长度。
angr 确实找到了一个不受约束的状态,但是如何检查不受约束的状态以确定漏洞的原因并不容易。
一旦我找到一个不受约束的状态,有没有办法确定原因?漏洞研究人员是否使用 angr 寻找潜在漏洞?有没有典型的方法来做到这一点?