Crackme029 的逆向分析
1.程序观察
从界面上来看,和 Crackme028没有区别,但是这个并不会自动退出。
2.简单查壳
没有壳。
3.程序分析
前面的流程和 Crackme028 差不多,都是先比较用户名和序列号的长度,小于6就弹窗提示错误。然后获取输入的用户名和序列号。
后面的流程就和 Crackme028 不一样了
程序有3个循环。第一个循环分别将用户名的每个字符进行异或。
第二个循环分别将序列号的每个字符进行异或。
第三个循环比较用户名和序列号的每个字符是否相同,不同则错误。
4.注册机
#include <stdio.h> #include <string.h> #include <Windows.h> int Keygen() { char szName[20] = { 0 }; char szSerial[120] = { 0 }; int NameLen = 0; printf("请输入用户名:"); scanf_s("%s", szName, 20); NameLen = strlen(szName); for (int i = 0x0; i < NameLen; i++) { szName[i] ^= (i + 0x1); szSerial[i] = szName[i] ^ (i + 0xA); } printf("%s", szSerial); return 0; } int main(int argc, char* argv[]) { Keygen(); return 0; }