练习160系列,被打击到了,突然想到Reversing.Kr的Easy_Keygen,就来蹂躏它找找自信....
还是老规矩,下载下来后,运行程序试试,
按下enter一闪而过。回到文件夹,看到一个"ReadMe.txt"文件,点开发现它提供了一个Serial,要求我们找到对应的Name,而Name->Serial的算法就蕴含在程序中。
不管它牛鬼蛇神,暂且先放入IDA中分析一下,抱着有提示的想法,我打开String看看,
运气不错,看到了“Correct!”的提升,转到代码窗口并溯源,看到了scanf的调用,
此时,把调试工作转到OD中吧。
分析得到算法用C++表示:
#includeusing namespace std;int main(){ char key[64]={0}; string name="123456"; int code[3]={0x10,0x20,0x30}; for(int i=0;i (name[i])^code[i%3]; if(tmp_code<16) //十六进制展开只有一位数的话,前面补‘0’ cout<<0; cout< <
往下看,
每次取2个字符,进行Serial和Key的对比,不相等则跳转到“Wrong!”。
算法大体已经出来了,逆向异或计算一下就好了,最后得到的Name(Flag):K3yg3nm3