吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2141|回复: 7
收起左侧

[CrackMe] C++写的无壳

  [复制链接]
Skyearth1 发表于 2025-8-1 12:02
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

有重写了一版,跟之前发的不用同一套代码了

下载地址:
https://wwkz.lanzoum.com/isZeL32b93ba
密码:99z5

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
0504yck + 1 谢谢@Thanks!
chinawolf2000 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

killerzeno 发表于 2025-8-1 14:35
Python算法注册机
[Python] 纯文本查看 复制代码
def ror32(x, n):
    """32位右旋转操作"""
    n &= 31  # 确保n在0-31范围内
    return (x >> n) | ((x << (32 - n)) & 0xFFFFFFFF)  # 保持32位无符号

def rol32(x, n):
    """32位左旋转操作"""
    n &= 31  # 确保n在0-31范围内
    return ((x << n) & 0xFFFFFFFF) | (x >> (32 - n))

def obfuscated_calculation(a1, a2):
    """混淆计算过程"""
    v3 = 0
    i = 0
    while i <= 3:  # 循环4次(i=0到3)
        a1 = ror32(a1, 4)
        a1 ^= a2
        a2 = rol32(a2, 3)
        v3 += a1 * a2
        i += 1
    return a1 ^ a2

def calculate_v14(machine_code):
    """计算注册码"""
    temp = obfuscated_calculation(machine_code, 0x8BADF00D)
    return rol32(temp, 7) ^ 0xCAFEBABE ^ 0xDEADBEEF

def main():
    """主函数:获取用户输入并计算注册码"""
    try:
        machine_code = input("请输入机器码(十六进制,不带0x前缀): ").strip()
        # 将十六进制字符串转换为32位无符号整数
        machine_code_uint = int(machine_code, 16) & 0xFFFFFFFF
        # 计算注册码
        reg_code = calculate_v14(machine_code_uint)
        # 以十六进制格式输出,确保8位,大写字母
        print(f"对应的注册码是: {reg_code:08X}")
    except ValueError:
        print("错误:请输入有效的十六进制机器码")

if __name__ == "__main__":
    main()



Python算法计算结果


验证注册码结果

明文爆破

验证爆破结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
workforce + 1 + 1 我很赞同!
plc2009dcs + 1 + 1 我很赞同!
moyinya + 1 + 1 用心讨论,共获提升!
BrutusScipio + 1 + 1 用心讨论,共获提升!

查看全部评分

xifengchunxue 发表于 2025-8-1 15:26
本帖最后由 xifengchunxue 于 2025-8-1 18:58 编辑

吾心吾行澄如明镜,所作所为皆为正义

免费评分

参与人数 2吾爱币 -17 违规 +1 收起 理由
bian96 -15 + 1 警告:CM区等技术板块禁止回复与主题无关非技术内容,违者重罚!
PythonPan -2 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

揰掵佲 发表于 2025-8-1 13:57

[C++] 纯文本查看 复制代码
static inline uint32_t ror32(uint32_t x, int n) {
    n &= 31;
    return (x >> n) | (x << (32 - n));
}
static inline uint32_t rol32(uint32_t x, int n) {
    n &= 31;
    return (x << n) | (x >> (32 - n));
}
int __fastcall ObfuscatedCalculation(uint32_t a1, uint32_t a2)
{
    uint32_t v3 = 0;
    int i = 0;
    do {
        a1 = ror32(a1, 4);
        a1 = a1 ^ a2;
        a2 = rol32(a2, 3);
        v3 += a1 * a2;
        i++;
    } while (i <= 3);
    return a1 ^ a2;
}
uint32_t CalculateV14(unsigned int MachineCode)
{
    uint32_t temp = ObfuscatedCalculation(MachineCode, 0x8BADF00D);
    return rol32(temp, 7) ^ 0xCAFEBABE ^0xDEADBEEF;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
qq465881818 发表于 2025-8-1 14:29
[C++] 纯文本查看 复制代码
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>

// 模拟反调试函数
bool AntiDebug() {
    // 实际应用中会包含反调试逻辑,这里简单返回false
    return false;
}

// 模拟生成机器码函数
unsigned int GenerateMachineCode() {
    // 实际应用中会生成真实的机器码,这里返回一个示例值
    return 0x12345678;
}

// 模拟验证密钥函数
bool ValidateKey(unsigned int machineCode, const std::string& key) {
    // 实际应用中会包含真实的验证逻辑,这里简单检查长度
    if (key.length() != 8) return false;

    // 这里仅作示例,实际验证逻辑会更复杂
    return true;
}

int main(int argc, const char** argv, const char** envp) {
    std::ostream* v3;
    int v4;
    unsigned int v5;
    unsigned int v6;
    unsigned int MachineCode_1;
    char v15[8];  // 用于存储字符串
    unsigned int MachineCode;
    int i;

    // 模拟原代码中的_main()调用,通常是CRT初始化
    // 在标准C++程序中不需要显式调用

    if (AntiDebug()) {
        std::cerr << "Debugger detected!";
        std::endl(std::cerr);
        return 1;
    }
    else {
        MachineCode = GenerateMachineCode();

        // 输出机器码
        std::cout << "Machine Code: 0x"
            << std::hex
            << std::setfill('0')
            << std::setw(8)
            << MachineCode
            << std::dec
            << std::endl;

        // 获取用户输入的密钥
        std::string key;
        std::cout << "Enter Key (8 hex digits): ";
        std::cin >> key;

        // 验证密钥并输出结果
        if (ValidateKey(MachineCode, key)) {
            std::cout << "Congratulations! Valid key." << std::endl;
        }
        else {
            std::cout << "Invalid key!" << std::endl;
        }

        // 暂停程序,等待用户按键
        system("pause");

        // 一些额外的计算操作
        MachineCode_1 = MachineCode;
        for (i = 0; i <= 99; ++i) {
            MachineCode_1 = (11259375 * i) ^ ((2 * MachineCode_1) | (MachineCode_1 >> 31));
        }

        v4 = 0;
    }

    return v4;
}
asdulp 发表于 2025-8-13 00:00
新手一枚,用的是爆破的方法,使用Ida可以基本看清楚代码逻辑,最简单的方法就是ida逆向发现函数ValidateKey下面的判断条件jz  short loc_401AFE给nop掉,或者直接到ValidateKey函数内部返回值附近根据判断条件来进行nop,但是内部有个8字节的判断以及16进制数的判断需要注意一下,如果想直接获取到明文密钥,那就要看代码代码逻辑,有个比较重要的点就是对于用户输入的数据实际进行的处理就只是转化为了16进制数据,然后与机器码加密计算后的值进行异或得到一个固定的值0xDEADBEEF,所以实际上只要知道机器码加密后的值就能与0xDEADBEEF异或就能得到真正的明文密钥了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x
zxaagds2007 发表于 2025-8-27 15:36
本帖最后由 zxaagds2007 于 2025-8-27 15:40 编辑


[C++] 纯文本查看 复制代码
#include <windows.h>
#include <string>

using namespace std;

static uint32_t ROL(uint32_t val, int n) 
{
    return (val << n) | (val >> (32 - n));
}

static uint32_t ROR(uint32_t val, int n) 
{
    return (val >> n) | (val << (32 - n));
}

static uint32_t ObfuscatedCalculation(uint32_t a1, uint32_t a2) 
{
    for (int i = 0; i < 4; i++) 
    {
        a1 = a2 ^ ROR(a1, 4);
        a2 = ROL(a2, 3);
    }
    return a2 ^ a1;
}

static string GenerateValidKey(uint32_t a1) 
{
    uint32_t r1= ROL(ObfuscatedCalculation(a1, 0x8BADF00D), 7) ^ 0xCAFEBABE;
    uint32_t r2= r1^ 0xDEADBEEF;
    char buf[9] = { 0 };
    snprintf(buf, sizeof(buf), "%08X", r2);
    return string(buf);
}

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR cmdLine, _In_ int cmdShow)
{
    string result = GenerateValidKey(0xd800d59b);

        return 0;
}
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-18 06:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表