scncrenyong 发表于 2024-11-24 22:10

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

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

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





修复后:

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
```

---

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

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

def xor1(data: bytes | bytearray, n: int, xor_method: Literal):
    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 ^= 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 ^= data3
    hexdump(data4)
    print(f'key={data4.hex().upper()}')

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

脚本输出

```
0000000006 83 f0 2b c4 49 96 8c                           |...+.I..|
00000008
0000000031 43 39 39 45 41 33 31                           |1C99EA31|
00000008
0000000031 33 41 45 39 39 43 31                           |13AE99C1|
00000008
000000002b 29 5b 5f 23 23 59 2b                           |+)[_##Y+|
00000008
00000000fa 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
代码有 bug。

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

受教了,学习了,我当时就发现了有点问题,在易语言里面运行正常注册,编译后却注册不上了,当时调试了一下,发现指针内存数据变了。原来是子程序调用完,会释放内存,指针自然就没有了。现在我把变量改成全局变量就不存在这个问题了。
页: [1]
查看完整版本: 无壳易语言Cracke,大家玩玩看.