diff --git a/SUMMARY.md b/SUMMARY.md index 03f97ed..cb41c2b 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -214,6 +214,10 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One * [8.23 Evaluating the Effectiveness of Current Anti-ROP Defenses](doc/8.23_current_anti-rop.md) * [8.24 How to Make ASLR Win the Clone Wars: Runtime Re-Randomization](doc/8.24_runtime_re-randomization.md) * [8.25 (State of) The Art of War: Offensive Techniques in Binary Analysis](doc/8.25_offsensive_techniques.md) + * [8.26 Driller: Augmenting Fuzzing Through Selective Symbolic Execution](doc/8.26_driller_fuzzing.md) + * [8.27 Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware](doc/8.27_firmalice_bypass.md) + * [8.28 Cross-Architecture Bug Search in Binary Executables](doc/8.28_cross_arch_bug_search.md) + * [8.29 Dynamic Hooks: Hiding Control Flow Changes within Non-Control Data](doc/8.29_dynamic_hooks.md) * [九、附录](doc/9_appendix.md) * [9.1 更多 Linux 工具](doc/9.1_Linuxtools.md) * [9.2 更多 Windows 工具](doc/9.2_wintools.md) diff --git a/doc/1.5.8_glibc_malloc.md b/doc/1.5.8_glibc_malloc.md index 1759362..ec16d19 100644 --- a/doc/1.5.8_glibc_malloc.md +++ b/doc/1.5.8_glibc_malloc.md @@ -59,7 +59,7 @@ $ make -j4 && sudo make install 如果我们想要在编译程序时指定 libc,可以像这样: ``` -$ gcc test.c -L/usr/local/glibc-2.23/lib -Wl,--rpath=/usr/local/glibc-2.23/lib -Wl,-I/usr/local/glibc-2.23/lib/ld-2.23.so +$ gcc -L/usr/local/glibc-2.23/lib -Wl,--rpath=/usr/local/glibc-2.23/lib -Wl,-I/usr/local/glibc-2.23/lib/ld-2.23.so test.c $ ldd a.out linux-vdso.so.1 (0x00007ffcc76b0000) libc.so.6 => /usr/local/glibc-2.23/lib/libc.so.6 (0x00007f6abd578000) diff --git a/doc/2.3.2_ollydbg.md b/doc/2.3.2_ollydbg.md index 04e690f..557f751 100644 --- a/doc/2.3.2_ollydbg.md +++ b/doc/2.3.2_ollydbg.md @@ -6,17 +6,68 @@ ## 快捷键 -- F2:在光标选定位置按 F2 键设置或取消断点。 -- F4:运行到光标选定位置处暂停。 -- F7:单步步入:每次执行一条指令,遇到 call 等子程序时进入其中。 -- Shift+F7:与 F7 相同,但当调试程序发生异常而中止时,调试器首先尝试步入 -- F8:单步步过,每次执行一条指令,遇到 call 等子程序时不进入其中。 -- F9:运行,被调试软件继续运行,直到遇到下一个断点。 -- Ctrl+F2:重新启动被调试程序。 -- Ctrl+F9:执行到返回,在执行到一个 ret 指令时暂停,常用于从当前函数快速返回到上一个函数。 -- Ctrl+G:查看任意地址的数据。 -- Alt+F9:执行到用户代码,可用于从系统部分快速返回到被调试程序部分。 -- Alt+F5:让 OllyDbg 窗口总在最前面。 +- `Ctrl`+`F1`:打开与所选行内符号相关的 API 帮助文档。 +- `F2`:在光标选定位置按 F2 键设置或取消断点。 +- `Shift`+`F2`:在首个选择命令设置条件断点。 +- `Ctrl`+`F2`:重新启动被调试程序。 +- `F4`:运行到光标选定位置处暂停。 +- `Shift`+`F4`:设置记录断点。 +- `F5`:最大化当前窗口。 +- `Ctrl`+`F5`:打开与首个选择的命令相对应的源文件。 +- `Alt`+`F5`:让 OllyDbg 窗口总在最前面。 +- `F6`:切换到下一个窗口。 +- `Shift`+`F6`:切换到前一个窗口。 +- `F7`:单步步入:每次执行一条指令,遇到 call 等子程序时进入其中。 +- `Shift`+`F7`:与 F7 相同,但当被调试程序发生异常而中止时,调试器首先尝试步入被调试程序指定的异常处理。 +- `Ctrl`+`F7`:自动步入,在所有的函数调用中一条一条地执行命令。 +- `Alt`+`F7`:转到上一个找到的参考。 +- `F8`:单步步过,每次执行一条指令,遇到 call 等子程序时不进入其中。 +- `Shift`+`F8`:与 F8 相同,但当被调试程序发生异常而中止时,调试器首先尝试步过被调试程序指定的异常处理。 +- `Ctrl`+`F8`:自动步过,一条一条执行命令,但不进入函数内部调用。 +- `Alt`+`F8`:转到下一个找到的参考。 +- `F9`:运行,被调试软件继续运行,直到遇到下一个断点。 +- `Shift`+`F9`:与 F9 相同,但当被调试程序发生异常而中止时,调试器首先尝试执行被调试程序指定的异常处理。 +- `Ctrl`+`F9`:执行到返回,在执行到一个 ret 指令时暂停,常用于从当前函数快速返回到上一个函数。 +- `Alt`+`F9`:执行到用户代码,可用于从系统部分快速返回到被调试程序部分。 +- `F10`:打开与当前窗口或面板相关的快捷菜单。 +- `Ctrl`+`F11`:Run 跟踪步入,一条一条执行命令,进入子函数调用,并把寄存器信息加入到 Run 跟踪的存储数据中。 +- `F12`:停止执行,暂停所有线程。 +- `Ctrl`+`F12`:Run 跟踪步过,一条一条执行命令,不进入子函数调用,并把寄存器信息加入到 Run 跟踪的存储数据中。 +- `Alt`+`F3`:关闭当前窗口。 +- `Alt`+`B`:显示断点窗口。 +- `Alt`+`C`:显示 CPU 窗口。 +- `Alt`+`E`:显示模块列表。 +- `Alt`+`K`:显示调用栈。 +- `Alt`+`L`:显示日志窗口。 +- `Alt`+`M`:显示内存窗口。 +- `Alt`+`O`:显示选项对话框。 +- `Alt`+`Backspace`:撤销对所选部分的修改。 +- `Ctrl`+`A`:分析当前模块的代码段。 +- `Ctrl`+`B`:开始二进制搜索。 +- `Ctrl`+`E`:以十六进制格式编辑所选内容。 +- `Ctrl`+`F`:开始命令搜索。 +- `Ctrl`+`G`:转到某地址。 +- `Ctrl`+`J`:列出所有的涉及到该位置的调用和跳转。 +- `Ctrl`+`K`:查看与当前函数相关的调用树。 +- `Ctrl`+`L`:搜索下一个。 +- `Ctrl`+`N`:打开当前模块的名称列表。 +- `Ctrl`+`O`:扫描对象文件。 +- `Ctrl`+`P`:显示补丁窗口。 +- `Ctrl`+`R`:搜索所选命令的参考。 +- `Ctrl`+`S`:命令搜索。 +- `Ctrl`+`T`:打开“暂停Run跟踪”对话框。 +- `Esc`:停止自动执行或跟踪。 +- `Enter`:将选中的命令添加到命令历史,如果当前命令是一个跳转或者函数,则进入到目的地址。 +- `Backspace`:如果分析器将代码误识为数据,可以将选中部分的自动分析信息移除。 +- *:转到原始位置 +- `Ctrl`+`*`:指定新的起始位置。 +- `+`:如果 Run 跟踪没有激活,则根据历史命令跳到下一条运行过命令的地方;否则跳到 Run 跟踪的下一个记录。 +- `Ctrl`+`+`:跳到前一个函数的开始处。 +- `-`:如果 Run 跟踪没有激活,则根据历史命令跳到前一条运行过命令的地方;否则跳到 Run 跟踪的前一个记录。 +- `Ctrl`+`-`:跳到下一个函数的开始处。 +- `Space`:修改命令。 +- `:`:添加标签。 +- `;`:添加注释。 ## 命令行插件 diff --git a/doc/5.3.1_angr.md b/doc/5.3.1_angr.md index 5f944b6..6d24ba1 100644 --- a/doc/5.3.1_angr.md +++ b/doc/5.3.1_angr.md @@ -9,6 +9,7 @@ - [程序状态](#程序状态) - [模拟管理器](#模拟管理器) - [VEX IR 翻译器](#vex-ir-翻译) +- [扩展工具](#扩展工具) - [CTF 实例](#ctf-实例) - [参考资料](#参考资料) @@ -47,6 +48,8 @@ $ sudo python setup.py install ``` 安装过程中可能会有一些奇怪的错误,可以到官方文档中查看。 +另外 angr 还有一个 GUI 可以用,查看 [angr Management](https://github.com/angr/angr-management)。 + ## 使用方法 #### 快速入门 @@ -783,6 +786,14 @@ t1 到这里 angr 的核心概念就介绍得差不多了,更多更详细的内容还是推荐查看官方教程和 API 文档。 +## 扩展工具 +由于 angr 强大的静态分析和符号执行能力,我们可以在 angr 之上开发其他的一些工: +- [angrop](https://github.com/salls/angrop):rop 链自动化生成器 +- [Patcherex](https://github.com/shellphish/patcherex):二进制文件自动化 patch 引擎 +- [Driller](https://github.com/shellphish/driller):用符号执行增强 AFL 的下一代 fuzzer +- [Rex](https://github.com/shellphish/rex):自动化漏洞利用引擎 + + ## CTF 实例 查看章节 6.2.3、6.2.8。 diff --git a/doc/8.26_driller_fuzzing.md b/doc/8.26_driller_fuzzing.md new file mode 100644 index 0000000..3dad055 --- /dev/null +++ b/doc/8.26_driller_fuzzing.md @@ -0,0 +1 @@ +# 8.26 Driller: Augmenting Fuzzing Through Selective Symbolic Execution diff --git a/doc/8.27_firmalice_bypass.md b/doc/8.27_firmalice_bypass.md new file mode 100644 index 0000000..aa1b462 --- /dev/null +++ b/doc/8.27_firmalice_bypass.md @@ -0,0 +1 @@ +# 8.27 Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware diff --git a/doc/8.28_cross_arch_bug_search.md b/doc/8.28_cross_arch_bug_search.md new file mode 100644 index 0000000..9eb875d --- /dev/null +++ b/doc/8.28_cross_arch_bug_search.md @@ -0,0 +1 @@ +# 8.28 Cross-Architecture Bug Search in Binary Executables diff --git a/doc/8.29_dynamic_hooks.md b/doc/8.29_dynamic_hooks.md new file mode 100644 index 0000000..61bda77 --- /dev/null +++ b/doc/8.29_dynamic_hooks.md @@ -0,0 +1 @@ +# 8.29 Dynamic Hooks: Hiding Control Flow Changes within Non-Control Data diff --git a/doc/8_academic.md b/doc/8_academic.md index 3b20497..b4001a2 100644 --- a/doc/8_academic.md +++ b/doc/8_academic.md @@ -28,3 +28,7 @@ * [8.23 Evaluating the Effectiveness of Current Anti-ROP Defenses](8.23_current_anti-rop.md) * [8.24 How to Make ASLR Win the Clone Wars: Runtime Re-Randomization](8.24_runtime_re-randomization.md) * [8.25 (State of) The Art of War: Offensive Techniques in Binary Analysis](8.25_offsensive_techniques.md) +* [8.26 Driller: Augmenting Fuzzing Through Selective Symbolic Execution](8.26_driller_fuzzing.md) +* [8.27 Firmalice - Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware](8.27_firmalice_bypass.md) +* [8.28 Cross-Architecture Bug Search in Binary Executables](8.28_cross_arch_bug_search.md) +* [8.29 Dynamic Hooks: Hiding Control Flow Changes within Non-Control Data](8.29_dynamic_hooks.md)