一個在資安中非常重要的一大分類
對於這項技術相信各位一定都不陌生
應該說跟大家都息息相關
因為你各位阿如果有在用所謂的 "破解版軟體"
其實都是出自於這項技術喔~
在 windows 中叫做 PE
格式的 exe
在 linux 中叫做 ELF
經由原始碼編譯後所產生的二進位檔案
例如我們將這份 .c
編譯後產生的執行檔放到文字編輯器中看看
就會看到一堆十六進位
然後什麼都看不懂
這種東西稱為機器碼
是給電腦看的
透過一些工具例如 IDA, Ghidra, GDB 等
可以將這種一堆數字轉換成人類看得懂組合語言 (Assembly)
以下用 IDA 當作範例
有沒有發現比上面的一堆十六進位親切多了呢
而在逆向工程中
因為不太可能獲得該支程式的原始碼
所以必須透過看組合語言的方式
盡量還原出原本的邏輯
找出其中的漏洞或是可被我們利用的部分
在這之中最重要的就是組語的能力了
因為看不懂也別想逆東西XD
這邊就介紹幾個重要的指令以及觀念
在組語中
與一般高階語言不同
每一個運算都需要透過 register 這個東西
在不同的架構中有不同數量的暫存器可以使用
且每個暫存器都有屬於它的重要功能
底下使用 X86 架構的組語來當作範例
這些通用暫存器都為 16 bit 的版本
如果是 32 bit 的暫存器會統一在前面加上 E
例如 EAX
如果是 64 bit 會加上 R
例如 RAX
在 X
結尾的暫存器又可以切成更小的 8 bit 版本
以 AX
當例子
切出來的兩個分別叫做 AH
與 AL
分別為原本的高位 (High) 與低位 (Low)
有太多了
實在沒辦法一一列舉
可以到這邊有詳細的說明 點我
明天的教學
會用一個簡單的逆向 CTF 帶大家熟悉組語的操作