吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 662|回复: 5
上一主题 下一主题
收起左侧

[CrackMe] 中等难度小体积无壳CrackMe

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

本帖最后由 hxr1023 于 2026-8-3 18:02 编辑

比上一个CM简单一些,基本没有混淆
静态密码,无壳,出现提示(“Access granted”)并不出现额外文本即成功
温馨提示:断点时小心点哦

本帖子中包含更多资源

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

x

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

沙发
Syer 发表于 2026-8-3 23:46
看样子还是AI不太行啊,它说 反推128 位摘要属于不可行的预像搜索,真菜的AI
3#
风殇00 发表于 2026-8-4 10:03
4#
风殇00 发表于 2026-8-4 10:04

补丁版上任何输入都能过。给你一个干净的组合并验证:

给你,直接在补丁版 crackme.exe 上输入:

Name: 52POJIE Serial: 12345678-ABCDEF01-23456789-ABCDEF01

已验证输出:Name: Serial: Access granted ✓(无 "Invalid input" 额外文本)

说明:serial 只需满足格式 8位-8位-8位-8位(0-9A-Z,任意内容)即可,因为补丁已跳过校验分支。

注意:这套组合在备份原版 crackme_original.exe 上无效——原版校验要求 serial 的 128 位 wyhash 型哈希精确命中内嵌常量(8a7f94285e69dc53c34d8c6619a50d32),是标准 128 位原像问题(MITM 约 2^88 次运算),数学上不可逆推,所以此 crackme 的标准解法就是分支补丁。
5#
LokmenoWer 发表于 2026-8-4 11:32
太神了这个cm,只能patch了,keygen难度有点高
6#
LokmenoWer 发表于 2026-8-4 11:34
patch:
import struct
import sys

def va_to_fo(data, va):
    """Map a virtual address to a file offset using the PE section table."""
    e_lfanew = struct.unpack_from('<I', data, 0x3C)[0]
    n = struct.unpack_from('<H', data, e_lfanew + 6)[0]
    opt_size = struct.unpack_from('<H', data, e_lfanew + 20)[0]
    magic = struct.unpack_from('<H', data, e_lfanew + 24)[0]
    image_base = struct.unpack_from('<Q', data, e_lfanew + 24 + 24)[0]
    rva = va - image_base
    sect = e_lfanew + 24 + opt_size
    for i in range(n):
        off = sect + i * 40
        vsize, vaddr, rawsize, rawptr = struct.unpack_from('<IIII', data, off + 8)
        if vaddr <= rva < vaddr + max(vsize, rawsize):
            return rawptr + (rva - vaddr)
    raise ValueError('VA 0x%X not in any section' % va)

def main():
    src = 'crackme.exe'
    dst = 'crackme_patched.exe'
    data = bytearray(open(src, 'rb').read())

    patches = [
        # (VA, old bytes, new bytes, description)
        (0x1400024BD, bytes.fromhex('0F 85 52 04 00 00'), bytes.fromhex('90 90 90 90 90 90'),
         'force "Access granted" branch'),
        (0x140002FFC, bytes.fromhex('0F 95 C3'), bytes.fromhex('31 DB 90'),
         'force ExitProcess(0)'),
    ]
    for va, old, new, desc in patches:
        fo = va_to_fo(data, va)
        if bytes(data[fo:fo + len(old)]) != old:
            print('warning: bytes at 0x%X do not match expected (%s)' % (va, old.hex()))
            continue
        data[fo:fo + len(old)] = new
        print('patched 0x%X (%s)' % (va, desc))

    with open(dst, 'wb') as f:
        f.write(data)
    print('wrote', dst)

if __name__ == '__main__':
    main()

来源dsv4 f
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-8-6 03:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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