linux實踐之程序破解linux
此次的實踐是文件破解,讓咱們從login可執行文件開始吧!函數
首先咱們執行一下這個可執行程序spa
①咱們但願在不知道密碼的狀況下,可以登錄進去。且不管密碼是什麼,都是提示「on your command,my master!」。blog
首先對該程序執行反彙編。ast
咱們首先要找到main函數的入口處。搜索
咱們能夠看到cmp語句後,有jmp語句,若是不等於就跳轉到「0x8048466」處,這是正常程序執行的過程,咱們在這裏但願不等於的時候,也不要跳轉,因此能夠把「75 0e」修改成「75 00」表示,不用跳轉。這樣這句跳轉語句至關於不存在了,由於不管比較的結果是否相等,都將按順序繼續執行。二進制
先來看看正確登錄是什麼樣子的。程序
首先打開login文件,結果如圖所示,command
輸入「:%!xxd」,結果如圖所示。密碼
搜索「75 0e」,輸入「/75 0e」,結果如圖所示。
修改該值爲「75 00」,輸入「:%!Xxd -r」保存修改。
退回到二進制文件格式後,輸入「:wq」保存。
從新執行該可執行文件,結果如圖所示。
②咱們但願不管輸入什麼,跳過提示。直接結束。
分析main函數的反彙編。
咱們只須要將cmp比較後的jne判斷語句,直接跳轉到leave處。即將「75 00」修改成「75 1a」,這樣在輸錯密碼的狀況下會直接結束,退出程序。在「75 00」處增長代碼,增長代碼爲「jmp 8048472」,即增長「eb 0c」。總結:就是將「75 00」修改成「75 1a eb 0c」。
讓咱們來嘗試一下是否可以成功吧!
可是失敗了,顯示爲段錯誤。
這是我想從新反彙編該可執行文件,結果爲
因爲個人修改,致使文件不可用,也沒法復原回原來的版本,因此我又只好從新開始新的代碼,進行嘗試。
因而我只好從新修改,我此次不增長新的代碼,直接將「75 0e」修改成「75 1a」。
修改後的執行結果以下。
修改後從新反彙編一下,查看結果。
③深刻研究,試圖猜想密碼。
從上圖的main代碼中,咱們能夠看到,比較的是「0x1c(%esp)」和「%eax」的值,而看上一步「%eax」的值是「0x18(%esp)」,往上面找,我猜想,這裏比較的就是「0x7fe」和「0x0」,這樣一來,結果永遠是不等於,因此我嘗試修改,將下面的「00 00」改成「fe 07」。
修改後保存。
修改後,輸入任何密碼,都是成功登錄。
就是這樣,搞定啦!