逆向破解(本地篇)- 03 理解EAX與關鍵call的關係來實現破解

一般寄存器EAX存儲了call中的返回值

假設:EAX 12345678
那麼:

AX 5678
AH 56
AL 78

test al,al → 用來對兩個操作數進行邏輯與操作,但是並不改變操作數!只改變標誌位!

je xxx (運算結果爲0,那麼標誌位Z爲1,跳轉實現)

如上所述,如果call中的一系列操作導致了EAX爲0,那麼下面就一定會跳轉。

爲了實現我們爆破的目的,我們不要讓其跳轉,可以F7進入這個call

然後直接在段首進行更改: mov eax,1,緊接着下面加一個retn,退出這個call

再保存更改,達到了破解的目的。


PS:

當有一千個跳轉,每個都依賴了該`call`的返回值,我們不可能去`nop`或修改掉每個關鍵跳,

但我們可以直接修改關鍵`call`的返回值 以達到同樣的目的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章