拿到逆向題目步驟:
第一步:
PEID查殼
看二進(jìn)制文件是否加殼--》比較難
如果沒(méi)有加殼:靜態(tài) 、 動(dòng)態(tài)
靜態(tài)分析:windows下的 IDA PRO
動(dòng)態(tài): windows下的OD linux下的EDB、GDB
第二步:
逆向:
1.破解類(lèi):
2.算法分析: 綜合性稍強(看懂 核心代碼,,知道字符串如何進(jìn)行比較)
3.繞過(guò):(*難度稍大)
驅動(dòng)保護、代碼混淆、反破解
常用語(yǔ)言:
C(ida看到的一些名稱(chēng)空間的比較多、一些庫)、C++(比C難)
在逆向代碼時(shí),時(shí)刻關(guān)注:“關(guān)鍵代碼”
關(guān)鍵代碼:從輸入開(kāi)始,獲取flag的部分
關(guān)鍵代碼特征:
1運算:對輸入進(jìn)行處理與或非亦或等
2循環(huán):一定有比較、跳轉、變量的變化(對字符串的處理一定是循環(huán))
一個(gè)代碼既有循環(huán)又有運算 -> 一定是關(guān)鍵代碼
我們:快速找到關(guān)鍵代碼并對其分析
ida:shift + f12 :找關(guān)鍵代碼段
比如:報錯、讓你輸入的信息
如果找不到關(guān)鍵代碼,也可以設置API斷點(diǎn)。一定會(huì )有處理你輸入的東西。比如,接受完你的輸入后的代碼
接下來(lái),用一道題目來(lái)解析
(先給大家介紹 動(dòng)態(tài) (工具:OD、記事本、計算器(作十進(jìn)制、十六進(jìn)制的轉換)))
首先“Please give your passcode:”
這個(gè)東西也可以算是一個(gè)關(guān)鍵的代碼
輸入完就關(guān)了
這意味著(zhù):我能看到的信息就是這樣子
首先查殼(此步省略,因為提前知道沒(méi)有加殼)
OD下進(jìn)行分析
第一步“中文搜索”、智能搜索

再一步: ctrl + f


這個(gè)就是我的 關(guān)鍵信息

如果我的輸入正確,則會(huì )執行這一步
雙擊“請輸入你的 passcode”

就會(huì ) 跳到 那一步

我們看到了%20s

%20s下面緊接這的就是 scanf函數


說(shuō)明輸入字符傳的類(lèi)型,最長(cháng) 20位
然后我們開(kāi)始下斷點(diǎn)

為什么在scanf下設置斷點(diǎn)
因為scanf函數調用完后,就會(huì )停下來(lái)接受你的輸入
雙擊 機器碼 即可 設置斷點(diǎn)

斷點(diǎn)設置好后,就可以運行這個(gè)程序


我們輸入 1234567890
回車(chē)

程序就會(huì )停在這一行

接下來(lái)就 單步 向下

這里很重要

move 這個(gè)操作 就是 賦值 為 0

state的信息也需要看,是否有沒(méi)有輸入

這是一個(gè)跳轉,我們跟著(zhù)跳

跳到這里,發(fā)現在做一個(gè) 比較
這就是比較關(guān)鍵的信息了
在和15 做比較

如果小于等于15

就跳到這里

如果<>

這就是典型的循環(huán),有各種各樣的運算
循環(huán)的變量應該是16次0-15
接下來(lái) 就看 循環(huán) 里作什么事情

單步向下
這是一個(gè)變量的賦值

然后又是一個(gè)跳轉

調到了 一個(gè) 比較

這是 0 和3 在做 比較

<>

又回到j(luò )ump的下一行
大概代碼:

這是兩次跳轉的大致的外圍結構。
上篇先簡(jiǎn)單寫(xiě)到這里,作為入門(mén)基礎,還請大家預習匯編指令、數據結構,才能更深入的學(xué)習逆向。
明天發(fā)中篇,將本題的重點(diǎn),以非常詳細的思路寫(xiě)出OD的動(dòng)態(tài)操作。
上篇終。
聯(lián)系客服