第十二屆

security
逆向工程 – 從入門到放棄
@x0mg

系列文章

DAY 1

Day1 - 大綱

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

DAY 2

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

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

DAY 3

Day3 - 逆起來 - 逆向 Hello world!

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

DAY 4

Day4 - 程式碼如何分段?

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

DAY 5

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

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

DAY 6

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

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

DAY 7

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

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

DAY 8

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

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

DAY 9

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

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

DAY 10

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

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