Linux課題實踐三——程序破解

2.3   程序破解編程

20135318 劉浩晨編輯器

一、     掌握NOP、JNE、JE、JMP、CMP彙編指令的機器碼函數

NOPNOP指令即「空指令」。執行到NOP指令時,CPU什麼也不作,僅僅當作一個指令執行過去並繼續執行NOP後面的一條指令。(機器碼:90)工具

JNE條件轉移指令,若是不相等則跳轉。(機器碼:75)測試

JE條件轉移指令,若是相等則跳轉。(機器碼:74)spa

JMP無條件轉移指令。段內直接短轉Jmp short(機器碼:EB)段內直接近轉移Jmp near(機器碼:E9)段內間接轉移Jmp word(機器碼:FF)段間直接(遠)轉移Jmp far(機器碼:EA)3d

CMP比較指令,功能至關於減法指令,只是對操做數之間運算比較,不保存結果。cmp指令執行後,將對標誌寄存器產生影響。其餘相關指令經過識別這些被影響的標誌寄存器位來得知比較結果。 
2、掌握反彙編與十六進制編程器orm

(1)經過反彙編求出登陸密碼htm

打開終端,輸入objdump –d name,找到main函數:blog

(objdump是gcc工具,用來查看編譯後目標文件的組成)

在main函數的彙編代碼中能夠看出程序在調用「scanf」函數請求輸入以後,對 [esp+0x1c] 和 [esp+0x18] 兩個內存單元的內容進行了比較,其做用應該是對比用戶輸入和預設口令。

esp+0x1c爲首地址被定義爲:0x963d3301

esp+0x18爲首地址被定義爲:0x00000000

若是從低地址往高地址連續的就是01 33 3d 96,即爲20135318(密碼)

(2)修改可執行文件,玩轉密碼登錄

實踐目的:無論密碼輸入正確與否均可以正常登錄。

代碼name.c:

 

運行測試:

 

使用objdump -d a.out查看main:

 

爲了跳過口令檢查,也就是不管比較的結果如何,都正常登錄。

jne是條件跳轉,若是條件知足,則跳轉到80484b7;

jne下兩行可知是輸出內容;

jmp是跳轉語句(沒有條件,則直接跳轉),直接跳到80484ca;

jmp下兩行也是輸出內容。

jne表示當比較不相等時,跳轉。也就是說,當輸入與已存口令不相等時,跳轉到jmp下一行mov(80484be),若是比較結果相等,則執行jne下兩行mov、callq行,說明,執行mov、callq行輸出的爲「OK!」。

如今能夠明確,須要修改紅線處,使其在比較結果不等時也跳轉到下一行。

因此,將0e改成00便可。

 

使用vi編輯器進入a.out,輸入:%!xxd

 

輸入/750e,找到其位置

  

將0e改成00:,而後輸入:%!xxd –r,保存退出。

 

再次查看main:

 

測試結果:(不管輸入什麼,都表示正確)

 

3、掌握可執行文件的基本格式

Linux可執行文件格式爲ELF即Executable and Linkable Format。

ELF格式:

ELF header

program header table

.txt .rodata .data

Section header table

    詳細內容能夠見ELF文件格式分析。

相關文章
相關標籤/搜索