逆向入门(8)程序逆向篇-Boonz-KeygenMe#1

打开程序,真的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的了,进步!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baynk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值