angr学习【四】

前言

这篇文章主要补充一下pp.posix.dumps(0)的含义

题目源码

#include<stdio.h>
void success(){
    printf("success\n");
}
void failed(){
    printf("failed\n");
}
void next(char *pwd){
    if(!strcmp(pwd,"123456")){
        success();
    }else{
        failed();
    }
}
int main(void){
    char name[9];
    char pwd[9];
    char n;
    scanf("%s",name);
    scanf("%s",pwd);
    printf("please input n\n");
    puts("this is puts\n");
    n=getchar();
    if(!strcmp(name,"jsk")){
        next(pwd);
    }else{
        return 0;
    }
    return 0;
}

这次我多写了一层判断。主要还是来看一下pp.posix.dumps(0)pp.posix.dumps(1)的区别。我就不多分析了,看结果。
测试脚本

from angr import *
import logging
import archinfo
logging.getLogger('angr.manager').setLevel(logging.DEBUG)
p = Project("test2",auto_load_libs=False)
state=p.factory.entry_state()
sm=p.factory.simulation_manager(state,threads=4)
res=sm.explore(find=0x4006BE,avoid=[0x4006CA,0x400645])
if len(res.found) > 0:
    print res.found[0].posix.dumps(0)
    print "---"
    print res.found[0].posix.dumps(1)
    print "---"
    print res.found[0].posix.dumps(2)

这里写图片描述
结论
(0)输出的是found执行路径中的所有输入
(1)输出的是found执行路径中的所有输出

总结

所以呢,可能还会出现一些理解上的错误,欢迎各路师傅批评指正!

猜你喜欢

转载自blog.csdn.net/qq_33438733/article/details/80315365
今日推荐