首页 > 其他分享 >Angr-Learn-0x3

Angr-Learn-0x3

时间:2024-03-16 14:45:22浏览次数:32  
标签:AST 0x3 解决方案 solver state 64 Angr Learn expression

Angr-Learn-0x3

注意

本文可以理解为官方文档的简单翻译+一部分个人理解

符号执行与约束求解

angr之所以强大并不因为它是一个模拟器,而是它能使用符号变量来执行。使用符号变量算术运算将产生一颗运算树(AST)。AST可以转换为SMT求解器的约束。

使用位向量

例子:

# 64-bit bitvectors with concrete values 1 and 100
>>> one = state.solver.BVV(1, 64)
>>> one
 <BV64 0x1>
>>> one_hundred = state.solver.BVV(100, 64)
>>> one_hundred
 <BV64 0x64>

# create a 27-bit bitvector with concrete value 9
>>> weird_nine = state.solver.BVV(9, 27)
>>> weird_nine
<BV27 0x9>

不同长度的位向量可以进行扩展,使得具有适当的位数。

接下来我们来引入符号与位向量是如何使用的:

# Create a bitvector symbol named "x" of length 64 bits
>>> x = state.solver.BVS("x", 64)
>>> x
<BV64 x_9_64>
>>> y = state.solver.BVS("y", 64)
>>> y
<BV64 y_10_64>

可以看到使用了state.solver.BVS来创建一个64位的符号,我们可以简单理解为是我们数学中学习到的代数中的变量。我们对符号进行算术运算不会得到一个数字,而是得到一个AST

最后,我们要知道angr使用“位向量”一词来指代其最顶层操作生成位向量的任何 AST。还可以通过 AST 表示其他数据类型,包括浮点数以及我们即将看到的布尔值。

符号约束

AST之间的比较是默认比较无符号,而且任何两个相似类型的 AST 之间执行比较操作将产生另一个 AST ,这个AST是一个符号布尔值。

x == 1
<Bool x_9_64 == 0x1>
x == one
<Bool x_9_64 == 0x1>
x > 2
<Bool x_9_64 > 0x2>
x + y == one_hundred + 5
<Bool (x_9_64 + y_10_64) == 0x69>
one_hundred > 5
<Bool True>
one_hundred > -5
<Bool False>

这说明了我们不能直接将符号比较在if、while语句中使用,而是应该通过state.solver.is_true(yes)这样的语句间接使用。

约束求解

约束求解其实就是单个或多个符号的约束一起计算,获取满足约束的符号的有效值。我们可以通过state.solver.add()来添加约束。

浮点数运算

  • state.solver.FPS

约束求解有关API

  • solver.eval(expression)将为您提供给定表达式的一种可能的解决方案。
  • solver.eval_one(expression)将为您提供给定表达式的解决方案,或者如果可能有多个解决方案,则抛出错误。
  • solver.eval_upto(expression, n)将为您提供给定表达式的最多 n 个解决方案,如果可能的数量少于 n,则返回少于 n 的解决方案。
  • solver.eval_atleast(expression, n)将为您提供给定表达式的 n 个解决方案,如果可能的解决方案少于 n 个,则会抛出错误。
  • solver.eval_exact(expression, n)将为您提供给定表达式的 n 个解决方案,如果少于或多于可能的解决方案,则会抛出错误。
  • solver.min(expression)将为您提供给定表达式的最小可能解决方案。
  • solver.max(expression)将为您提供给定表达式的最大可能解决方案。

此外,所有这些方法都可以采用以下关键字参数:

  • extra_constraints可以作为约束元组传递。此评估将考虑这些约束,但不会添加到状态中。
  • cast_to可以传递一个数据类型来将结果转换为。目前,这只能是intand bytes,这将导致该方法返回基础数据的相应表示。例如, 将返回.state.solver.eval(state.solver.BVV(0x41424344, 32), cast_to=bytes)``b'ABCD'

标签:AST,0x3,解决方案,solver,state,64,Angr,Learn,expression
From: https://www.cnblogs.com/7resp4ss/p/18077047

相关文章

  • 一个现成的用python写的项目, 有GUI,https://github.com/mustafamerttunali/deep-learni
    安装该项目ENV:Win11Anaconda 1.安装Python3.7, 在Anaconda新建一个python3.7环境2.安装VC++buildtool14.0 以上版本,我从下面这个link下载的最新版是17.6.4https://visualstudio.microsoft.com/visual-cpp-build-tools/否则会遇到 3.修改一下requir......
  • 政安晨:【AI认知速成】(一)—— 初步理解Q-learning
    咱们这篇文章将要介绍的AI模型,遍及机器人、自动驾驶汽车、游戏中的NPC等等。Q-Learning是一种强化学习算法,用于解决动态环境下的决策问题。在Q-Learning中,有一个智能体(agent)和一个环境(environment)。智能体通过与环境的交互来学习最优策略,以最大化累计奖励。Q-Learning算法的......
  • Federated Learning with Differential Privacy:Algorithms and Performance Analysis
    2024/2/11大四做毕设的时候第一次读这篇论文,当时只读了前一部分,后面关于收敛界推导证明的部分没有看,现在重新完整阅读一下这篇文章。本文贡献提出了一种基于差分隐私(DP)概念的新框架,其中在聚合之前将人工噪声添加到客户端的参数中,即模型聚合前加噪FL(NbAFL)我们提出了Nb......
  • Efficient Learned Lossless JPEG Recompression
    目录简介创新点模型设置CCCMcompressedcheckerboardcontextmodelPPCMpipelineparallelcontextmodelShiftContext实验设置结果简介本文是GuoLina以及HeDailan商汤团队关于重压缩的第二篇论文,这次该团队将注意力放到了加速解码上。创新点提出Multi-LevelParallelC......
  • 【Coursera GenAI with LLM】 Week 3 Reinforcement Learning from Human Feedback Cl
    Helpful?Honest?Harmless?MakesureAIresponseinthose3ways.Ifnot,weneedRLHFisreducethetoxicityoftheLLM.Reinforcementlearning:isatypeofmachinelearninginwhichanagentlearnstomakedecisionsrelatedtoaspecificgoalbytakin......
  • Sklearn支持向量机
    支持向量机(SupportVectorMachine,SVM)是一种常用的分类算法,它可以用于解决二分类和多分类问题。在Python中,你可以使用Sklearn库来实现SVM。下面是一个简单的例子,展示了如何使用Sklearn进行SVM分类。#导入必要的库fromsklearn.model_selectionimporttrain_test_split......
  • angr使用记录
    由于毕设需要,这几天在使用angr符号执行自动化挖掘格式化字符串漏洞,但是对angr的了解不多,导致在使用的时候屡屡碰壁,在此记录一下。本来写了一个简单的通用检测脚本,但是在使用脚本对CWE-134的一个样例(SARD)进行分析时,发现无法找出漏洞点。检测脚本测试格式化字符串漏洞的逻辑很简单......
  • Practical Learned Lossless JPEG Recompression with Multi-Level Cross-Channel Ent
    目录简介模型DCTCoefficientsRearrangement将系数重排Cross-ColorEntropyModelMatrixContextModelMulti-LevelCross-ChannelEntropyModel创新点实验设置训练数据集:测试数据集:训练细节:结果简介JPEG是一种非常流行的压缩方法,然而最近关于图像压缩的研究主要集中在未压......
  • [论文速览] Learning to Write Stylized Chinese Characters
    Pretitle:LearningtoWriteStylizedChineseCharactersbyReadingaHandfulofExamplesaccepted:IJCAI2018paper:https://arxiv.org/abs/1712.06424code:Noneref:https://www.jiqizhixin.com/articles/2018-01-01-4关键词:字体生成阅读理由:风格内容解耦先行......
  • [learn]Set Up SAP Business Application Studio
    SetUpSAPBusinessApplicationStudiohttps://developers.sap.com/tutorials/set-up-bas.html按照教程,申请了https://account.hanatrial.ondemand.com/trial/#/home/trial的试用账号后,无法打开SAPBusinessApplicationStudio,按照上述课程设置SAPBusinessApplicationStud......