上一篇文章中,我們探討了逆向工程的基本概念,包括什麼是逆向工程,以及它在駭客世界中的應用。這次我們要更進一步,來了解逆向工程的核心:匯編語言及逆向工具。理解匯編語言是成為逆向工程高手的關鍵,因為在逆向過程中,我們經常會看到二進制程式碼轉換成的低階語言,而這些語言就是匯編語言。掌握它才能徹底解析程式的運作方式,甚至發現程式中的漏洞。
接下來,我們將逐步介紹匯編語言中的基本結構、操作,以及一些常見的逆向工具。透過這些基礎知識,能在未來進行實作時,更加得心應手。
匯編語言(Assembly Language)是一種低階程式語言,它直接對應於機器指令,讓我們能夠以接近硬體層級的方式控制電腦。相對於高階語言(如Java或Python),匯編語言可以更精確掌控每一步運算。通常在逆向過程中,駭客會利用反編譯工具把二進位可執行文件還原成匯編語言,進一步分析其邏輯與漏洞。
匯編語言的語法通常依賴於處理器架構。對於x86或x86-64架構的程式,駭客常見的匯編語言指令包括資料移動(MOV)、算術運算(ADD、SUB)、比較與跳轉(CMP、JMP)等。
因為匯編語言教不直覺,我會在範例後面附上python的對照版方便大家理解
MOV AX, 10 ;
MOV BX, AX ;
python寫法
AX = 10
BX = AX
MOV AX, 5 ;
ADD AX, 3 ;
SUB AX, 2 ;
python寫法
AX = 5
AX += 3
AX -= 2
MOV AX, 10 ;
CMP AX, 10 ;
JE equal_label ;
MOV BX, 0 ;
JMP end_label ;
equal_label:
MOV BX, 1 ;
end_label:
python寫法
AX = 10
if AX == 10:
BX = 1
else:
BX = 0
MOV CX, 5 ;
loop_label:
DEC CX ;
JNZ loop_label
python寫法
CX = 5
while CX > 0:
CX -= 1
在這些比較中可以發現,匯編語言真的相對難懂、不直覺很多,但這也是能夠精確控制硬體的原因。