Skip to content

Commit

Permalink
Site updated: 2024-05-09 13:33:36
Browse files Browse the repository at this point in the history
  • Loading branch information
ss committed May 9, 2024
1 parent 0b0c470 commit 9a910af
Show file tree
Hide file tree
Showing 36 changed files with 3,686 additions and 25 deletions.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
649 changes: 649 additions & 0 deletions 2023/01/08/零基础爬虫入门/index.html

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2023/01/08/零基础爬虫入门/响应头.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 2023/01/08/零基础爬虫入门/请求头.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 16 additions & 10 deletions 2023/04/23/CPP智能指针/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -377,11 +377,14 @@ <h2 id="总结"><a href="# 总结" class="headerlink" title="总结"></a>总结<
</li>
<li class="post-action">

<a
class="post-action-btn btn btn--disabled"
aria-hidden="true"
>


<a
class="post-action-btn btn btn--default tooltip--top"
href="/2023/01/08/%E9%9B%B6%E5%9F%BA%E7%A1%80%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/"
data-tooltip="零基础爬虫入门"
aria-label="下一篇: 零基础爬虫入门"
>

<span class="hide-xs hide-sm text-small icon-mr">下一篇</span>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
Expand Down Expand Up @@ -450,11 +453,14 @@ <h2 id="总结"><a href="# 总结" class="headerlink" title="总结"></a>总结<
</li>
<li class="post-action">

<a
class="post-action-btn btn btn--disabled"
aria-hidden="true"
>


<a
class="post-action-btn btn btn--default tooltip--top"
href="/2023/01/08/%E9%9B%B6%E5%9F%BA%E7%A1%80%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/"
data-tooltip="零基础爬虫入门"
aria-label="下一篇: 零基础爬虫入门"
>

<span class="hide-xs hide-sm text-small icon-mr">下一篇</span>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
Expand Down
4 changes: 2 additions & 2 deletions 2023/09/17/LibFuzzer使用说明/index.html

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions 2023/10/15/AFL原理与实践/index.html

Large diffs are not rendered by default.

15 changes: 11 additions & 4 deletions 2024/01/23/Angr零基础入门/index.html

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions 2024/02/27/Symbion初探/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@



<script type="application/ld+json">{"@context":"http://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"一瓢清浅","sameAs":["#about","https://github.com/"],"image":"photo.jpg"},"articleBody":"\n\n一、原理介绍 原始论文:SYMBION: Interleaving Symbolic with Concrete Execution\n官方博客:symbion: fusing concrete and symbolic execution\n1. 背景 符号执行可以用来获取走到指定程序区块的可行输入,但是符号执行在实际应用中面临很多挑战:\n\n路径爆炸问题:符号执行从程序入口开始探索,当程序中出现分支和循环时,会导致路径状态呈指数增长。\n\n环境交互问题:当程序与系统或三方库进行交互时,由于缺失源码或交互复杂等原因,会阻碍符号执行的状态更新。\n\n\n2. 方案Symbion 通过具体执行环境与符号执行环境的同步与切换,实现具体值和符号值交替执行。通过这种交替执行机制,减少符号执行探索的路径状态,并解决程序对外部环境的依赖问题。\n图中演示了具体执行环境与符号执行环境相互切换的过程:\n\n\n目标是对从 PoI 到TP的路径进行符号推理,CSP节点是程序入口。从 CSP 到PoI要经过复杂的运算和交互,这导致直接从 CSP 开始符号推理,将无法向后演进到PoI。\n使用 Symbion 时,首先将具体值输入给 CSP,在具体执行后到达PoI。然后在PoI 切换到符号执行环境,算出到达 TP 所需的变量取值。再将算出来的结果同步给具体执行环境,在 PoI 恢复具体执行,即可到达TP。\n3. 实现Symbion 的架构设计如下:\n\n\nSymbion 在 Angr 的基础上,增加了如下组件:\n\nConcrete Target:定义了与具体执行环境交互的方法,通过实现这些方法可以让 Symbion 支持特定的交互环境。例如 Symbion 实现的GDBConcreteTarget,它通过 gdbsever 控制远程目标程序的交互。\n\nread_memory(address, nbytes):从具体进程内存中 address 开始读取 nbytes 字节。\nwrite_memory(address, value):在具体进程内存中 address 处写入value。\nread_register(register):返回具体进程中指定 register 的内容。\nwrite_register(register, value):在具体进程的 register 中写入value。\nset_breakpoint(address):在具体进程中的 address 处设置断点。\nremove_breakpoint(address):移除之前在 address 处设置的断点。\nrun():恢复具体进程的执行。\n\n\nSimEngineConcrete:利用 Concrete Target 的方法执行以下步骤,实现 Symbolic 环境到 Concrete 环境的切换。\n\n用用户提供的值修改具体进程的内存。\n用用户提供的值修改具体进程的寄存器。\n通过断点来设置新的PoI。\n恢复程序的具体执行,直到到达新的PoI,并将控制权交还给 Angr。\n\n\nConcrete SimPlugin:当具体执行到达 PoI,这个插件实现Concrete 环境到 Symbolic 环境的切换,它将具体状态导入 Angr 来创建SimState。\n\n将 SimState 的内存后端重定向到具体进程的内存,即在符号执行过程中,SimState的内存读取都是从具体进程中来操作。\n\n将具体进程中的寄存器值复制到 SimState 中。\n\n将具体进程的内存映射与 Angr 在启动期间加载的内存映射同步。\n\n\n\nSYMBION Exploration Technique:提供用户使用 Symbion 的 API ,通过这些 API ,用户指定 PoI 的地址,在具体执行到达 PoI 后,Symbion 切换为符号执行。\n\n\n简而言之,在 Symbion 的工作流程中,各组件的作用为:\n\n用户通过 SYMBION Exploration Technique 指定PoI。\n\n程序经过具体执行到达到 PoI 后暂停, Concrete SimPlugin 根据具体执行环境来创建一个SimState。\n\nAngr 通过符号执行,计算到达下一个 PoI 的可行解。\n\nSimEngineConcrete 用 Angr 算出来的结果修改具体进程中的变量,恢复具体执行直到下一个PoI。\n\n\n二、示例分析Symbion 官方示例:test_concrete_not_packed_elf64\n示例使用的二进制:not_packed_elf64\n二进制没有给源码,通过 IDA 逆向源码,并用 AI 改写,得到 C 源码如下,源码中取 dest 变量中的一串数值做判断,不同的分支触发不同的print。\n\n\n在 Symbion 的示例代码中,首先通过具体执行到达 BINARY_DECISION_ADDRESS,然后用符号执行探索从BINARY_DECISION_ADDRESS 到DROP_STAGE2_V2的路径。\n\n\n在符号执行求解成功后,再将求解结果传递给具体执行环境,并启动具体执行,即可到达DROP_STAGE2_V2:\n\n\n结合 CFG 和源码可以看到,符号执行的起点 BINARY_DECISION_ADDRESS 对应源码图右侧 55 行,符号执行的终点 DROP_STAGE2_V2 对应源码图右侧 77 行。通过 Symbion,实现了对二进制按指定路径的进行分析的目的。\n\n\nSymbion 的示例代码中,涉及到很多内存地址操作,需要结合 IDA 的反编译源码来看:\n\n\n\nline 2:启动具体执行,到 BINARY_DECISION_ADDRESS 停下,即 IDA 反编译源码第 67 行代码\n\nline 3:从具体执行环境的获取寄存器中的栈指针sp,指向栈顶(即栈开始的位置)\n\nline 4:从栈顶 sp 开始读取 20 个字节的内存,这块内存包括反编译源码中的变量 i 和v5\n\nline 5:判断是否为符号变量,此时为具体执行环境,所以不是符号变量\n\nline 7:定义符号变量,变量名为arg0,大小为 32 字节\n\nline 8:用 symbolic_buffer_memory 指向具体执行环境中 rbp-0xc0 的内存地址,它对应 IDA 反编译源码中的数组 s 的起始地址。\n\nline 10:从 symbolic_buffer_memory 开始加载 36 个字节的内存\n\nline 11:判断是否为符号变量,此时为具体执行环境,所以不是符号变量\n\nline 12:将 angr0 存储到symbolic_buffer_memory,将符号变量与具体执行环境的内存地址关联起来\n\nline 15:从 symbolic_buffer_memory 开始加载 36 个字节的内存\n\nline 16:判断是否为符号变量,因为 把 angr0 保存到这块内存,所以是符号变量\n\nline 19:符号执行状态初始化\n\nline 37:启动符号执行\n\n\n可以看到,Symbion 在切换具体执行环境和符号执行环境时,是通过内存地址把变量的具体值和符号值对应起来。需要结合 IDA 反编译的源码中给出的变量地址和内存大小,人工设置符号执行中所需要的符号变量,难以实现自动化。","dateCreated":"2024-02-27T16:33:24+08:00","dateModified":"2024-04-09T16:00:29+08:00","datePublished":"2024-02-27T16:33:24+08:00","description":"Symbion 是 Angr 的一款插件,可以实现具体执行与符号执行交替运行","headline":"交替符号执行工具——Symbion 初探","image":[],"mainEntityOfPage":{"@type":"WebPage","@id":"https://jiliguluss.github.io/2024/02/27/Symbion%E5%88%9D%E6%8E%A2/"},"publisher":{"@type":"Organization","name":"一瓢清浅","sameAs":["#about","https://github.com/"],"image":"photo.jpg","logo":{"@type":"ImageObject","url":"photo.jpg"}},"url":"https://jiliguluss.github.io/2024/02/27/Symbion%E5%88%9D%E6%8E%A2/","keywords":"Angr, 安全, 工具"}</script>
<script type="application/ld+json">{"@context":"http://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"一瓢清浅","sameAs":["#about","https://github.com/"],"image":"photo.jpg"},"articleBody":"\n\n一、原理介绍 原始论文:SYMBION: Interleaving Symbolic with Concrete Execution\n官方博客:symbion: fusing concrete and symbolic execution\n1. 背景 符号执行可以用来获取走到指定程序区块的可行输入,但是符号执行在实际应用中面临很多挑战:\n\n路径爆炸问题:符号执行从程序入口开始探索,当程序中出现分支和循环时,会导致路径状态呈指数增长。\n\n环境交互问题:当程序与系统或三方库进行交互时,由于缺失源码或交互复杂等原因,会阻碍符号执行的状态更新。\n\n\n2. 方案Symbion 通过具体执行环境与符号执行环境的同步与切换,实现具体值和符号值交替执行。通过这种交替执行机制,减少符号执行探索的路径状态,并解决程序对外部环境的依赖问题。\n图中演示了具体执行环境与符号执行环境相互切换的过程:\n\n\n目标是对从 PoI 到TP的路径进行符号推理,CSP节点是程序入口。从 CSP 到PoI要经过复杂的运算和交互,这导致直接从 CSP 开始符号推理,将无法向后演进到PoI。\n使用 Symbion 时,首先将具体值输入给 CSP,在具体执行后到达PoI。然后在PoI 切换到符号执行环境,算出到达 TP 所需的变量取值。再将算出来的结果同步给具体执行环境,在 PoI 恢复具体执行,即可到达TP。\n3. 实现Symbion 的架构设计如下:\n\n\nSymbion 在 Angr 的基础上,增加了如下组件:\n\nConcrete Target:定义了与具体执行环境交互的方法,通过实现这些方法可以让 Symbion 支持特定的交互环境。例如 Symbion 实现的GDBConcreteTarget,它通过 gdbsever 控制远程目标程序的交互。\n\nread_memory(address, nbytes):从具体进程内存中 address 开始读取 nbytes 字节。\nwrite_memory(address, value):在具体进程内存中 address 处写入value。\nread_register(register):返回具体进程中指定 register 的内容。\nwrite_register(register, value):在具体进程的 register 中写入value。\nset_breakpoint(address):在具体进程中的 address 处设置断点。\nremove_breakpoint(address):移除之前在 address 处设置的断点。\nrun():恢复具体进程的执行。\n\n\nSimEngineConcrete:利用 Concrete Target 的方法执行以下步骤,实现 Symbolic 环境到 Concrete 环境的切换。\n\n用用户提供的值修改具体进程的内存。\n用用户提供的值修改具体进程的寄存器。\n通过断点来设置新的PoI。\n恢复程序的具体执行,直到到达新的PoI,并将控制权交还给 Angr。\n\n\nConcrete SimPlugin:当具体执行到达 PoI,这个插件实现Concrete 环境到 Symbolic 环境的切换,它将具体状态导入 Angr 来创建SimState。\n\n将 SimState 的内存后端重定向到具体进程的内存,即在符号执行过程中,SimState的内存读取都是从具体进程中来操作。\n\n将具体进程中的寄存器值复制到 SimState 中。\n\n将具体进程的内存映射与 Angr 在启动期间加载的内存映射同步。\n\n\n\nSYMBION Exploration Technique:提供用户使用 Symbion 的 API ,通过这些 API ,用户指定 PoI 的地址,在具体执行到达 PoI 后,Symbion 切换为符号执行。\n\n\n简而言之,在 Symbion 的工作流程中,各组件的作用为:\n\n用户通过 SYMBION Exploration Technique 指定PoI。\n\n程序经过具体执行到达到 PoI 后暂停, Concrete SimPlugin 根据具体执行环境来创建一个SimState。\n\nAngr 通过符号执行,计算到达下一个 PoI 的可行解。\n\nSimEngineConcrete 用 Angr 算出来的结果修改具体进程中的变量,恢复具体执行直到下一个PoI。\n\n\n二、示例分析Symbion 官方示例:test_concrete_not_packed_elf64\n示例使用的二进制:not_packed_elf64\n二进制没有给源码,通过 IDA 逆向源码,并用 AI 改写,得到 C 源码如下,源码中取 dest 变量中的一串数值做判断,不同的分支触发不同的print。\n\n\n在 Symbion 的示例代码中,首先通过具体执行到达 BINARY_DECISION_ADDRESS,然后用符号执行探索从BINARY_DECISION_ADDRESS 到DROP_STAGE2_V2的路径。\n\n\n在符号执行求解成功后,再将求解结果传递给具体执行环境,并启动具体执行,即可到达DROP_STAGE2_V2:\n\n\n结合 CFG 和源码可以看到,符号执行的起点 BINARY_DECISION_ADDRESS 对应源码图右侧 55 行,符号执行的终点 DROP_STAGE2_V2 对应源码图右侧 77 行。通过 Symbion,实现了对二进制按指定路径的进行分析的目的。\n\n\nSymbion 的示例代码中,涉及到很多内存地址操作,需要结合 IDA 的反编译源码来看:\n\n\n\nline 2:启动具体执行,到 BINARY_DECISION_ADDRESS 停下,即 IDA 反编译源码第 67 行代码\n\nline 3:从具体执行环境的获取寄存器中的栈指针sp,指向栈顶(即栈开始的位置)\n\nline 4:从栈顶 sp 开始读取 20 个字节的内存,这块内存包括反编译源码中的变量 i 和v5\n\nline 5:判断是否为符号变量,此时为具体执行环境,所以不是符号变量\n\nline 7:定义符号变量,变量名为arg0,大小为 32 字节\n\nline 8:用 symbolic_buffer_memory 指向具体执行环境中 rbp-0xc0 的内存地址,它对应 IDA 反编译源码中的数组 s 的起始地址。\n\nline 10:从 symbolic_buffer_memory 开始加载 36 个字节的内存\n\nline 11:判断是否为符号变量,此时为具体执行环境,所以不是符号变量\n\nline 12:将 angr0 存储到symbolic_buffer_memory,将符号变量与具体执行环境的内存地址关联起来\n\nline 15:从 symbolic_buffer_memory 开始加载 36 个字节的内存\n\nline 16:判断是否为符号变量,因为 把 angr0 保存到这块内存,所以是符号变量\n\nline 19:符号执行状态初始化\n\nline 37:启动符号执行\n\n\n可以看到,Symbion 在切换具体执行环境和符号执行环境时,是通过内存地址把变量的具体值和符号值对应起来。需要结合 IDA 反编译的源码中给出的变量地址和内存大小,人工设置符号执行中所需要的符号变量,难以实现自动化。","dateCreated":"2024-02-27T16:33:24+08:00","dateModified":"2024-04-09T16:00:29+08:00","datePublished":"2024-02-27T16:33:24+08:00","description":"Symbion 是 Angr 的一款插件,可以实现具体执行与符号执行交替运行","headline":"交替符号执行工具——Symbion 初探","image":[],"mainEntityOfPage":{"@type":"WebPage","@id":"https://jiliguluss.github.io/2024/02/27/Symbion%E5%88%9D%E6%8E%A2/"},"publisher":{"@type":"Organization","name":"一瓢清浅","sameAs":["#about","https://github.com/"],"image":"photo.jpg","logo":{"@type":"ImageObject","url":"photo.jpg"}},"url":"https://jiliguluss.github.io/2024/02/27/Symbion%E5%88%9D%E6%8E%A2/","keywords":"安全, 工具, Angr"}</script>
<meta name="description" content="Symbion 是 Angr 的一款插件,可以实现具体执行与符号执行交替运行">
<meta property="og:type" content="blog">
<meta property="og:title" content="交替符号执行工具——Symbion 初探">
Expand All @@ -31,9 +31,9 @@
<meta property="article:published_time" content="2024-02-27T08:33:24.000Z">
<meta property="article:modified_time" content="2024-04-09T08:00:29.509Z">
<meta property="article:author" content="一瓢清浅">
<meta property="article:tag" content="Angr">
<meta property="article:tag" content="安全">
<meta property="article:tag" content="工具">
<meta property="article:tag" content="Angr">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://jiliguluss.github.io/2024/02/27/Symbion%E5%88%9D%E6%8E%A2/symbion%E4%B8%8A%E4%B8%8B%E6%96%87%E5%88%87%E6%8D%A2.png">

Expand Down
18 changes: 18 additions & 0 deletions all-archives/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,24 @@ <h5 class="archive-title">
<span class="archive-post-date"> - 2023 年 4 月 23 日</span>
</li>






</ul>

<ul class="archive-posts archive-month" data-date="202301">
<h5 class="archive-title">
<a class="link-unstyled" href="/archives/2023/01">一月</a>
</h5>


<li class="archive-post archive-day" data-date="20230108">
<a class="archive-post-title" href="/2023/01/08/%E9%9B%B6%E5%9F%BA%E7%A1%80%E7%88%AC%E8%99%AB%E5%85%A5%E9%97%A8/">零基础爬虫入门</a>
<span class="archive-post-date"> - 2023 年 1 月 8 日</span>
</li>

</section>
</div>

Expand Down
Loading

0 comments on commit 9a910af

Please sign in to comment.