1. 程式人生 > >實驗吧 逆向 10000000

實驗吧 逆向 10000000

最近博主從演算法轉到了逆向,說實話本人感覺演算法很重要,最自己的學習能力還有程式設計能力都有比較大的提升 然後博主看了一些視訊後 開始刷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就行 為此我做了好多

萌新第一次發帖 有錯誤還請大牛們指出

應該沒人轉載吧·~~~ 有人轉載說明出處就行.。。。。