说明:本文无任何成品软件,仅供分析结果过程。
已知他的系列号为:889544539513
他的注册码为:15位,经过多次尝试,得到判断。
注册码:111112222233333,那么前五位,用于计算8895,中五位用于计算4453,后五位,用于计算9513,三次均匹配成功。才能进行完整的注册流程。
操作之前:
首先使用OD,搜索特征码:“三次“,将上面的JNZ改为JMP。因为进入到运算过程中,只有三次机会,将他给跳转过去。防止多次调试而造成的弹窗。
重新生成软件,便可以追码。
重新用OD打开软件,搜索字符:注册码.txt
如下图所示,咱们需要进入三个CALL,然后进行追出来他的计算过程。
第一次追码过程:
在下面输入15位的注册码,用于进行校验。比如我输入“123459876500000”
那么在第一次进行F7步入。
开始分析。
已知前五位为12345,那么十进制的12345的十六进制为:3039
接着往下步入。需要计算系列号的过程:
已知设备码为:889544539513,那么需要进行十六进制相乘汇总,得到的结果与上面的固定值进行相加。
以下均为十六进制
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
得到结果:
移四位得到9B90,并进行异或得93C9。
93C9+固定值:79FC = 10DC5。
取低十六位,得到DC5。那么设备码:889544539513的运算结果为DC5。
已知CALL返回为:DC5,那么接着执行。
EAX:DC5
ESI:3039(结果为注册码前五位的十进制转十六进制)
首先进行异或操作得到结果为3DFC。
3DFC+固定值:859得:4655
然后接着往下走:
4655/3等于=1771。
1771减固定值859 = F18
十六进制F18转十进制为:3864
所以最终汇总结果为:3864
咱们来确定一下结果。
已知上面有三处校验判断,在跳转时会有判断结果。
那么第一次校验,就可以撸出来一个软了。进行爆破。
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 <<= 4
Dim xorValue As Integer = Convert.ToInt32("859", 16)
Dim xorResult As Integer = totalSum Xor xorValue
' 进行加法操作
Dim addValue As Integer = Convert.ToInt32("79FC", 16)
Dim finalResult As Integer = xorResult + addValue
' 获取低16位(按位与操作)
Dim low16Bits As Integer = finalResult And &HFFFF
' 进行异或操作:低16位与 0x3039
Dim xorWith3039 As Integer = low16Bits Xor 字符的值_hex
' 第一步:3DFC + 859 = 4655
Dim additionResult As Integer = xorWith3039 + &H859
' 第二步:4655 / 3 = 1771
Dim divisionResult As Integer = additionResult 3
' 第三步:1771 - 859 = F18
Dim subtractionResult As Integer = divisionResult - &H859
' 第四步:将 F18 转换为十进制
Dim hexToDecResult As Integer = Convert.ToInt32(subtractionResult.ToString("X"), 16)
If hexToDecResult.ToString() = 前四位 Then
Return inputText1
End If
Else
MessageBox.Show("请输入至少12位字符。")
End If
Next
End Function
软件逻辑:从1开始运行99999,五位,一直执行到结果为我的系列号前四位:8895,并输出我运行的五位过程。
软件得到结果:
那么我的前五位为29994。拼接15位得:299940000000000
输入注册码进行校验。
那么第一次校验的过程就这样得到了。
后续校验:
接下来的两处校验,基本以这样的方式,都是可以追到的。
第二次校验,他的固定值为:0A3E
算法与上面,大同小异。追一下就能追出来了。
第三次校验,他的固定值为:02DD
第三次,正常追出来结果之后,最后需要注意一下,如DA98,那么需要循环四次。
需要循环四次。如D、A、9、8。
那么每一个需要
D + 2A - 30 得结果,然后进行相乘3E8=得结果记录。
A + 2A - 30 得结果,然后进行相乘64=得结果汇总。
9 + 2A - 30 得结果,然后进行相乘A=得结果汇总。
8 + 2A - 30 得结果,然后进行相乘1=得结果汇总。
最终的值才是结果。
收工结束,写不动了,有想研究的可以继续来研究研究。
他的每一个软件计算方式都不太相同,所以,此文还是以学习为主。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...