This commit is contained in:
firmianay 2018-05-24 21:24:18 +08:00
parent 1551bb210c
commit f34cb95061
19 changed files with 118 additions and 22 deletions

View File

@ -17,8 +17,8 @@ GitHub 地址https://github.com/firmianay/CTF-All-In-One
* [1.4.5 OWASP Top Ten Project 漏洞基础](doc/1.4.5_owasp_basic.md)
* [1.4.6 PHP 源码审计基础](doc/1.4.6_php_basic.md)
* [1.5 逆向工程基础](doc/1.5_reverse_basic.md)
* [1.5.1 C 语言基础](doc/1.5.1_c_basic.md)
* [1.5.2 x86/x86-64 汇编基础](doc/1.5.2_x86_x64.md)
* [1.5.1 C/C++ 语言基础](doc/1.5.1_c_basic.md)
* [1.5.2 x86/x64 汇编基础](doc/1.5.2_x86_x64.md)
* [1.5.3 Linux ELF](doc/1.5.3_elf.md)
* [1.5.4 Windows PE](doc/1.5.4_pe.md)
* [1.5.5 静态链接](doc/1.5.5_static_link.md)
@ -28,6 +28,7 @@ GitHub 地址https://github.com/firmianay/CTF-All-In-One
* [1.5.9 Linux 内核](doc/1.5.9_linux_kernel.md)
* [1.5.10 Windows 内核](doc/1.5.10_windows_kernel.md)
* [1.5.11 jemalloc](doc/1.5.11_jemalloc.md)
* [1.5.12 MIPS 汇编基础](doc/1.5.12_mips.md)
* [1.6 密码学基础](doc/1.6_crypto_basic.md)
* [1.7 Android 安全基础](doc/1.7_android_basic.md)
* [1.7.1 Android 环境搭建](doc/1.7.1_android_env.md)
@ -75,6 +76,12 @@ GitHub 地址https://github.com/firmianay/CTF-All-In-One
* [3.1.11 Windows 内核漏洞利用](doc/3.1.11_windows_kernel_exploit.md)
* [3.1.12 竞争条件](doc/3.1.12_race_condition.md)
* Reverse
* [3.2.1 patch 二进制文件](doc/3.2.1_patch_binary.md)
* [3.2.2 脱壳技术PE](doc/3.2.2_pe_unpack.md)
* [3.2.3 脱壳技术(ELF)](doc/3.2.3_elf_unpack.md)
* [3.2.4 反调试技术PE](doc/3.2.4_pe_anti_debugging.md)
* [3.2.5 反调试技术ELF](doc/3.2.5_elf_anti_debugging.md)
* [3.2.6 指令混淆](doc/3.2.6_instruction_confusion.md)
* Web
* [3.3.1 SQL 注入利用](doc/3.3.1_sql_injection.md)
* [3.3.2 XSS 漏洞利用](doc/3.3.2_xss.md)
@ -90,9 +97,9 @@ GitHub 地址https://github.com/firmianay/CTF-All-In-One
* [4.6 one-gadget RCE](doc/4.6_one-gadget_rce.md)
* [4.7 通用 gadget](doc/4.7_common_gadget.md)
* [4.8 使用 DynELF 泄露函数地址](doc/4.8_dynelf.md)
* [4.9 patch 二进制文件](doc/4.9_patch_binary.md)
* [4.10 反调试技术](doc/4.10_antidbg.md)
* [4.11 指令混淆](doc/4.11_instruction_confusion.md)
* [4.9 shellcode 开发](doc/4.9_shellcode.md)
* 4.10
* 4.11
* [4.12 利用 __stack_chk_fail](doc/4.12_stack_chk_fail.md)
* [4.13 利用 _IO_FILE 结构](doc/4.13_io_file.md)
* [4.14 glibc tcache 机制](doc/4.14_glibc_tcache.md)

View File

@ -1,7 +1,7 @@
# 1.5.11 jemalloc
- [jemalloc](#jemalloc)
- [安装](#安装)
- [编译安装](#编译安装)
- [CTF 实例](#ctf-实例)
- [参考资料](#参考资料)
@ -10,7 +10,7 @@
jemalloc 是 Facebook 推出的一种通用 malloc 实现,在 FreeBSD、firefox 中被广泛使用。比起 ptmalloc2 具有更高的性能。
## 安装
## 编译安装
我们来编译一个带调试信息的 jemalloc4.x和5.x之间似乎差别比较大
```
$ wget https://github.com/jemalloc/jemalloc/releases/download/5.0.1/jemalloc-5.0.1.tar.bz2

1
doc/1.5.12_mips.md Normal file
View File

@ -0,0 +1 @@
# 1.5.12 MIPS 汇编基础

View File

@ -4,6 +4,7 @@
- [C 语言标准库](#c-语言标准库)
- [整数表示](#整数表示)
- [格式化输出函数](#格式化输出函数)
- [关于 C++](#关于-c++)
## 从源代码到可执行文件
@ -403,3 +404,6 @@ printf("%42c%1$n", &n); // 首先输出41个空格然后输出 n 的低
```
这里我们对格式化输出函数和格式字符串有了一个详细的认识,后面的章节中我们会介绍格式化字符串漏洞的内容。
## 关于 C++

View File

@ -1,4 +1,4 @@
# 1.5.2 x86/x86-64 汇编基础
# 1.5.2 x86/x64 汇编基础
- [x86](#x86)
- [x64](#x64)

View File

@ -1,7 +1,7 @@
# 1.5 逆向工程基础
- [1.5.1 C 语言基础](1.5.1_c_basic.md)
- [1.5.2 x86/x86-64 汇编基础](1.5.2_x86_x64.md)
- [1.5.1 C/C++ 语言基础](1.5.1_c_basic.md)
- [1.5.2 x86/x64 汇编基础](1.5.2_x86_x64.md)
- [1.5.3 Linux ELF](1.5.3_elf.md)
- [1.5.4 Windows PE](1.5.4_pe.md)
- [1.5.5 静态链接](1.5.5_static_link.md)
@ -11,3 +11,4 @@
* [1.5.9 Linux 内核](1.5.9_linux_kernel.md)
* [1.5.10 Windows 内核](1.5.10_windows_kernel.md)
* [1.5.11 jemalloc](1.5.11_jemalloc.md)
* [1.5.12 MIPS 汇编基础](1.5.12_mips.md)

View File

@ -1,11 +1,24 @@
# 2.2.2 IDA Pro
- [快捷键](#快捷键)
- [IDA Python](#ida-python)
- [常用插件](#常用插件)
- [常用脚本](#常用脚本)
- [技巧](#技巧)
- [参考资料](#参考资料)
## 快捷键
- `;`:为当前指令添加全文交叉引用的注释
- `n`:定义或修改名称,通常用来标注函数名
- `g`:跳转到任意地址
- `Esc`:返回到跳转前的位置
- `D`:分别按字节、字、双字显示数据
- `A`:按 ASCII 显示数据
## IDA Python
## 常用插件
- [IDA FLIRT Signature Database](https://github.com/push0ebp/sig-database) -- 用于识别静态编译的可执行文件中的库函数
- [Find Crypt](https://github.com/polymorf/findcrypt-yara) -- 寻找常用加密算法中的常数(需要安装 [yara-python](https://github.com/VirusTotal/yara-python)

View File

@ -1 +1,10 @@
# 2.2.3 JEB
- [快捷键](#快捷键)
- [参考资料](#参考资料)
## 快捷键
## 参考资料
- https://www.pnfsoftware.com/

View File

@ -13,6 +13,7 @@
- F9运行被调试软件继续运行直到遇到下一个断点。
- Ctrl+F9执行到返回在执行到一个 ret 指令时暂停,常用于从当前函数快速返回到上一个函数。
- Alt+F9执行到用户代码可用于从系统部分快速返回到被调试程序部分。
- Ctrl+G查看任意地址的数据。
## 命令行插件

View File

@ -1,10 +1,57 @@
# 2.3.4 WinDbg
- [快捷键](#快捷键)
- [命令](#命令)
- [参考资料](#参考资料)
## 快捷键
- F10单步步过
- F11单步步入
- Shift+F11跳出当前函数
## 命令
- 调试
- `t`:单步步入
- `p`:单步步过
- 执行
- `g [addr|func]`:执行到指定位置
- `gh [addr|func]`:执行到指定位置,遇到异常时中断
- `gn [addr|func]`:执行到指定位置,遇到异常时忽略
- 断点
- `bl`:列出已设置的断点
- `be [ID]`:激活断点
- `bd [ID]`:禁用断点
- `bc [ID]`:清除断点
- `bp [addr|func]`:设置断点
- 数据显示
- `d [addr]`:显示内存数据
- `db [addr]`:按字节模式显示
- `dd [addr]`:按双字模式显示
- `dD`:按双精度浮点数显示
- `da`:按 ASCII 显示
- `du`:按 Unicode 显示
- `ds`:按字符串显示
- `dt`:套用已知的数据结构模板显示
- 数据编辑
- `e [addr] [data]`:修改任意地址内存的值
- `eb [addr] [data]`:以字节写入
- `ed [addr] [data]`:以双字写入
- `ea [addr] [data]`:以 ASCII 字符写入
- `eu [addr] [data]`:以 Unicode 字符写入
- 栈帧显示
- `k [x]`由栈顶开始列出当前线程中的栈帧x 为需要回溯的栈帧数
- `kb [x]`:可以额外显示 3 个传递给函数的参数
- 寄存器显示
- `r [reg]`:显示指定寄存器的值
- 模块显示
- `lm`:列出当前已经读入的所有模块
- 反汇编
- `u`:反汇编当前指令后的几条指令
- `u [start]`:从指定位置开始反汇编
- `u [start] [end]`:反汇编指定地址区间
## 参考资料
- https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/

View File

@ -1,4 +1,4 @@
# 4.9 patch 二进制文件
# 3.2.1 patch 二进制文件
- [什么是 patch](#什么是-patch)
- [手工 patch](#手工-patch)

1
doc/3.2.2_pe_unpack.md Normal file
View File

@ -0,0 +1 @@
# 3.2.2 脱壳技术PE

1
doc/3.2.3_elf_unpack.md Normal file
View File

@ -0,0 +1 @@
# 3.2.3 脱壳技术(ELF)

View File

@ -1,8 +1,7 @@
# 5.9 反调试技术
# 3.2.4 反调试技术
- [什么是反调试](#什么是反调试)
- [Windows 下的反调试](#windows-下的反调试)
- [Linux 下的反调试](#linux-下的反调试)
- [反调试技术](#反调试技术)
- [参考资料](#参考资料)
@ -10,7 +9,7 @@
反调试是一种重要的软件保护技术,特别是在各种游戏保护中被尤其重视。另外,恶意代码往往也会利用反调试来对抗安全分析。当程序意识到自己可能处于调试中的时候,可能会改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。
## Windows 下的反调试
## 反调试技术
下面先介绍几种 Windows 下的反调试方法。
#### 函数检测
@ -266,8 +265,5 @@ BOOL CheckDebug()
行为占用是指在需要保护的程序中,程序自身将一些只能同时有 1 个实例的功能占为己用。比如一般情况下,一个进程只能同时被 1 个调试器调试,那么就可以设计一种模式,将程序以调试方式启动,然后利用系统的调试机制防止被其他调试器调试。
## Linux 下的反调试
## 参考资料
- [详解反调试技术](https://blog.csdn.net/qq_32400847/article/details/52798050)

View File

@ -0,0 +1 @@
# 3.2.5 反调试技术ELF

View File

@ -1,4 +1,4 @@
# 4.11 指令混淆
# 3.2.6 指令混淆
- [为什么需要指令混淆](#为什么需要指令混淆)
- [常见的混淆方法](#常见的混淆方法)

View File

@ -14,6 +14,12 @@
* [3.1.11 Windows 内核漏洞利用](3.1.11_windows_kernel_exploit.md)
* [3.1.12 竞争条件](3.1.12_race_condition.md)
* Reverse
* [3.2.1 patch 二进制文件](3.2.1_patch_binary.md)
* [3.2.2 脱壳技术PE](3.2.2_pe_unpack.md)
* [3.2.3 脱壳技术(ELF)](3.2.3_elf_unpack.md)
* [3.2.4 反调试技术PE](3.2.4_pe_anti_debugging.md)
* [3.2.5 反调试技术ELF](3.2.5_elf_anti_debugging.md)
* [3.2.6 指令混淆](3.2.6_instruction_confusion.md)
* Web
* [3.3.1 SQL 注入利用](3.3.1_sql_injection.md)
* [3.3.2 XSS 漏洞利用](3.3.2_xss.md)

8
doc/4.9_shellcode.md Normal file
View File

@ -0,0 +1,8 @@
# 4.9 shellcode 开发
- [参考资料](#参考资料)
## 参考资料
- http://shell-storm.org/shellcode/
- https://www.exploit-db.com/shellcode/

View File

@ -8,9 +8,9 @@
* [4.6 one-gadget RCE](4.6_one-gadget_rce.md)
* [4.7 通用 gadget](4.7_common_gadget.md)
* [4.8 使用 DynELF 泄露函数地址](4.8_dynelf.md)
* [4.9 patch 二进制文件](4.9_patch_binary.md)
* [4.10 反调试技术](4.10_antidbg.md)
* [4.11 指令混淆](4.11_instruction_confusion.md)
* [4.9 shellcode 开发](doc/4.9_shellcode.md)
* 4.10
* 4.11
* [4.12 利用 __stack_chk_fail](4.12_stack_chk_fail.md)
* [4.13 利用 _IO_FILE 结构](4.13_io_file.md)
* [4.14 glibc tcache 机制](4.14_glibc_tcache.md)