Try   HackMD

Intro to Reverse Engineering

逆向工程是什麼?

對已經編譯完成的可執行文件進行分析,通過反匯編工具查看程序的二進制代碼,以及匯編塊,研究程序的行為和算法,然後以此為依據,得出出題人隱藏的 flag。

逆向工程有什麼?

逆向類題目是 CTF 中難度相對較高的題型,現已覆蓋 Windows 逆向、Linux 逆向和 Android 逆向,再加上 Flash 逆向、Python 逆向、.NET 逆向、ARM 逆向等。

目前主流的逆向文件平台有 Windows 和 Linux,這兩個平台的逆向工程發展時間最久,其可變靈活度也很高,所以目前 CTF 中的逆向題目也就自然而然地成為了難度很大的方向。

CTF 中給出的題目常見形式有 ELF 文件、exe 文件、dll 文件等。同時,也有直接將一段匯編代碼塞到 txt 裏直接丟給你的情況。以上這些在後續的例題中也會隨之講到。

以上這些文件形式又會以不同的加密方法出現:混淆、花指令、加殼、覆雜算法、覆雜匯編等。我們需要突破這些障礙,去拿到我們想要的 flag 字符串。

逆向工程怎麼做?

就我個人觀點,在進行 CTF 逆向時,我們需要做到以下方面的準備:Tool(工具)、Language(語言)、Stick(肝),簡稱 TLS (傳輸層安全協議 ),如果非要多加一個那就是 Observation and Analysis(代碼分析能力)。

Tool : 指在進行逆向分析時所需要用到的軟件,我們常見的有 DIE、IDA、GDB、Ollydbg(簡稱 OD)、Cheat Engine(簡稱 CE) 等。

這些工具的用法在後面的章節中都會教大家如何 Quick Start。

Language : 語言這個詞在這裏提出來,那肯定不是單純的英語了,這裏指電腦語言。

在進行逆向工程的過程中,我們難免要編寫一些腳本去計算或者模擬出題人給我們的一些過程,從而去尋找我們想要的 flag。

最常見也最常用的編程語言就是 Python,其次是 C++ 和 Java。除去編程語言,還有一個語言比較重要,那就是組合語言 (簡稱 ASM):組合語言與早期的編程環境比較接近,與機器碼 (HEX、BIN) 比較接近,但是可以讓人比較容易看懂,搞嵌入式的同學可能會經常搞這些。在 CTF 逆向中,我們需要面臨的有 x86 匯編和 x64 匯編,也即 32 位匯編和 64 位匯編;兩者雖然同為組合語言,但是它們之間還是存在一些差別的,所以在學習的時候兩個都不能有過於傾向的情況,都要認真去學習。

在後面的課程中,我們會提到一些關於 ASM 的 Quick Start 方法。