練習160系列,被打擊到了,忽然想到Reversing.Kr的Easy_Keygen,就來蹂躪它找找自信....ios
仍是老規矩,下載下來後,運行程序試試,算法
按下enter一閃而過。回到文件夾,看到一個"ReadMe.txt"文件,點開發現它提供了一個Serial,要求咱們找到對應的Name,而Name->Serial的算法就蘊含在程序中。spa
無論它牛鬼蛇神,暫且先放入IDA中分析一下,抱着有提示的想法,我打開String看看,調試
運氣不錯,看到了「Correct!」的提高,轉到代碼窗口並溯源,看到了scanf的調用,code
此時,把調試工做轉到OD中吧。開發
分析獲得算法用C++表示:string
#include <iostream> using namespace std; int main() { char key[64]={0}; string name="123456"; int code[3]={0x10,0x20,0x30}; for(int i=0;i<name.length();i++) { int tmp_code=static_cast<int>(name[i])^code[i%3]; if(tmp_code<16) //十六進制展開只有一位數的話,前面補‘0’ cout<<0; cout<<hex<<tmp_code; } cout<<endl; }
往下看,io
每次取2個字符,進行Serial和Key的對比,不相等則跳轉到「Wrong!」。ast
算法大致已經出來了,逆向異或計算一下就行了,最後獲得的Name(Flag):K3yg3nm3 class