實驗吧 逆向 10000000
阿新 • • 發佈:2019-02-17
最近博主從演算法轉到了逆向,說實話本人感覺演算法很重要,最自己的學習能力還有程式設計能力都有比較大的提升 然後博主看了一些視訊後 開始刷ctf的逆向題了,聽大牛們說 實驗吧的題很水 然後我就試著做了一些實驗吧的題 現在也就做出來兩個 23333333 有點菜 但是慢慢應該就會好些吧~~~
先說這道題的思路 ,也是讓找出flag 說實話遇到這種題 我總是想先繞過flag的破解,無論輸入什麼數,都是正確的(中毒太深了),然後就開始瘋狂找 flag 這個flag 是有密碼的規律 首先博主用的工具是od ,然後載入 先搜尋字串 喵 一開啟頁面就發現
這個也太簡單了 ,然後直接對 出現喵的地址進行斷點,然後f9開始執行,然後發現
發現了輸入函式 然後 隨便輸入幾個數字 f8往下走 然後發現了 strcmp函式 然後發現下面的視窗是
兩個地址 22FF38 還有22FF24 然後自己找了有重新分析以一波 發現22FF38就是輸入的字元(其實可以直接判定,因為strcmp傳進的引數就2個地址)然後查詢22FF24 地址 發現這個
這個大概就是要比較的數值 然後我們有個迴圈 然後發現了
對eax進行0x80的或與 然後我們知道 想求相反的或與 可以直接或與 然後 我們有c++可以來模擬出來這個比較函式,然後對那幾個陣列進行或與 直接求出flag(看著大佬們用python寫的好隨意 羨慕ing)
下面貼出c++程式碼
#include <iostream> #include <stdio.h> #include <string.h> #include <string> using namespace std; char p[110]; string aa; int b; //E6 EC E1 E7 BA F4 E5 F3 F4 F4 E5 F3 F4 0 int main(void) { aa.clear(); while(~scanf("%p",&b)) { if(b==0) break; aa+=(0x80)^b; } cout<<aa<<endl; return 0; }
然後輸入上面註釋的程式碼就可以了
emmm flag直接輸出testtest就行 為此我做了好多
萌新第一次發帖 有錯誤還請大牛們指出
應該沒人轉載吧·~~~ 有人轉載說明出處就行.。。。。