iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
1
Security

逆向工程 – 從入門到放棄系列 第 1

Day1 - 大綱

為什麼要逆向工程 (Reverse Engineering)?

當今世界的運作,縱然有些科技你無需了解其原理,但你卻能感受到缺了它,生活便會極度不便。比方說,大家生活中使用的網際網路,使用者有需要知道網路7層、TCP/IP 的交握方式或是 DNS 背後的運作原理嗎?答案是:不用。使用者仍然可以安心看臉書、逛線上商圈。但,正因為好奇,才會讓自己在追求理解原理的過程中,有稍稍活著的感覺。

人類,是好奇的生物。正是因為好奇,才使得人類社會發明日新月異的技術,得以更加進步。

Human curiosity, the urge to know, is a powerful force and is perhaps the best secret weapon of all in the struggle to unravel the workings of the natural world.
-- 1982 Nobel Prize in Chemistry-Aaron Klug

小時候被好奇心驅使,總喜歡拆電風扇、電腦、手機、各式電器用品,再重新組裝回去,每每電器重新運作的時候,成就感旋即油然而生。但更多時候,是拆掉後,裝不回去,這時候總不免懊悔不已。然而,犯錯的時侯,更是學習的機會—物件裝不回去,不免是組裝的步驟錯了、還是方向反了、抑或錯誤經驗的刻板印象在作祟。因此,每當我解決一道道難關,思考便更加縝密,也逐漸有了從反方向來觀察的習慣。

上了大學,不小心走進資訊安全的領域,開始研究程式的逆向工程(簡稱逆向)。
會想分享逆向主題文章主要原因如下:

  • 好奇
    總是好奇:電腦是如何讀懂程式碼?電腦不是0和1的邏輯電路構成的嗎、為什麼在寫程式的時候不用寫一大堆0與1就能與它溝通?如果它跑得動,不就代表它中間有經過處理、剖析、那它到底是怎麼運作的?我能不能夠過逆向來更加了解電腦(CPU)的運作邏輯?打 CTF 的時候很常遇到 Reverse 題目,
    有哪些工具、技巧可以運用?惡意程式到底有什麼行為、我應該如何分析?

大綱

以下是我預計的大綱,排列順序只供參考。若符合排序,只能說是運氣好(按照計畫順利走),若不符合排序,只能說計劃趕不上變化,請讀者見諒。

0x01 鐵人賽撰文大綱

  • 大綱

0x02 初探組合語言

  • 寫程式的濫觴 - 用組合語言寫 Hello world!
  • 逆起來 - 逆向 Hello world!
  • 程式碼如何分段?

0x03 組合語言介紹

  • 記憶體到底如何存放程式?
  • 為什麼要使用暫存器?
  • 組合語言- 不可不知之定址模式 - 上篇
  • 組合語言指令 - 記憶體存取 - 簡介
  • Syscall - 簡介

0x04 逆向的方法與工具

  1. 肉體逆向
    • 史上最強 Debugger - 人體肉眼 Debugger
  2. 工具逆向
    • 跨平台 逆向神器 - IDA Pro
    • Linux 逆向神器 - Radare2
    • Linux 超強 Debugger - GDB
    • Mac 逆向工具 - Hopper Disassembler

0x05 逆向一般函式

  • Stack
  • Function Prologue/Epilogue
  • Variables
  • If Statement
  • Loop
    • for
    • while
    • do while
  • Function
  • Pointer
    • array

0x06 應用

  • 過去累積的一些小程式(Linux)
    • lab0
    • lab1
    • lab2
    • lab3
    • lab4
    • lab5
    • lab6
  • liveroverflow 有趣的小程式
    • license逆向
    • 打 patch
    • 防止逆向

0x07 資源

使用的硬體規格

  • OS:
    • Mac:Darwin Kernel Version 19.6.0
    • Linux:Ubuntu 19.10
  • Compiler
    • gcc:gcc version 9.2.1

下一篇
Day2 - 寫程式的濫觴 - 用組合語言寫 Hello world!
系列文
逆向工程 – 從入門到放棄30

尚未有邦友留言

立即登入留言