1 实现打开软件熟悉下

先分析第一个 注册码和名称

发现不正确会提示

2 x96Dbg附加
将MessageBox -A -W -ExA -ExW 全都下断点 注意下到返回的地方

在MessageBoxA 断下了 然后我们F7
我们到了这个地方

先观察下 发现并没有检测
3 然后 ctrl+F9 跳到上一级

明显是判断的
#1 简单方法直接nop


#2 分析下名称和注册码

edx 是我写的 猜测eax=CW-4018-CRACKED 是注册码 在之前改调edx的内容改为 eax
发现也成功的 然后我们改变名称 发现 注册码不一样了
4 观察发现 注册码是在上面得出 在这一级的头部下断点

F8往下跟
看传参和返回

这里出现的4018注册码
进来函数发现是得到eax的

确定eax=431750然后高亮[431750]

重新来一遍 在42F9B5下断点 在内存查看431750 记得刷新 可以使用CE 和内存断点'
这边使用的是内存断点
#define [431750] 值


这里开始
movzx一般用于将较小值拷贝到较大值中
eax=0x31 =='1'
imul 有符号乘法,将被乘数与乘数均作为有符号数
检验

第一个字符是'2'==50
(4150)2=4100

成功
算法 注册码=CW-(string_name[0]41)2-CRACKED
5 我们最后做个一键填写名称和注册码的机器 下面源码
运行即

7 第二个简单提下
仿造上面即可 serial=Hello Dude!
0042FAFE
| E8 F93EFDFF | call acid burn.
4039FC
0042FAFE
| E8 F93EFDFF | call acid burn.
4039FC
值
=
41
/
/
ov dword ptr ds:[
0x00431750
],
0x29
值
=
41
/
/
ov dword ptr ds:[
0x00431750
],
0x29
值
=
值
*
第一个字符
=
2009
本例中 第一个字符是
'1'
=
0x31
=
49
mov eax,
50dword
ptr ds:[
0x00431750
]
add dword ptr ds:[
0x00431750
], eax
这二句应该都看得懂 就是 值
=
值
+
值 就是值
*
2
完整得出答案
值
=
值
*
第一个字符
=
2009
本例中 第一个字符是
'1'
=
0x31
=
49
mov eax,
50dword
ptr ds:[
0x00431750
]
add dword ptr ds:[
0x00431750
], eax
这二句应该都看得懂 就是 值
=
值
+
值 就是值
*
2
完整得出答案
[培训]科锐逆向工程师培训第53期2025年7月8日开班!