纯纯的新手,勿喷 ==! 这是一个keyfile保护的crackme,首先od载入,f9到用户领空, 既然是keyfile,肯定需要读文件,好吧,映入眼帘的就是打开文件(CRACKME.KEY),读取数据,假设存储在 pwd[18]里面,其他的略过不细说,截图上都有注释 接下来就是重点内容,来到计算注册码的地方(图中标示关键call的地方),F7进入,这里就是计算注册码的地方 将字符串前14个字节分别与41h...4Dh进行异或操作,同时结果累加 得到一个和(记为total),循环中有个地方需要注意 如果pwd[i] == 41h+i,跳出循环,出来后,将total与12345678h异或,得到的就是最终的注册码 total ^= 12345678h 接下里取得pwd的后四位, 比较total的值与pwd的后四位是否相同 分析完毕,紧张呀, 文笔太差, 下面是注册机源码 #include <iostream> #include <string> #include <fstream> using namespace std; int main() { string name = ""; std::cout << "input your name: "; cin >> name; char pwd[18] = { 0 }; memcpy(pwd, name.c_str(), name.length() > 14 ? 14 : name.length()); int total = 0; for (int i = 0; i < 14; i++) { total += pwd[i]; pwd[i] ^= 0x41 + i; if (pwd[i] == 0) break; } total ^= 0x12345678; *(int*)(pwd + 14) = total; ofstream file("CRACKME3.KEY"); file << string(pwd, 18); return 0; } crackme文件: crackme.zip
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课