
angr学习笔记(10)(hook)
发布日期:2021-05-07 12:09:03
浏览次数:19
分类:原创文章
本文共 1704 字,大约阅读时间需要 5 分钟。
angr系列
文章目录
scanf函数
#include<stdio.h>int main() { int buff[100]; scanf("%4s/n", buff); printf("biaobiao come on"); scanf("%4s/n", buff);}
总结:
scanf读取的地方是输入缓冲区(以内存为参照)的,只要第一个scanf
读取完成后,缓冲区中还有数据,就会紧接着读取,不需要下次的输入。
分析伪代码
输入参数地址是0x0804A054
0x80486B3
我们需要hook的地址是这个,因为这个函数里面字符进行一一比较,容易造成路径爆炸。
一旦我们执行到check_addr=0x080486B3
这个地址时,然后程序不会往下执行原来的函数,而是会去执行check_hook
函数
先进行函数参数的加载:
user_input_bvs=state.memory.load( user_input_addr, user_input_length )
然后进行相应返回值的判断:
state.regs.eax=claripy.If( desired==user_input_bvs, claripy.BVV(1,32), claripy.BVV(0,32) )
脚本:
import angrimport sysimport claripydef main(argv): bin_path=argv[1] p=angr.Project(bin_path) init_state=p.factory.entry_state() check_addr=0x080486B3 check_skip_size=5 @p.hook(check_addr,length=check_skip_size) def check_hook(state): user_input_addr=0x0804A054 user_input_length=16 user_input_bvs=state.memory.load( user_input_addr, user_input_length ) desired='XYMKBKUHNIQYNQXE' state.regs.eax=claripy.If( desired==user_input_bvs, claripy.BVV(1,32), claripy.BVV(0,32) ) 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) sm=p.factory.simgr(init_state) sm.explore(find=is_good,avoid=is_bad) if sm.found: found_state=sm.found[0] print("Solution:{}".format(found_state.posix.dumps(0))) else: raise Exception("Solution not found")if __name__=='__main__': main(sys.argv)
ZXIDRXEORJOTFFJNWUFAOUBLOGLQCCGK
验证
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月14日 04时23分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode7_数组双指针_有序数组元素去重、数组移除指定元素
2019-03-04
LeetCode11_二叉树的层序遍历_BFS迭代、DFS递归、拓展BFS的使用场景
2019-03-04
Tomcat启动过程连接部分-(下)
2019-03-04
JVM篇-结合源码分析垃圾收集器的类型
2019-03-04
RT -Thread Studio开发环境下使用W5500做TCP客户端
2019-03-04
Warning: The core is locked up的解决办法
2019-03-04
奔涌吧 后浪!!! 哔哩哔哩 何冰
2019-03-04
【JVM系列】JDK 内置工具
2019-03-04
JAVA 基础与进阶系列索引 -- JDK 源码学习系列 -- 并发
2019-03-04
网络编程系列索引 -- Linux 网络编程索引
2019-03-04
网络编程系列索引 -- JAVA 网络编程系列
2019-03-04
【JDK源码分析系列】ArrayBlockingQueue源码分析
2019-03-04
【网络通信 -- 直播】音视频常见封装格式 -- MEPG2 TS
2019-03-04
【网络通信 -- 直播】音视频常见封装格式 -- FLV
2019-03-04
【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(三)
2019-03-04
【C/C++基础进阶系列】C/C++ 对象模型 -- 对象语义
2019-03-04
基于FPGA的HDMI信号采样原理
2019-03-04
Spring 与使用STOMP消息
2019-03-04
AngularJS ng-class、ng-style
2019-03-04
Linux 查看系统语言
2019-03-04