1. 程式人生 > >逆向工程 cm1 wp

逆向工程 cm1 wp

附上下載連結cm1

這好像是一個linux小程式emm 話說Linux小程式怎麼用…拖到虛擬機器裡麼???【求教 沒什麼思路 先拖到IDA裡再說(簡單粗暴 這裡寫圖片描述 F5找虛擬碼 這裡寫圖片描述 看到if else語句 覺得此處定有蹊蹺hhhhh ヾ(◍°∇°◍)ノ゙ 先去judge_func(v5)瞅了一眼 大概就是判斷輸入的是不是正確的 這裡寫圖片描述 然後又去其中的check_func看了一下 裡面有一個長度==22 這裡寫圖片描述 那麼最核心的就應該是v5這句了 我們去v5=decodel(&s,v6)這裡看看 這裡寫圖片描述 OLL轉成字元型就是’\0’ 感覺for迴圈裡應該就是挺重要的東西惹 compare 比較 emmm應該就是對比答案的 我們去compare看一下 這裡寫圖片描述

吼的 又到了寫演算法的環節!! (•’ ‘• ۶)۶ 這裡寫圖片描述

ord() 返回其十進位制的整數 end=”” 在結束的時候不會自動換行 而是在結尾新增一個空的字串(只適用於Python3) 保證輸出的連續 chr() 把十進位制的數轉化成字元形式

遍歷file中的每一個字元 由原始碼中if語句的 i ^ (char )(i + a1)) != compare[i] 因為之前我們看到==22後會輸出congratulations 而compare正好是22位 decode1函式最後返回的是v3 v3要去和22比長度 但一開始v3=0 若想要v3加到22 就要是if中的不滿足 也就是讓!=理解為== 這樣才能++v3 於是寫演算法的時候就要使每一位和它相等 就是要把數字變成字元型 與compare中的比較 通過前面的各個函式 可以看出if中的i+a1 a1就是我們輸入的flag a2就是flag的長度 emmm 我的理解吧 按照這樣理解的話應該就很容易寫出指令碼了(思路混亂ing …(。•ˇ‸ˇ•。) …