这个稍微有点麻烦,有三个内容要处理,解了一段时间,不过好像确实是有进步了,看汇编更习惯了!
0x01 keyfile
程序无壳,直接OD
打开食用,一进来就是熟悉的函数
需要创建名字为ACG.key
的keyfile
文件
往下就是读文件内容了,文件大小一定要为0xC
,所以可以创建一个长度为12
的字符key
内容
再往下就是循环处理每个字符去进行判断校验了,注释写在图上了,这里直接循环可以写出key
的计算方法
//部分关键代码
#include <fstream>
int main() {
char letter;
int arr[12] = { 0x168,0x160,0x170,0xEC,0x13C,0x1CC,0x1F8,0xEC,0x164,0x1F8,0x1A0,0x1BC};
// 创建并打开文件
std::ofstream outFile("ACG.key");
if (!outFile.is_open()) {
std::cerr << "无法打开文件 ACG.key" << std::endl;
return 1;
}
for (int i = 0;i < 12;i++) {
letter = (arr[i] / 4) ^ 0x1B;
std::cout << letter ;
outFile << letter;
}
std::cout << " 。ACG.key已成功生成" << std::endl;
outFile.close();
}
再次打开程序时就有了检查成功的校验框了
0x02 Serial
解决了第一部分再来看怎么生成正确的序列号,查看字符串
找到了正确的提示框了,上面有个JNZ
可以直接改je
暴破,这里继续往上追,找算法
这里就简单写了,看的时候都写好了注释,这里有一个地方需要理解一下,就是在计算key
的值的算法那,看着有点麻烦,其实说白了就是一个将一个数字字符串进行十进制的整数转换函数而已,所以这里可以直接写出注册机了,真好,现在不太需要AI
了,动手就是最好的老师!
#include <iostream>
#include <string>
#include <cstdint>
// 计算用户名处理结果
uint32_t calculateUsernameValue(const std::string& username) {
uint32_t sum = 0;
// 计算用户名ASCII总和
for (char c : username) {
sum += static_cast<uint8_t>(c);
}
// 循环左移3位
uint32_t rolled = sum << 3;
// 异或操作
//std::cout << std::hex << std::uppercase << "用户名计算: " << (rolled ^ 0x515A5) << std::endl;
return rolled ^ 0x515A5;
}
// 计算满足条件的密钥
std::string calculateKey(const std::string& username) {
// 计算用户名的处理结果
uint32_t A = calculateUsernameValue(username);
// 计算需要的中间值
uint32_t target = 0x797E7;
uint32_t B = target - A;
// 计算密钥数值
uint32_t X = B ^ 0x87CA;
return std::to_string(X);
}
int main() {
std::string username;
// 获取用户名输入
std::cout << "用户名: ";
std::getline(std::cin, username);
std::string key = calculateKey(username);
std::cout << "序列号: " << key << std::endl;
return 0;
}
搞定
0x03 NAG
这里的NAG
指的是讨厌的事,比如当你点击退出以后,会有一个窗口或者广告之类的弹出来,往往是需要你充值或者开会员才给你解除,所以也需要把这个给取消掉。这里是当你点击了Exit
后会有一个弹窗出来。
其实这里对我来说就很简单了,因为这事在逆游戏的时候经常干,通过搜索字符串,找到关键代码。
这里下断,然后点击退出,触发断点,按ctrl+F9
返回,就找到了上级call
call
可以通过cmp
比较的结果进行控制,改法就很多了,比如改0x1
为0x0
,又或者jnz
改jmp
等方法都可以,改完以后,另存新修改好的文件即可,之前已经练习过了,这里不再截图,这个题比之前的题目都要麻烦一点点,但是基本都可以一路看过来,越来越得心应手!嗯,微信公众号100
个关注了,小小纪念一下!学习不熬夜,我怎么又熬夜了啊,看来真的要学习不熬夜了