已知他的系列号为:889544539513
他的注册码为:15位,经过多次尝试,得到判断。
注册码:111112222233333,那么前五位,用于计算8895,中五位用于计算4453,后五位,用于计算9513,三次均匹配成功。才能进行完整的注册流程。
操作之前:
首先使用OD,搜索特征码:“三次“,将上面的JNZ改为JMP。因为进入到运算过程中,只有三次机会,将他给跳转过去。防止多次调试而造成的弹窗。

1.png (36.24 KB, 下载次数: 0)
下载附件
2025-2-12 12:01 上传
重新生成软件,便可以追码。
重新用OD打开软件,搜索字符:注册码.txt
如下图所示,咱们需要进入三个CALL,然后进行追出来他的计算过程。

2.png (37.56 KB, 下载次数: 0)
下载附件
2025-2-12 12:03 上传
[color=]第一次追码过程:
在下面输入15位的注册码,用于进行校验。比如我输入“123459876500000”

3.png (67.45 KB, 下载次数: 0)
下载附件
2025-2-12 13:08 上传
那么在第一次进行F7步入。
开始分析。

4.png (30.84 KB, 下载次数: 0)
下载附件
2025-2-12 12:08 上传
已知前五位为12345,那么十进制的12345的十六进制为:3039
接着往下步入。需要计算系列号的过程:
已知设备码为:889544539513,那么需要进行十六进制相乘汇总,得到的结果与上面的固定值进行相加。

6.png (29.62 KB, 下载次数: 0)
下载附件
2025-2-12 12:20 上传

7.png (37 KB, 下载次数: 0)
下载附件
2025-2-12 12:22 上传
以下均为十六进制
8*1 8
8*2 10
9*3 1B
5*4 14
4*5 14
4*6 18
5*7 23
3*8 18
9*9 51
5*A 32
1*B B
3*C 24=160 + 859(固定)= 09B9
得到结果:

8.png (47.29 KB, 下载次数: 0)
下载附件
2025-2-12 12:23 上传
移四位得到9B90,并进行异或得93C9。

9.png (46.13 KB, 下载次数: 0)
下载附件
2025-2-12 12:28 上传
93C9+固定值:79FC = 10DC5。
取低十六位,得到DC5。那么设备码:889544539513的运算结果为DC5。

10.png (40.46 KB, 下载次数: 0)
下载附件
2025-2-12 12:36 上传
已知CALL返回为:DC5,那么接着执行。
EAX:DC5
ESI:3039(结果为注册码前五位的十进制转十六进制)
首先进行异或操作得到结果为3DFC。
3DFC+固定值:859得:4655
然后接着往下走:
4655/3等于=1771。
1771减固定值859 = F18

11.png (45.46 KB, 下载次数: 0)
下载附件
2025-2-12 12:40 上传
十六进制F18转十进制为:3864

12.png (14.78 KB, 下载次数: 0)
下载附件
2025-2-12 12:41 上传
所以最终汇总结果为:3864
咱们来确定一下结果。
已知上面有三处校验判断,在跳转时会有判断结果。

13.png (48.76 KB, 下载次数: 0)
下载附件
2025-2-12 12:44 上传
那么第一次校验,就可以撸出来一个软了。进行爆破。
[Visual Basic .NET] 纯文本查看 复制代码Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim 设备码 As String = "889544539513"
Dim 前4 As String = 设备码.Substring(0, 4)
Dim 码1 As String = 校验(设备码, 前4)
MsgBox(码1)
End Sub
Function 校验(ByVal 设备码 As String, ByVal 前四位 As String)
For b = 1 To 99999
Dim inputText1 As String = b.ToString("D5")
Dim inputText As String = $"{inputText1}0000000000"
If inputText.Length >= 12 Then
Dim firstFiveDigits As String = inputText.Substring(0, 5)
Dim decimalValue As Integer = Integer.Parse(firstFiveDigits)
Dim hexValue As String = decimalValue.ToString("X")
Dim 字符的值 As String = hexValue
Dim 字符的值_hex As Integer = Convert.ToInt32(字符的值, 16)
Dim deviceCode As String = 设备码
Dim totalSum As Integer = 0
For i As Integer = 0 To deviceCode.Length - 1
Dim currentChar As Char = deviceCode(i)
Dim hexValue1 As Integer = Convert.ToInt32(currentChar.ToString(), 16)
Dim multipliedValue As Integer = hexValue1 * (i + 1)
totalSum += multipliedValue
Next
Dim additionalValue As Integer = Convert.ToInt32("859", 16)
totalSum += additionalValue
totalSum
软件逻辑:从1开始运行99999,五位,一直执行到结果为我的系列号前四位:8895,并输出我运行的五位过程。
软件得到结果:

15.png (13.71 KB, 下载次数: 0)
下载附件
2025-2-12 12:51 上传
那么我的前五位为29994。拼接15位得:299940000000000
输入注册码进行校验。

16.png (44 KB, 下载次数: 0)
下载附件
2025-2-12 12:52 上传
那么第一次校验的过程就这样得到了。
[color=]后续校验:
接下来的两处校验,基本以这样的方式,都是可以追到的。
第二次校验,他的固定值为:0A3E
算法与上面,大同小异。追一下就能追出来了。
第三次校验,他的固定值为:02DD
第三次,正常追出来结果之后,最后需要注意一下,如DA98,那么需要循环四次。
需要循环四次。如D、A、9、8。
那么每一个需要
D + 2A - 30 得结果,然后进行相乘3E8=得结果记录。
A + 2A - 30 得结果,然后进行相乘64=得结果汇总。
9 + 2A - 30 得结果,然后进行相乘A=得结果汇总。
8 + 2A - 30 得结果,然后进行相乘1=得结果汇总。
最终的值才是结果。
收工结束,写不动了,有想研究的可以继续来研究研究。
他的每一个软件计算方式都不太相同,所以,此文还是以学习为主。