ajj

这个程序并没有明显的确定按钮

根据这篇文章https://www.52pojie.cn/thread-613337-1-1.html

使用Dede反编译一下,在窗体窗口点击DFM Editor可以看到各种事件

注意到Panel1有两个关键事件,一个是单击事件,另一个是双击事件

image-20260607162109840

这应该就是我们想要的确定按钮

下面用爆破法验证一下

爆破

image-20260608210614226

搜索到如下字符串,进入注册成功字符串的反汇编

往上看,看到一处jne指令用于跳过注册成功

image-20260608210759027

把这个指令改成jne下一条指令的地址

然后运行起来,输入注册码

然后点击图片,注册成功

image-20260608210937151

看来现在还无法区分单击和双击两个事件的区别

算法分析

给这段代码的头部设一个断点

image-20260608211132837

输入Name和Serial并点击panel1触发断点

image-20260608211323637

可以看到,前两个函数的功能是获取Name,并计算Name长度,后面还加了1E,我这里结果是 4 + 1E = 22

image-20260608211518645

这个函数用来把22从16进制转换为10进制数34

image-20260608211622617

跟踪到这里,字符串被拼接为34Name0

image-20260608211731300

后面给这个0加1,然后一直循环下去,结束条件是ebx == 13也就是循环19次,给下面的cmp指令设个断点

image-20260608211853871

最后得到字符串34Name18

然而,注意观察cmp指令比较的这两个数

image-20260608212017445

除了固定值85外,有一个地址处的值为0,而上述分析中,并没有看到这个值是如何被设置的,也就是下面的jne跳转永远成立,这样怎样都到不了成功字符串。因此给这个地址设一个硬件访问断点,看看是哪里会使用这个值。

注意不要重新加载或退出程序,因为每次这个地址都不一样,只需要按F9让程序跑起来即可。

我删除了Serial,程序直接断在了这个地址

image-20260608213356556

程序断在这里,看到了一串字符串,可能是正确序列号

黑头Sun Bird9dseloffc-012-OKName

初步推断出规律 ’黑头Sun Bird‘ + len(Name) + 5 + 'dseloffc-012-OK' + 'Name'

但是这里并没有生成85的方法,即使输入了上边正确的序列号,也只多了3E。

原因是上面分析都是单击panel后进行的,没有测试双击情况

现在测试一下,删除所有软件断点(因为都是单击事件的断点)避免干扰,然后把上边硬件访问断点改成硬件写入断点,因为我使用访问断点的时候无法成功触发。

image-20260608214921193

结果很明显,这里直接赋值为0x85。

因此成功注册需要正确的字符串和双击panel1

下面编写注册机

注册机编写

import pyperclip
Name = input("请输入Name: ")
Serial =  '黑头Sun Bird' + str(len(Name) + 5) + 'dseloffc-012-OK' + Name
pyperclip.copy(Serial)
print("生成成功,已复制到剪贴板")
print(f"您的序列号为: {Serial}")

双击,注册成功

image-20260608221359887

posted on 2026-06-08 22:14  %HuTao%  阅读(3)  评论(0)    收藏  举报