1、掌握nop、jne、je、jmp、cmp彙編指令的機器碼
nop:nop指令即「空指令」。執行到nop指令時,cpu什麼也不做,僅僅當做乙個指令執行過去並繼續執行nop後面的一條指令。(機器碼:90)
jne:條件轉移指令,如果不相等則跳轉。(機器碼:75)
je:條件轉移指令,如果相等則跳轉。(機器碼:74)
jmp:無條件轉移指令。段內直接短轉jmp short(機器碼:eb) 段內直接近轉移jmp near(機器碼:e9) 段內間接轉移 jmp word(機器碼:ff) 段間直接(遠)轉移jmp far(機器碼:ea)
cmp:比較指令,功能相當於減法指令,只是對運算元之間運算比較,不儲存結果。cmp指令執行後,將對標誌暫存器產生影響。其他相關指令通過識別這些被影響的標誌暫存器位來得知比較結果。
2、掌握反彙編與十六進製制程式設計器
(1)編寫和編譯程式
**功能:輸入密碼與預存密碼進行比對,正確輸出right,否則輸出wrong。
(2)通過反彙編求出使用者名稱、密碼
開啟終端,輸入objdump –d hello,找到main函式:
(objdump是gcc工具,用來檢視編譯後目標檔案的組成)
注意標記的jne命令,表示在前面的cmp指令比較結果為不相等時跳轉,cmp指令比較的值即原本密碼和輸入的值,
當兩者不等時跳轉4005f0輸出wrong,否則繼續執行下一條指令輸出right,
(3)修改可執行檔案,玩轉密碼登陸
①不管輸入正確與否都可以正常登陸。
要實現不相等時也輸出right,
只需修改跳轉位址,即修改該條指令為7500
用vi開啟該可執行檔案,使用%!xxd命令16進製制顯示
然後使用/750e指令查詢制定**,如果無法搜尋到則在中間加空格子/75 0e
找到修改位置
將0c改為00:然後輸入:%!xxd –r
然後使用:%!xxd -r命令還原成二進位制,最後:wq儲存即可
下面是將修改後的檔案反彙編的結果
測試結果:(無論輸入密碼正確與否,都表示正確)
②不可以正常登陸,即需要無條件跳轉到錯誤的地方,無條件跳轉為jmp,則同理需要將750c改成eb0c.(eb為無條件跳轉);
測試結果:(輸入正確,表示錯誤)
下面是修改後反彙編的結果
測試結果:(輸入正確密碼,顯示不正確)
③輸入正確密碼不能登入,輸入錯誤密碼能夠登陸。
則需要將其改為740c(je相等時跳轉,不相等時繼續執行)
Linux核心分析
從根本上看,核心是為了管理好程序來設計的,需要建立各種結構體來描述程序管理過程中需要用到的一切。首先,為什麼要劃分核心空間與使用者空間,出於安全的考慮,需要把使用者程式與核心隔離,這就帶來各種複雜性的東西,當然這是值得的。對於模組與模組的互動,使用者通過系統呼叫進入核心,這裡又包含中斷管理,異常管理...
linux核心分析四
使用庫函式api和c 中嵌入彙編 兩種方式使用同乙個系統呼叫,理解系統呼叫的工作機制。api 第一層是指libc中定義的api,這些api封裝了系統呼叫,使用int 0x80觸發乙個系統呼叫中斷 當然,並非所有的api都使用了系統呼叫,如完成數學加減運算的api就沒有使用系統呼叫 也有可能某個api...
Linux核心Crash分析
每乙個程序的生命週期內,其生命週期的範圍為幾毫秒到幾個月。一般都是和核心有互動,例如使用者空間程式使用系統呼叫進入核心空間。這時使用的不再是使用者空間的棧空間,使用對應的核心棧空間。對每乙個程序來說,linux核心都會把兩個不同的資料結構緊湊的存放在乙個單獨為程序分配的儲存空間中 乙個是核心態的程序...