首页 > 其他分享 >学习angr记录--12~14

学习angr记录--12~14

时间:2024-06-23 17:10:59浏览次数:28  
标签:__ 12 14 -- solution project state angr main

12.veritesting 功能
默认就是开启的。。。

13.添加angr准备好的simProcedures以避免路径爆炸

import angr
import sys
 
def main(argv):
  path_to_binary = "E:\\A_reverse\\angr_ctf-master\\dist\\13_angr_static_binary"
  project = angr.Project(path_to_binary,load_options={"auto_load_libs":True})
  initial_state = project.factory.entry_state(add_options=angr.options.unicorn)
  simulation = project.factory.simgr(initial_state,veritesting=True)
  project.hook(0x0804ED40, angr.SIM_PROCEDURES['libc']['printf']())
  project.hook(0x0804ED80, angr.SIM_PROCEDURES['libc']['scanf']())
  project.hook(0x0804F350, angr.SIM_PROCEDURES['libc']['puts']())
  project.hook(0x08048D10, angr.SIM_PROCEDURES['glibc']['__libc_start_main']())
  simulation.explore(find=lambda state: b"Good Job" in state.posix.dumps(sys.stdout.fileno()),
                     avoid=lambda state: b"Try again" in state.posix.dumps(sys.stdout.fileno()))
  
  if simulation.found:
    solution_state = simulation.found[0]
    print("%s" %(solution_state.posix.dumps(sys.stdin.fileno())))
  else:
    raise Exception('Could not find the solution')
 
if __name__ == '__main__':
  main(sys.argv)

14.符号执行动态链接库的函数

import angr
import sys
import claripy
 
def main(argv):
  path_to_binary = "E:\\A_reverse\\angr_ctf-master\\dist\\lib14_angr_shared_library.so"

  
  base = 0x5000000                                       #任意编一个base基址,这是因为动态链接库没有绝对地址,是位置无关代码,也叫PIC
  project = angr.Project(path_to_binary, load_options={
    'main_opts' : {                                      #在这里设置project的基址
      'custom_base_addr' : base
    }
  })
  
  buffer_pointer = claripy.BVV(0x3000000, 32)            #这一段是初始化进入函数的一些状态
  func_address = base + 0x6d7                            #打开.so文件获取该函数的文件地址
  initial_state = project.factory.call_state(func_address, buffer_pointer, claripy.BVV(8, 32))#传入一个指针,一个整数,整数化为位向量
  flag = claripy.BVS('flag', 8*8)                        #位向量化一个字符串,存到传入的地址中去
  initial_state.memory.store(buffer_pointer, flag)
  
  simulation = project.factory.simgr(initial_state,veritesting = True)
  func_end = base + 0x783
  simulation.explore(find=func_end)
  
  if simulation.found:
    solution_state = simulation.found[0]
    solution_state.add_constraints(solution_state.regs.eax != 0)#希望的结果是函数结束时返回1,添加约束
    print(solution_state.solver.eval(flag, cast_to=bytes))
  else:
    raise Exception('Could not find the solution')
 
if __name__ == '__main__':
  main(sys.argv)

标签:__,12,14,--,solution,project,state,angr,main
From: https://www.cnblogs.com/ljyink/p/18263640

相关文章

  • 【测试文章搬运】测试计划包含哪些要素?
    ComponentsOfAPlanDocumentItemsinaTestPlanTemplateWhatdotheycontain?Scope=>TestScenarios/Testobjectivesthatwillbevalidated.  Outofscope=>Enhancedclarityonwhatwearenotgoingtocover  Assumptions=&g......
  • 创新实训(10)- 大模型服务进一步完善&邮件服务
    之前为应付中期检查简单接入了一个基础服务,并未对prompt词等做太深入的细分,为了实现更人性化的效果,我对大模型的服务进行了更进一步的完善首先是前端的效果:超级用户端:一般用户端:三个按钮分别对应AI整理格式,AI基础纠错,AI结合题目和代码详细检查错误。前两者的返回值是......
  • 创新实训(8)- 大模型服务进一步完善&邮件服务
    之前为应付中期检查简单接入了一个基础服务,并未对prompt词等做太深入的细分,为了实现更人性化的效果,我对大模型的服务进行了更进一步的完善首先是前端的效果:超级用户端:一般用户端:三个按钮分别对应AI整理格式,AI基础纠错,AI结合题目和代码详细检查错误。前两者的返回值是......
  • CAN收发器TJA1145A休眠唤醒应用
    目录1.  TJA1145 工作原理简介2. SPI通讯3. 唤醒源配置4. 休眠配置    1.  TJA1145 工作原理简介    TJA1145的唤醒工作原理主要依赖于其内部的唤醒机制和外部硬件的配合,主要涉及低功耗状态、选择性唤醒功能。TJA1145是一款CAN收发器,它支持......
  • 跨行业数据资产共享与协同:构建一体化数据共享平台,解锁数据资产潜力,促进多行业数据流通
    一、引言随着信息技术的飞速发展,数据已成为推动社会进步和经济发展的关键要素。然而,在传统行业领域,数据往往被限制在各自的“孤岛”中,难以实现跨行业的流通与共享。这不仅限制了数据的价值发挥,也阻碍了行业的创新与发展。因此,构建一体化数据共享平台,实现跨行业数据资产共享与......
  • [Java并发]Thread
    Java开启线程的四种方式实现runnable接口这个方法有一个很大的缺点就是重写的run方法是没有返回值的,如果想要返回值,需要使用下面的方法publicclassRunnableImplimplementsRunnable{/**创建步骤如下:*1,定义Runnable接口的实现类,并且实现run方法,这个方法......
  • JAVA类与对象的基础概念(JAVA基础)
    类的定义1.定义:类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象2.属性:用于定义该类或该类对象包含的数据或者说静态特征3.初始化∶定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化4.方法:用于定义该类或该类实例的行为特征和功能实现......
  • 【计算机组成原理】部分题目汇总
    计算机组成原理部分题目汇总一.简答题RISC和CICS简要说明,比较异同RISC(精简指令集)注重简单快速的指令执行,使用少量通用寄存器,固定长度指令,优化硬件性能,依赖软件(如编译器)来提升效率。CISC(复杂指令集)包含多样复杂的指令,能一条指令完成多步操作,采用变长指令,减少指令数但......
  • 13-oop概述
    面向对象思想物以类聚,分类的思维模式。分类,然后对这些分类进行单独思考,最后对某个分类下的细节进行面向过程对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观的操作,仍然需要面向过程的思路去处理。面向对象是......
  • 计网:端口映射
    计网:端口映射最近做学校的计网实验弄了好久才给弄完,感觉这个实验有点麻烦,就写了这个博客分享下(可能还有错,欢迎指出)一.题目和要求一、任务描述本项目之目的是在学习了解OSI/RM中网络层和传输层的基础理论基础上,利用华为设备的模拟环境eNSP,利用端口映射技术实现仅配置私......