一些关于Pwn的学习链接

暑假学习计划 - 0x01

最近整理一些有关Pwn的学习链接,同时也要感谢@某位小仙女的整理

以后应该还会继续更新一些

0x00 Pwn整体学习路线&&相关知识点 https://ctf-wiki.github.io/ctf-wiki/

0x01 一步一步学ROP之linux_x86篇 – 蒸米 http://www.vuln.cn/6645

0x02 一步一步学ROP之linux_x64篇 – 蒸米 http://www.vuln.cn/6644

0x03 Heap Exploitation https://heap-exploitation.dhavalkapil.com/

0x04 用图形展示堆利用过程 https://veritas501.space/2017/07/25/%E5%9B%BE%E5%BD%A2%E5%8C%96%E5%B1%95%E7%A4%BA%E5%A0%86%E5%88%A9%E7%94%A8%E8%BF%87%E7%A8%8B/

0x05 GOT表和PLT表知识详解 https://blog.youkuaiyun.com/qq_18661257/article/details/54694748

0x06 checksec及其包含的保护机制 http://yunnigu.dropsec.xyz/2016/10/08/checksec%E5%8F%8A%E5%85%B6%E5%8C%85%E5%90%AB%E7%9A%84%E4%BF%9D%E6%8A%A4%E6%9C%BA%E5%88%B6/

0x07 CTFs(很多wp) https://github.com/ctfs/

0x08 ubuntu16.04安装最新版本的wine https://blog.youkuaiyun.com/daxiangqqcom/article/details/78465638

0x09 GDB使用方法总结 https://blog.youkuaiyun.com/lixungogogo/article/details/52154858#t0

0x0A gdb调试系列教程 https://blog.youkuaiyun.com/haoel/article/details/2879

0x0B IDA_Pro_7.0 绿色版 https://www.52pojie.cn/thread-675251-1-1.html

0x0C IDA_Pro_6.4 for Linux https://pan.baidu.com/s/1dDUi5J7?fid=522748291811429

0x0D CTF工具集合安装脚本操作姿势 http://www.freebuf.com/sectool/94235.html

### 学习PWN汇编基础 #### 了解基本概念 在学习PWN相关的汇编基础知识之前,理解计算机体系结构中的几个重要部分至关重要。程序运行时会涉及到不同的内存段,其中包括代码段(text segment),这部分专门用于存储程序执行所需的机器指令[^4]。 对于x86架构而言,掌握其特有的寄存器集合同样必不可少。这些寄存器被CPU用来保存临时数据以及控制流信息,在函数调用过程中扮演着极为重要的角色[^2]。 #### 掌握工具使用 为了更好地理解和调试汇编代码,熟悉一些常用的Linux命令行工具也是必要的: - `ldd` 命令可以显示动态链接库的信息; - `nm` 可以列出目标文件里的符号表条目; - `hexdump` 则能帮助查看二进制文件的内容并将其转换成易于阅读的形式[^3]。 #### 实践编写简单程序 下面是一个简单的C语言源码及其对应的汇编表示形式的例子,这有助于初学者建立起高级语言与底层实现之间的桥梁。 假设有一个非常简单的C程序如下所示: ```c // hello.c #include <stdio.h> int main() { printf("Hello, world!\n"); return 0; } ``` 通过GCC编译此文件,并加上 `-S` 参数来生成汇编代码: ```bash gcc -m32 -S hello.c -o hello.s ``` 得到的部分汇编代码可能看起来像这样(简化版): ```assembly .text .global _start _start: push ebp ; 设置新的栈帧基址指针 mov ebp, esp ; sub esp, 0x10 ; 为局部变量预留空间 lea eax, [hello_str]; 加载字符串地址到EAX寄存器中 call puts ; 调用puts函数输出消息 xor eax, eax ; 清零EAX准备作为返回值 leave ; 恢复之前的栈状态 ret ; .data hello_str: .asciz "Hello, world!" ``` 这段汇编代码展示了如何设置函数框架、处理参数传递、调用外部APIs如`puts()`来进行I/O操作,最后清理现场并退出。 #### 关键知识点总结 - **寄存器**:深入了解各个通用目的寄存器的作用,特别是ESP/EIP/EBP等特殊用途的寄存器。 - **内存布局**:清楚认识进程内的不同内存区划分方式,尤其是`.text`, `.data`, 和堆栈区域的功能差异。 - **函数调用约定**:明白标准C/C++函数是如何构建和销毁它们自己的栈帧,包括参数压栈顺序及返回地址管理机制。 - **常用工具链**:熟练运用诸如GDB/GEF这样的调试辅助软件以及其他静态分析工具,以便更高效地逆向工程或漏洞挖掘工作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值