angr系列

00_angr_find

01_angr_avoid

02_angr_find_condition

03_angr_symbolic_registers

04_angr_symbolic_stack

05_angr_symbolic_memory

06_angr_symbolic_dynamic_memory

07_angr_symbolic_file

08_angr_constraints

09_angr_hooks

10_angr_simprocedures

13_angr_static_binary

文章目录

  • angr系列
    • 00_angr_find
    • 01_angr_avoid
    • 02_angr_find_condition
    • 03_angr_symbolic_registers
    • 04_angr_symbolic_stack
    • 05_angr_symbolic_memory
    • 06_angr_symbolic_dynamic_memory
    • 07_angr_symbolic_file
    • 08_angr_constraints
    • 09_angr_hooks
    • 10_angr_simprocedures
    • 13_angr_static_binary
  • scanf函数
    • 总结:
  • 分析伪代码
  • 脚本:
  • 验证

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 angr
import sys
import claripydef main(argv):bin_path=argv[1]p=angr.Project(bin_path)init_state=p.factory.entry_state()check_addr=0x080486B3check_skip_size=5@p.hook(check_addr,length=check_skip_size)def check_hook(state):user_input_addr=0x0804A054user_input_length=16user_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

验证

angr学习笔记(10)(hook)相关推荐

  1. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  2. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  4. Hadoop学习笔记—10.Shuffle过程那点事儿

    Hadoop学习笔记-10.Shuffle过程那点事儿 一.回顾Reduce阶段三大步骤 在第四篇博文<初识MapReduce>中,我们认识了MapReduce的八大步骤,其中在Reduc ...

  5. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  6. HALCON 20.11:深度学习笔记(10)---分类

    HALCON 20.11:深度学习笔记(10)---分类 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (10)Tips for Deep Learning 注:本博客主要参照 http://blog.csdn.net/xzy_thu ...

  8. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  9. 史上最牛最强的linux学习笔记 10.shell基础

    史上最牛最强的linux学习笔记 10.shell基础 写在最前面: 本文是基于某站的视频学习所得,第一个链接如下: https://www.bilibili.com/video/BV1mW411i7 ...

  10. 【论文学习笔记-10】ActiveStereoNet(Google ECCV2018)主动式双目相机自监督学习立体匹配网络

    [论文学习笔记-10]ActiveStereoNet(Google ECCV2018)主动式双目相机自监督学习立体匹配网络) 自监督训练方法 Experiment ORAL 针对双目立体匹配中无监督存 ...

最新文章

  1. Datawhale第五期组队学习团队成员
  2. python 四舍五入 round( x [, n] )函数 int()函数
  3. 2018年5月5日论文阅读
  4. 编程软件python是什么意思_程序员Python编程必备5大工具,你用过几个?
  5. linux查看内存_嵌入式操作系统的内存,你了解多少?
  6. js对象(Object)和字符串(String)互转 - 代码篇
  7. 【JAVA多线程】interrupted() 和 isInterrupted() 的区别
  8. 十进制数怎样转成十六进制数
  9. ORACLE1.13-综合例子应用01
  10. 数据集(benchmark)、常用数据集的解析(cifar-10、)
  11. PCB SQL SERVER 枚举分割函数(枚举值分解函数)
  12. 1)hadoop集群搭建
  13. 教你用C调1645和弦,写出不一样的歌
  14. curl_multi异步高并发服务实现
  15. Labview2018视频教程(共51节)
  16. 微信小程序----对接OneNet平台(测试版)
  17. 使用word2vec分析新闻标题并预测文章流行度
  18. Delphi/VisualJ++/.NET/C#之父-Anders Hejlsberg
  19. php电子邮箱表单,php 邮件发送表单数据 | 同路吧
  20. 专利CPC系统中,如何再次下载专利审查意见书?

热门文章

  1. 成功解决Both binary classification-only and multiclassification-only loss function or metrics specified
  2. 成功解决ValueError: (‘Unknown transform primitive years. ‘, ‘Call ft.primitives.list_primitives() to get
  3. 成功解决SyntaxError: import * only allowed at module level
  4. Keras之DNN:利用DNN【Input(8)→(12+8)(relu)→O(sigmoid)】模型实现预测新数据(利用糖尿病数据集的八个特征进行二分类预测
  5. DL之RNN:循环神经网络RNN的简介、应用、经典案例之详细攻略
  6. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)
  7. 成功解决Python的Reshape your data either using array.reshape(-1, 1) if your data has a single feature or
  8. requireJS 从概念到实战
  9. Spring使用笔记(一)Spring简介
  10. 最长公共子序列问题LCS