打开程序,真的high
,音乐够激情啊,随意注册后
看看汇编中的字符串(越来越偷懒,越来越熟练)
改了下就直接跳了(= = !!!游戏有这简单就好了。。。)
恢复后,接着往上追
这里给了正确的码了,继续往上看码是怎么形成的
这次的算法有点长,但是比较简单
这个码第一段和第四段是固定的值,先计算字符串长度,要大于等于4
和小于等于50
,通过算法算出第二段值
接下来利用得到的这个值再进行下一步的处理得到第三段值
其实算法里面还有计算第四段的
但是这个第四段,最后怎么算都是都是这个值
所以注册机只需要算出二三两段的内容就可以拼接正确的码了
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdint>
int main() {
std::string username;
// 获取用户名输入
std::cout << "请输入用户名: ";
std::getline(std::cin, username);
// 计算用户名长度
size_t length = username.length();
// 处理用户名
if (length < 4 || length > 50) {
std::cout << "用户名不符合要求,长度需要在4-50之间" << std::endl;
return 1;
}
char thischar = 0;
int twoPChar = 0;
for (int i = 0;i < (int)length;i++) {
thischar = username[i];
int temp = thischar - 0x19;
twoPChar -= temp;
}
uint32_t unsignedResult = static_cast<uint32_t>(twoPChar);
int temp_eax = twoPChar;
temp_eax *= twoPChar;
int temp_ecx = temp_eax; //用不上。算法里面有写,对此结果无影响,下同
int temp_edx = 0 - twoPChar; //用不上
temp_edx ^= temp_eax; //用不上
int temp_ebx = twoPChar * temp_eax;
// 设置十六进制输出格式(大写)
std::cout << "Bon-"
<< std::hex << std::uppercase << std::setw(8) << std::setfill('0')
<< unsignedResult
<< "-"
<< std::setw(8) << std::setfill('0') // 保持格式设置
<< temp_ebx
<< "-41720F48"
<< std::endl;
return 0;
}
搞定,总于有一个是自己写的不是靠AI
的了,进步!