如果你已经能看懂 C 语言里的指针运算,也能在 Linux 下用 gdb 跑起一个会崩溃的小程序,但面对「这个 crash 到底能不能利用、怎么利用」说不出个所以然,那这门课补的就是这一段。它不是给零基础准备的,也不需要你假装什么都懂——但你得先承认自己卡在哪:是栈溢出的偏移算不准,还是看到堆就头疼,又或者 ROP 链一长就不知道从哪下笔。

先确认一下你的缺口在哪

二进制安全的学习路径有个特点:看别人写 writeup 都懂,自己上手就断片。常见卡点无非几个:栈溢出的 ret 覆盖和 shellcode 落点算得清,但换个保护机制就哑火;知道 ROP 是拿 gadget 拼调用链,可真给你一个二进制,找 gadget、控寄存器、过 ASLR 这几步是分开的;堆就更别提了——glibc 的 malloc/free 流程能背,但一到 unlink、fastbin dup、tcache 这些具体手法,脑子里没有可用的模型。

这门系列课覆盖的点,基本就是照着这些缺口排的:Linux 堆内存管理、Windows 用户堆的利用基础、LFH(低碎片堆)、栈溢出、Linux 环境下的 ROP。它没有把 Windows 和 Linux 拆成两门互不相干的课,而是让你意识到同一类问题在两套内存分配器上长得不一样,利用思路却是一脉相承的。

堆为什么非讲不可

栈溢出好理解,因为栈的行为足够线性;堆不是。堆的分配、释放、合并、复用涉及大量状态,chunk 的元数据、bin 的组织方式、分配器的缓存策略,每一层都可能成为利用点。课程里花了不少篇幅在 Linux 的堆管理上,讲清楚一个 chunk 从申请到释放经历了什么,后面再看 fastbin、unsorted bin、tcache 的利用手法时,就不是背套路,而是推导。

Windows 这边单独拎出了用户堆的利用基础和 LFH。LFH 是 Windows 堆在特定条件下启用的一种前端分配机制,理解它的意义在于:同一份 exploit 思路,在启用 LFH 后可能完全失效,你得知道为什么失效、以及绕的方向在哪。这部分是很多人只听说过名字、没真正弄明白的地方。

ROP 是绕不开的分水岭

现代环境下直接往栈上写 shellcode 再跳过去的机会越来越少,ROP 成了绕开不可执行栈的常规手段。课程把 Linux 环境下的 ROP 单独展开,重点不在于记住几条 gadget,而在于建立流程:怎么在目标二进制和 libc 里找可用片段,怎么布置栈上的返回地址链,怎么处理参数传递。学完之后你再看一道 pwn 题,第一步该做什么、信息泄露怎么配合,心里会有顺序。

配套练习和自测

建议的学法:每看完一个技术点,立刻找一个对应的靶机或自己写的小 demo 复现一遍,哪怕只是把一个已知的栈溢出从算偏移到拿到 shell 完整走通。堆的部分更适合用 gdb 配合插件观察 chunk 的实际变化,而不是只看代码。

看完应该能回答这些问题:一个 fastbin chunk 被释放后又申请回来,元数据经历了什么?同样是控制返回地址,栈溢出和 ROP 在前提条件上差在哪?LFH 启用后,之前能用的堆利用手法为什么失效?如果这几个问题你现在答不上来,那这门课值得从头过一遍。

二进制安全系列

深入浅出二进制安全技术

编辑点评

系统讲解二进制安全,涵盖堆内存管理、ROP利用、栈溢出等多种技术,适合进阶学习者。

⭐ 编辑推荐

本系列课程深入浅出地讲解了二进制安全领域的核心知识,包括Linux和Windows系统的堆内存管理、ROP技术、栈溢出等,适合有志于深入了解二进制安全的开发者。

课程亮点

• 系统讲解二进制安全
• 涵盖多种技术点
• 适合进阶学习者

课程目录

📁 0x12 浅析Linux堆内存管理
    浅析Linux堆内存管理.mp4  [194.2 MB]
📁 0x11 【特别篇】深入理解LFH
    【特别篇】深入理解LFH.mp4  [230.6 MB]
📁 0x10 近代Windows用户堆的利用基础
    近代Windows用户堆的利用基础.mp4  [210.3 MB]
📁 0x09 Linux环境下的ROP(上)
    Linux环境下的ROP(上).mp4  [144.6 MB]
📁 0x08 DEP与ASLR简述
    DEP与ASLR简述.mp4  [86.0 MB]
📁 0x07 一次失败的栈溢出(SEH)之GetGo Download Manager
    一次失败的栈溢出(SEH)之GetGo Download Manager.mp4  [75.9 MB]
📁 0x06 另辟蹊径之覆盖SEH
    另辟蹊径之覆盖SEH.mp4  [118.1 MB]
📁 0x05 探索stack cookie
    探索stack cookie.mp4  [78.6 MB]
📁 0x04 经典栈溢出实例之DNSTracer
    经典栈溢出实例之DNSTracer.mp4  [181.3 MB]
📁 0x03 经典栈溢出实例之EasyRM2MP3
    经典栈溢出实例之EasyRM2MP3.mp4  [190.3 MB]
📁 0x02 经典栈溢出(下)
    经典栈溢出(下).mp4  [123.8 MB]
📁 0x0F 【特别篇】Windows上古-近代堆详述
    【特别篇】Windows上古-近代堆详述.mp4  [210.6 MB]
📁 0x0E 探索上古Windows用户堆
    探索上古Windows用户堆.mp4  [191.8 MB]
📁 0x0D Windows环境下的ROP(下)
    Windows环境下的ROP(下).mp4  [151.4 MB]
📁 0x0C Windows环境下的ROP(上)
    Windows环境下的ROP(上).mp4  [169.4 MB]
📁 0x0B Linux下ROP练习之r0pbaby[CTF-2015-defcon]
    Linux下ROP练习之r0pbaby[CTF-2015-defcon].mp4  [109.2 MB]
📁 0x0A Linux环境下的ROP(下)
    Linux环境下的ROP(下).mp4  [144.0 MB]
📁 0x01 经典栈溢出(上)
    经典栈溢出(上).mp4  [158.3 MB]
📁 slides
    经典栈溢出.pptx  [1.6 MB]
    探索Stack Cookie.pptx  [996.2 KB]
    Linux环境下的ROP.pptx  [2.8 MB]
    另辟蹊径之覆盖SEH.pptx  [1.0 MB]
    探索上古Windows用户堆.pptx  [997.8 KB]
    浅析Linux堆内存管理.pptx  [1.6 MB]
    近代Windows用户堆的利用基础.pptx  [1.0 MB]
    DEP & ASLR简述.pptx  [1.8 MB]
    Windows环境下的ROP.pptx  [1.1 MB]
📁 二进制安全(国外)
    📁 Binary_Hacking_Course
        Writing a simple Program in Python - bin 0x03-ajy1PHWYeyQ.mkv  [37.7 MB]
        Uncrackable Programs Key validation with Algorithm and creating a Keygen - Part 1_2 - bin 0x07-qS4VWL5R_OM.mkv  [37.8 MB]
        Uncrackable Program Finding a Parser Differential in loading ELF - Part 2_2 - bin 0x08-OZvc-c1OLnM.mkv  [34.9 MB]
        The Heap - Once upon a free() - bin 0x17-gL45bjQvZSU.mp4  [96.5 MB]
        The Heap - How to exploit a Heap Overflow - bin 0x15-TfJrU95q1J4.mp4  [75.5 MB]
        The Heap - How do use-after-free exploits work - bin 0x16-ZHghwsTRyzQ.mp4  [48.6 MB]
        The Heap - dlmalloc unlink() exploit - bin 0x18-HWhzH--89UQ.mkv  [35.6 MB]
        The deal with numbers - hexadecimal binary and decimals - bin 0x0A-mT1V7IL2FHY.mkv  [32.4 MB]
        Socket programming in python and Integer Overflow - bin 0x1B-d6BU8DWxb3c.mp4  [47.5 MB]
        LiveOverflow Channel Introduction and Backstory - bin 0x00-iyAyN3GFM7A.mkv  [27.5 MB]
        Linux signals and core dumps - bin 0x1C-_shKdU7mGxs.mkv  [42.4 MB]
        Introduction to Linux - Installation and the Terminal - bin 0x01-navuBR4aJSs.mkv  [46.2 MB]
        How a CPU works and Introduction to Assembler - bin 0x04-6jSKldt7Eqs.mkv  [72.9 MB]
        First remote root exploit - bin 0x1D-HAN8Qun26cQ.mkv  [32.9 MB]
        First Exploit! Buffer Overflow with Shellcode - bin 0x0E-HSlhY4Uy8SA.mkv  [49.5 MB]
        Bruteforce 32bit Stack Cookie. stack0 - part 3 - bin 0x23-KGzHcqJV-QM.mkv  [52.3 MB]
        A simple Format String exploit example - bin 0x11-0WvrSfcdq1I.mkv  [45.4 MB]
        First steps into networking with net0 from exploit.education protostar - bin 0x19-2CL-AAcgyuo.webm  [42.2 MB]
        Explaining Dirty COW local root exploit - CVE-2016-5195-kEsshExn7aE.mkv  [46.1 MB]
        Rooting a CTF server to get all the flags with Dirty COW - CVE-2016-5195-Lj2YRCXCBv8.webm  [23.3 MB]
        Developing an intuition for binary exploitation - bin 0x20-akCce7vSSfw.mkv  [22.6 MB]
        Global Offset Table (GOT) and Procedure Linkage Table (PLT) - bin 0x12-kUk5pw4w0h4.mkv  [68.5 MB]
        First Stack Buffer Overflow to modify Variable - bin 0x0C-T03idxny9jE.mkv  [37.0 MB]
        Adapting the 32bit exploit to 64bit for format4 - bin 0x27-_lO_rwaK_pY.mkv  [25.5 MB]
        Buffer overflow on a modern system impossible stack0 - part 1 - bin 0x21-4HxUmbOcN6Y.webm  [51.3 MB]
        Writing a simple Program in C - bin 0x02-JGoUaCmMNpE.mkv  [34.1 MB]
        Doing ret2libc with a Buffer Overflow because of restricted return pointer - bin 0x0F-m17mV24TgwY.mkv  [101.5 MB]
        Simple Tools and Techniques for Reversing a binary - bin 0x06-3NTXFUxcKPc.mkv  [61.9 MB]
        Format String Exploit and overwrite the Global Offset Table - bin 0x13-t1LH9D5cuK4.mkv  [39.6 MB]
        Identifying another exploit mitigation and find bypass. stack0 - part 2 - bin 0x22-MMm0I2Dj51A.webm  [39.0 MB]
        format2 on a modern Ubuntu - bin 0x26-Kc6_PpdbcCw.webm  [37.6 MB]
        [Live] Remote oldschool dlmalloc Heap exploit - bin 0x1F-2GVi8_9u5TY.webm  [1.3 GB]
        heap0 exploit speedrun & weird ASCII string on the Heap - bin 0x28-fJMnH0kCAak.webm  [52.0 MB]
        Reverse engineering C programs - bin 0x10-vXWHmucgZW0.mkv  [53.6 MB]
        Syscalls, Kernel vs. User Mode and Linux Kernel Source Code - bin 0x09-fLS99zJDHOc.mkv  [63.8 MB]
        Playing around with a Format String vulnerability and ASLR. format0 - bin 0x24-CyazDp-Kkr0.mkv  [86.8 MB]
        Remote format string exploit in syslog() - bin 0x1E-MBz5C9Wa6KM.mkv  [75.3 MB]
        Buffer Overflows can Redirect Program Execution - bin 0x0D-8QzOC8HfOqU.mkv  [25.5 MB]
        Stack grooming and 100% reliable exploit for format0 - bin 0x25-AahpiYxKR2c.mkv  [26.1 MB]
        Reversing and Cracking first simple Program - bin 0x05-VroEiMOJPm8.mkv  [98.6 MB]
        TCP Protocol introduction - bin 0x1A-0EHo0HsTKJw.mkv  [71.8 MB]
        The Heap - what does malloc() do - bin 0x14-HPDBOhiKaD8.mkv  [31.4 MB]
        Smashing the Stack for Fun and Profit - setuid, ssh and exploit.education - bin 0x0B-Y-4WHf0of6Y.mkv  [44.4 MB]

适合人群

  • 网络安全工程师
  • 二进制安全爱好者
  • 系统程序员

学习收获

掌握二进制安全基础
精通堆内存管理技术
学会ROP利用技巧

祝您学习愉快!

学有所成,前程似锦!