吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 904|回复: 6
收起左侧

[CrackMe] 无壳易语言Cracke,大家玩玩看.

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

本帖最后由 scncrenyong 于 2024-11-26 10:50 编辑

无壳易语言Cracke,大家玩玩看,修复了一下,不确定还有没有BUG.





修复后:

本帖子中包含更多资源

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

x

免费评分

参与人数 2热心值 +2 收起 理由
y918605628 + 1 用心讨论,共获提升!
Tori97 + 1 用心讨论,共获提升!

查看全部评分

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

bian96 发表于 2024-11-25 21:38
警告:CM区等技术类版块禁止回复『与主题无关非技术内容』,违者重罚!

本条提醒后再灌水的,一律违规+1处理。
爱飞的猫 发表于 2024-11-26 07:22
本帖最后由 爱飞的猫 于 2024-11-26 07:26 编辑

代码有 bug。

从堆申请内存(易语言的字符串、字节集都是从堆申请内存),取出指针,然后释放内存。之后验证的时候还想从这个指针读。
释放内存后就不能保证指针里的数据还是之前的数据了。因为其它程序在释放后尝试从堆申请内存,有一定概率得到这个(或附近)指针,然后进行读写。

汇编修正方案就是跳过该次内存释放,即 004018A5 的跳转改为 jmp

1337 补丁文件:

>Cracke.exe
000018A5:74->EB

代码写得有点粗糙,能跑出正确的序列号。

# 机器码 1C99-EA31-DE53-8C96
from typing import Literal
from hexdump2 import hexdump

def xor1(data: bytes | bytearray, n: int, xor_method: Literal[0, 1]):
    result = bytearray(data)
    for i in range(n):
        xor_value = 0
        if xor_method == 0:
            xor_value = 10 + (i * 10)
        elif xor_method == 1:
            xor_value = (n - i) * 10

        for j in range(8):
            result[j] ^= xor_value
    return result

def keygen(machine_code: str):
    # remove '-' and convert hex to bytes
    machine_code = bytes.fromhex(machine_code.replace('-', ''))
    data1 = xor1(machine_code, 5, 1)
    hexdump(data1)
    data2 = machine_code[:4].hex().upper().encode('utf-8')
    hexdump(data2)
    data2 = data2[::-1] # 反转
    hexdump(data2)
    data2 = xor1(data2, 5, 1)
    hexdump(data2)

    # 成功文字
    data3 = bytes.fromhex('D1 E9 D6 A4 B3 C9 B9 A6')
    data4 = bytearray(data2)
    for i in range(8):
        data4[i] ^= data3[i]
    hexdump(data4)
    print(f'key={data4.hex().upper()}')

if __name__ == '__main__':
    keygen('1C99-EA31-DE53-8C96') # FAC08DFB90EAE08D

脚本输出

00000000  06 83 f0 2b c4 49 96 8c                           |...+.I..|
00000008
00000000  31 43 39 39 45 41 33 31                           |1C99EA31|
00000008
00000000  31 33 41 45 39 39 43 31                           |13AE99C1|
00000008
00000000  2b 29 5b 5f 23 23 59 2b                           |+)[_##Y+|
00000008
00000000  fa c0 8d fb 90 ea e0 8d                           |........|
00000008
key=FAC08DFB90EAE08D
头像被屏蔽
吾爱灰色空间 发表于 2024-11-24 23:37
头像被屏蔽
chplifeng 发表于 2024-11-25 05:52
提示: 该帖被管理员或版主屏蔽
头像被屏蔽
johnson000 发表于 2024-11-26 10:00
提示: 该帖被管理员或版主屏蔽
 楼主| scncrenyong 发表于 2024-11-26 10:49
爱飞的猫 发表于 2024-11-26 07:22
[md]代码有 bug。

从堆申请内存(易语言的字符串、字节集都是从堆申请内存),取出指针,然后释放内存。 ...

受教了,学习了,我当时就发现了有点问题,在易语言里面运行正常注册,编译后却注册不上了,当时调试了一下,发现指针内存数据变了。原来是子程序调用完,会释放内存,指针自然就没有了。现在我把变量改成全局变量就不存在这个问题了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-28 22:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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