Skip to main content

👾CNSS 2024 Bin Guideline

Bin 方向,也称二进制方向,主要是分析,利用二进制文件。主要方向分为注重于代码逻辑逆向的 Reverse ,和注重于程序漏洞利用的 Pwn 。尽管如此,二者也并非是分离的,Pwn 学习是需要一定逆向基础,逆向学好学 Pwn 也会事半功倍。建议学习 Pwn 之前先了解一下基础的 Re 知识。

🔍Reverse

Reverse,顾名思义,逆向。Re 选手会对题目的二进制运行文件进行逻辑分析与代码利用。在逆向工程中,它可以是寻找程序的加密和验证算法从而写出注册机程序,也可以在汇编级别寻找代码中匪夷所思的 bug。在 CTF 中则是绕过坑和陷阱,找到隐藏的 flag。

逆向工程的学好离不开坚实的基础和练习,对于刚接触的新人来说是很需要耐心和毅力。学好逆向工程不是特别容易的事情。

最后想说,Re 的学习还是需要做题目的经验。有时一份好的 Writeup (WP) 会比一本书带来的收获还要多,从 Writeup 中你收获的不仅仅有原来 flag 在这里 ,还有原来 flag 是这样找到的

💥Pwn

Pwn,通过逆向工程寻找和利用漏洞。其意义比较接近大家印象中的黑客,深挖服务器漏洞来夺取服务器的权限。CTF 中,题目往往会设置一个情景,模拟正常运行服务的服务器供 Pwn 选手攻破。

Pwn 的学习则是熟悉计算机漏洞与编写攻击脚本(称之为 exp)。和 Re 一样,它的学习也离不开经验的积累。Pwn 的学习需要兼顾深度和广度,需要对底层的深入认知,也需要阅尽千帆,识题百味。如果想简单的了解一下,可以先了解一下函数调用栈,再看看基础的栈溢出

阅读前人的 Writeup 是学习 Pwn 的重要手段,一份优秀的 Writeup 可以四两拨千斤,收到一点而通的效果。

最后想说,Pwn 选手往往是 CTF 中的中流砥柱,有了前期积累后 Pwn 的学习不再会像新手期那么难。希望大家不要被它所需的基础吓到,它是十分有趣的一个方向。

🦅学会了 Reverse / Pwn 后能干什么?

Reverse

  • 逆向软件,编写注册机,破解软件或是更改一些应用。
  • 外挂,病毒分析,都出自逆向工程。

Pwn

  • 发掘路由器,服务器漏洞,维护网络安全。
  • 代码审计,渗透测试,为计算机系统提供安全服务。

📚Bin 学习指北

✨总纲

做题,做题,做题,然后谷歌,然后再看书。一般而言,Re 前面的招新题是往往不需要基础也能做出来的环境题,在解题过程中会帮助你熟悉和了解相关知识。当卡住或者困惑时,先尝试关键词检索。比如新人在动态调试方向一头雾水,可以先试试谷歌 “ctf re 动态调试”,再应用在解题中。CTF 是一门高度依赖于网络搜索的竞赛。

对于多而杂的二进制知识,吸收信息的速度和能力非常重要。做题的时间和看题解学习的比例应该在 1:3,切忌吊死在一道题上苦思冥想(坐牢)。一开始的学习可以直接看别人写的 WP,因为此时接触过的东西是全新的,不会就是不会,苦思冥想一整天不会有任何收获。个人博客、知乎、b站的视频和学长都是非常好的资源,最后才是啃书。如果看到 WP 里不会的知识点,要意识到这个地方的前置知识我没有掌握,需要递归的搜索下去,最后构建出成体系的知识树,这非常重要。

🔯强烈建议同时阅读 Dev Guideline

🛫基础

  • 语言基础

    如果是零基础编程小白的话,建议先从 C 语言开始学起。不用太过纠结现代语法和面向对象之类的东西,只需要了解偏底层原理的函数、指针等知识就够了,了解底层的原理才是最重要的。在 b 站上有许多自学教程视频,《C Primer Plus》也是不错的入门书。多多搜索,相信你能找到更适合你学习的资源。

    同时,了解一些 python 也是必要的,同样的不需要去深入了解那些高大尚的功能,把它当作一个脚本语言快速入门就行了。(后面 IDA 或 pwn 会经常使用 python 来编写脚本)

    后续的题目会有诸如java或rust或go之类的现代语言出现,如果你感兴趣并相当有空也可以学学。

  • Linux基础

    其实不单单是 Linux ,在这个过程中你会学习到命令行工具的使用常识,一些计算机的基础知识(程序猿的所谓常识),还有一些只能在命令行里使用的工具。可以尝试安装一个虚拟机,在网上找教程去学习 Linux 命令(挑战任务:安装Arch ,尝试去美化成你认为最好看的样子,并保持一个星期不崩溃),最后在 WSL 里安装 kali 作为你长期做题的伙伴吧。(强推Linux命令行大全 - 绍茨 (william E.shotts))

  • 汇编语言 大部分逆向分析最终还得回到汇编层面的分析,这里推荐汇编语言学习来快速入门,如果想更深入了解,可以看王爽的《汇编语言》。

  • 一些常用的工具软件

    • Notion 或 Obsidian 或 VSCode 插件

      学会使用 markdown 来记录和整理你学过的东西,编写自己的 WP,搭建出属于你自己的技能树。

    • VS Code

      是一个强大的代码编辑器,里面有各种各样的插件。

    • IDA Pro

      IDA 是一个功能十分强大的可执行文件分析工具。是所有 Bin 选手必须接触的。不过无需担心不会使用,流程图设计和 Hex-Rays 插件大大降低了学习门槛。在后面也会有很多题会针对 IDA ,让它失效。不过这都是后话了。如果想看看在 CTF 中实际使用的样子,可以看看这个

    • Pwntool

      Pwntool 是 Pwn 题很重要的工具,也是 Pwn 方向的基础。哪怕作为一种正常工具它的功能也很强大。注意,学习 Pwntool 是需要一点点的 Python 基础的,不过不会很难,如果你已经有了做 Pwn 的基础,这点不会是什么问题。不建议新手一上来就去做 Pwn 的题目,还是有基础的语言&计组知识再来尝试。若你理解简单的 Pwn 题(如栈溢出)并且复现,那么你就拥有了 Pwn 的基础。

    • GNU Debugger

      gdb 是泛用的动态调试工具,本体对初学者十分不友好(类似 TEX),可以考虑使用基于它的 distro,如*(善用搜索引擎)*。

要注意的是,各个方向的知识是不可能学完的, 你需要在了解到相应基础知识的情况下付诸实践, 才能得到更好的效果。 因此 Bin 方向的书单、知识在前期不需要过于深入,有时在解题过程的问题 google 解决即可。

🥫资源

😯碎碎念

Guideline 真正的精华(超小声(

  • 做了这么多年学生,大家应该都能体会到,越是“高级”和“复杂”的知识,在学习过程中找到那种“体系感”才是关键,而这种体系感的获得只能依赖自主学习、读书和思考
  • 没有任何一条已走过的路真正适合你
  • 深度是你的上确界,广度是你的下确界
  • 相信你一定已经阅读了所有的 Guideline,谢谢
  • 如果你
    • 有什么问题实在无法解决
    • 有什么建设性意见
    ↓请猛击下方↓

🔨敲打负责人

@Chen @Cyril @Orchid