angr学习笔记(8)(文件内容符号化)
发布日期:2021-05-07 12:09:01 浏览次数:18 分类:原创文章

本文共 1550 字,大约阅读时间需要 5 分钟。

angr系列

文章目录

伪代码分析

在这里插入图片描述
在这里插入图片描述
起始地址我们需要在初始化文件之前(因为这里并没有符号化文件名),输入password之后,
在这里插入图片描述
这里选在ignore_me之后,把栈变量清理之后地址处。即0x080488D6

在这里我们需要符号化文本的内容(我个人感觉并非整个文本文件),如下,文本文件名是OJKSQYDP.txt,文件大小是file_size=0x40,紧接着进行文件文本符号化,和之前的符号化有些不一样:password=init_state.solver.BVS("password",file_size*8),sim_file=angr.storage.SimFile(filename,content=password,size=file_size)

 	filename='OJKSQYDP.txt'    file_size=0x40    password=init_state.solver.BVS("password",file_size*8)    sim_file=angr.storage.SimFile(filename,content=password,size=file_size)

然后进行相应的 插入操作

 init_state.fs.insert(filename,sim_file)

最后进行文本内容的求解:

  password_bytes=found_state.solver.eval(password,cast_to=bytes)

脚本

import sysimport angrdef main(argv):    bin_path=argv[1]    p=angr.Project(bin_path)    start_addr=0x080488D6    init_state=p.factory.blank_state(addr=start_addr)    filename='OJKSQYDP.txt'    file_size=0x40        password=init_state.solver.BVS("password",file_size*8)    sim_file=angr.storage.SimFile(filename,content=password,size=file_size)    init_state.fs.insert(filename,sim_file)    sm=p.factory.simgr(init_state)    def is_good(state):        return b'Good Job.' in  state.posix.dumps(1)    def is_bad(state):        return b'Try again.' in  state.posix.dumps(1)dd    sm.explore(find=is_good,avoid=is_bad)    if sm.found:        found_state=sm.found[0]        password_bytes=found_state.solver.eval(password,cast_to=bytes)        print("Solution:{}".format(password_bytes.decode('utf-8')))    else:        raise Exception("Solution not found")if __name__=='__main__':    main(sys.argv)

在这里插入图片描述

AZOMMMZM

验证:

在这里插入图片描述

上一篇:angr学习笔记(9)(添加约束)
下一篇:angr学习笔记(7)(malloc地址单元符号化)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月27日 20时28分02秒