练习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