iT邦幫忙

鐵人檔案

第 12 屆 iT 邦幫忙鐵人賽
回列表
Security

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

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

鐵人鍊成 | 共 30 篇文章 | 30 人訂閱 訂閱系列文 RSS系列文 團隊好想工作室 v4.0
DAY 1

Day1 - 大綱

為什麼要逆向工程 (Reverse Engineering)? 當今世界的運作,縱然有些科技你無需了解其原理,但你卻能感受到缺了它,生活便會極度不便。比方說,大...

2020-09-16 ‧ 由 @x0mg 分享
DAY 2

Day2 - 寫程式的濫觴 - 用組合語言寫 Hello world!

學習一門新的程式語言,大多會從 Hello world 切入。完成後,總覺得離這門語言更親近一步XD Day2,我會講解如何使用組合語言寫 Hello worl...

2020-09-17 ‧ 由 @x0mg 分享
DAY 3

Day3 - 逆起來 - 逆向 Hello world!

今天的重頭戲,正是逆向昨天剛寫好的 Hello world,從反方向觀察程式碼的長相。如果運用得宜,你可以更了解程式的具體行為。在生活中,逆向工程使用時機就好比...

2020-09-18 ‧ 由 @x0mg 分享
DAY 4

Day4 - 程式碼如何分段?

一般而言,系統會將程式碼與 data 分離,所以才會有分段的產生,因此不同目的程式碼對系統而言儲存的位置也不同。 資料的分段(Section) 縱覽 我先用一張...

2020-09-19 ‧ 由 @x0mg 分享
DAY 5

Day5 - 記憶體到底如何存放程式?

記憶體在電腦中扮演極重要的角色。生活中,每次想多開幾個瀏覽器,電腦就開始 lag 甚至最後當機、跑不動,與記憶體的使用息息相關。本篇中,會說明程式在記憶體中的配...

2020-09-20 ‧ 由 @x0mg 分享
DAY 6

Day6 - 為什麼要使用暫存器?

我在 Day2 的文章裡有講到暫存器(e.g. eax, ebx),可能對初學者而言相對陌生。這篇主要來介紹這些暫存器代表的意義與使用時機。 為什麼要使用暫存器...

2020-09-21 ‧ 由 @x0mg 分享
DAY 7

Day7 - 組合語言- 不可不知之定址模式 - 上篇

多數組合語言指令(instructions)需透過運算元(operand)來存取資料[可以把運算元想像成容器]。有一些指令不需要運算元即可存取資料,而另一些指令...

2020-09-22 ‧ 由 @x0mg 分享
DAY 8

Day8 - 組合語言 - 不可不知的定址模式 - 下篇

昨天我們知道:暫存器定址、立即定址、記憶體定址,是CPU 透過匯流排與記憶體互動時的不同方法。今天,來說明記憶體的定址方式。 記憶體定址 分成三類,直接存取、直...

2020-09-23 ‧ 由 @x0mg 分享
DAY 9

Day9 - 閒來無事,何不來學學 Intel x86 指令?

今天來正式介紹一下 Intel x86 的指令。雖然前面已經偷渡了很多次XD,不過這裡分門別類的描述各個指令的使用時機。有點多,不過還是請讀者慢慢服用。 複製資...

2020-09-24 ‧ 由 @x0mg 分享
DAY 10

Day10 - Syscall 好像時常聽到?到底是什麼?

介紹 Syscall (system call),中文翻成系統呼叫,可以把它理解成系統的 API (Application Programming Interf...

2020-09-25 ‧ 由 @x0mg 分享