利用OD進行軟體破解需要用到的基礎彙編知識

2021-08-20 07:26:37 字數 1405 閱讀 2585

一.通用暫存器及其作用簡介

通用暫存器包括了8個16/32位的暫存器,分別為ax/eax, bx/ebx,cx/ecx, dx/edx, sp/esp(利用esp定律脫殼就是看這個的,如果只有這個暫存器的值是高亮的,那麼就可以用),bp/ebp, di/edi, si/esi。

其中ax/eax,bx/ebx,cx/ecx,dx/edx這四個暫存器一般作為通用的資料暫存器,用來暫時存放計算過程中用到的運算元,結果或其他資訊。

ae/eax:作為累加器用,是算數運算的主要暫存器。還有所有的i/o指令都使用其與外部裝置傳送資訊

bx/ebx:是基址暫存器,在記憶體定址時存放基位址。

cx/ecx:常用來儲存計數值,如在移位指令,迴圈指令中用作隱含的計數器。

sp/esp,bp/ebp,si/esi,di.edi:通常是在定址器定址時,提供偏移位址,所以也叫作指標或變址暫存器

sp/esp:稱為堆疊指標暫存器,用來指出棧頂的偏移位址

bp/ebp:稱為基址指標暫存器,esp始終指向棧頂,ebp是在堆疊中定址用的 

二.資料傳送指令(只寫了一些常用的)

1.傳送指令 mov reg/mem,reg/mem/imm

意思是把後面的值賦給前面(reg--暫存器,mem--儲存器,imm--立即數)

2.交換指令 xchg reg/mem,reg/mem

將兩個暫存器/儲存器的內容交換,要注意的是兩個運算元的資料型別要一致

3.堆疊操作指令

堆疊具有先進先出的特點,通常用來儲存程式的返回位址,有進棧/出棧操作

作用:保護資料用,先將暫存器中的資料儲存在堆疊中,這就是入棧。然後,可以對他們進行操作而不影響原來的資料,需要用到原資料時,再出棧。 

進棧:push reg/mem 

出棧:pop reg/mem

4.轉移指令(重點)

轉移指令包括條件轉移指令和無條件轉移指令兩大類

無條件轉移指令:jmp  不用多說,就是程式執行到這裡的時候必定跳轉,在od中這行**的左側有一條紅色的線,表示將要跳轉,如果不想讓他跳可以將其設定為nop,這就是常用的nop法破解。

有條件轉移指令:jz/je,在od中只表示為je,在od中看執行到這一行時會不會具體的跳,可以在此處設定斷點,然後f9執行,左側的線是灰色的表示不跳,紅色的表示將要跳轉。需要注意的是,je跳與不跳還與od右側中顯示的z標誌位有關,若為1則跳,為0不跳,破解測試時可以直接更改標誌位,但要注意這樣修改無法儲存,若想要儲存跳,可以直接修改**為jmp即無條件跳轉。

5.子程式的呼叫和返回指令

呼叫指令(call 子程式名/reg/mem)在od中單步走到call指令時,可以按f7進入到子程式中

返回指令(retn imm)

我的第一篇部落格到這就寫完了,自己剛學習破解沒多久,對內容的理解還不是很深,如果有哪位發現了文章中的錯誤,還希望各位能夠不吝賜教!

需要用到的Linux命令

1.預設級別轉換為3 文字模式 ln sf lib systemd system multi user.target etc systemd system default.target 2.或者預設級別轉換為5 圖形模式 ln sf lib systemd system graphical.targ...

python需要用到的筆記

總結 pycharm常用的一些命令 建立django專案的 django admin startproject 專案名稱 讓模型類轉變為資料表,生成遷移檔案 python manage.py makemigrations 執行遷移生成表 python manage.py migrate git命令 ...

遊戲上線需要用到的工具

移動遊戲在上線時需要用到很多的工具來進行輔助管理,今天分別列舉出部分工具為廣大遊戲開發者提供乙個選擇。遊戲測試 testbird是國內最早突破遊戲引擎的手遊測試工具 testbird可以深入到遊戲內部進行包括 安裝 啟動 新手引導等自動化遊戲測試任務。國內還有一款測試工具叫做testin,最早做的是...