说明:本文无任何成品软件,仅供分析结果过程。
已知他的系列号为: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.ClickDim 设备码 As String = "889544539513"Dim 前4 As String = 设备码.Substring(0, 4)Dim 码1 As String = 校验(设备码, 前4)MsgBox(码1)End SubFunction 校验(ByVal 设备码 As String, ByVal 前四位 As String)For b = 1 To 99999Dim inputText1 As String = b.ToString("D5")Dim inputText As String = $"{inputText1}0000000000"If inputText.Length >= 12 ThenDim firstFiveDigits As String = inputText.Substring(0, 5)Dim decimalValue As Integer = Integer.Parse(firstFiveDigits)Dim hexValue As String = decimalValue.ToString("X")Dim 字符的值 As String = hexValueDim 字符的值_hex As Integer = Convert.ToInt32(字符的值, 16)Dim deviceCode As String = 设备码Dim totalSum As Integer = 0For i As Integer = 0 To deviceCode.Length - 1Dim currentChar As Char = deviceCode(i)Dim hexValue1 As Integer = Convert.ToInt32(currentChar.ToString(), 16)Dim multipliedValue As Integer = hexValue1 * (i + 1)totalSum += multipliedValueNextDim additionalValue As Integer = Convert.ToInt32("859", 16)totalSum += additionalValuetotalSum <<= 4Dim 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位与 0x3039Dim xorWith3039 As Integer = low16Bits Xor 字符的值_hex' 第一步:3DFC + 859 = 4655Dim additionResult As Integer = xorWith3039 + &H859' 第二步:4655 / 3 = 1771Dim divisionResult As Integer = additionResult 3' 第三步:1771 - 859 = F18Dim subtractionResult As Integer = divisionResult - &H859' 第四步:将 F18 转换为十进制Dim hexToDecResult As Integer = Convert.ToInt32(subtractionResult.ToString("X"), 16)If hexToDecResult.ToString() = 前四位 ThenReturn inputText1End IfElseMessageBox.Show("请输入至少12位字符。")End IfNextEnd 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=得结果汇总。
最终的值才是结果。
收工结束,写不动了,有想研究的可以继续来研究研究。
他的每一个软件计算方式都不太相同,所以,此文还是以学习为主。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...