迷宮問題參考:
可以看到這裡有三個函式,step_0,step_1,step_2,應該就是對已有資料的操作了。變數中v9已知;v7,maze未知,所以猜測step_0函式負責將v9的值經過變換傳遞給v7,step_1負責將v7的值變化傳遞給maze,最終由在step_2處傳入maze陣列。
進入step_2函式,**主體部分如下:
從陣列(*a1)[7*i+j]的表示中可以看出,陣列的行數為7。(7*7 的二維陣列)
由while迴圈看出,輸入最長不能超過30,且必須是」w」,」a」,」d」,」s」。
輸入」w」,i--;輸入」s」,i++;
輸入」a」,j--;輸入」d」,j++;
可以看出迷宮從左上角出發。
從最後的判斷條件i==6,j==6可以看出,最終移動目標是右下角。、
這樣就分析清楚了我們的輸入與行走方向的對應關係。之後我們知道迷宮究竟是怎麼樣的。這由step_0和step_1函式決定。
我們可以繼續對他們兩個函式進行靜態分析,寫出他們的功能,求出迷宮表示式。但是因為我們是從step_2函式的位置才開始輸入的,step_1的輸出結果與我們的輸入無關,是乙個固定不變的值,所以我們可以用gdb進行動態分析,讓他直接執行到step_2函式處,然後直接檢視maze的**。具體操作如下:
輸入命令:info functions step,返回所有名稱帶有step的函式:
輸入命令:r執行至step函式開始位置。函式剛開始執行時,會為我們的輸入分配記憶體空間。因為是x64系統,所以函式傳遞引數時會先通過暫存器傳參。下圖框起來的部分就是將函式引數儲存到棧中的過程:
輸入命令:x/80dw $1,將該片記憶體空間的資料列印出來,取前49個資料,這便是maze陣列的元素:
將它們排列成7*7的矩陣,我們需要沿著1的路徑從左上角走到右下角
路徑為:ssddwdwdddssaasasaaassddddwdds。
逆向 攻防世界 logmein
ida引導程式,shift f12檢視關鍵字串,找到 然後進入主函式,經過分析,可以得出 輸入的字元要等於 經過處理的v7和v8的異或。v8很明顯,但是v7是怎麼回事呢,新手沒有遇到過,所以上網檢視資料,ll是長長整型,v7要轉換為16進製制然後在轉換為字串,而且字元是小端序,所以把得到的字元翻轉然...
逆向 攻防世界 crackme
查殼,nspack殼,直接用軟體脫殼,ida引導程式。很明顯,就是將402130的資料和輸入的資料進行異或,判斷是否等於402150處的資料。dwrd佔4位元組。這道題主要記錄一下剛學到的,直接在ida使用python指令碼。from ida bytes import get bytes s dat...
攻防世界逆向 insanity
有個附件,打也打不開,也沒字尾不知道是什麼型別的,就先查殼 發現這不是pe檔案,是elf檔案,將程式在linux環境下執行。檢視檔案詳細資訊,是32位的程式。放入32位的ida,找到main函式,然後f5檢視偽 int cdecl main c語言中,puts是個輸出函式 puts 我愛你 直接輸出...