队友给力,很快就用ida把源码逆出来整理好了,我也就直接看源码测试分析瞎折腾了
看了大半天也没琢磨出具体是个什么算法模型,只看出来有两种基本操:
正确的A操作,读取解码后的注册码,一番拆解/查表/计算得到x,y,对T2的数据做减法:T2[x - 1] -= y
正确的B操作,读取解码后的注册码,一番拆解/查表/计算得到x,y,对T2的数据做减法:T2[k] -= (k * k + 1) % T2[k] + 1,其中的k是初始值为5,依次加4取模15
A和B轮换进行,在最后一步A操作完成后T2全0则达到目标,如果B操作后T2全0会失败
感觉直接硬碰硬不是太好对付,转而改变思路,采用万能的穷举大法试一试
对check函数中的几个跳转点稍作修改返回当前状态,为穷举逻辑提供接口
发现穷举可行,每次给两个字节然后调用check函数探测结果,如果状态满意就滚动到遍历下一个索引位置
为了探测多解情况,每个位置穷举出两个解,发现大部队都相同,只有一处出现差异情况
具体运行结果如下:
i=00000001.key=883D
i=00000001.key=883D
i=00000002.key=C888
i=00000002.key=C888
i=00000003.key=43C8
i=00000003.key=43C8
i=00000004.key=A843
i=00000004.key=A843
i=00000005.key=F9A8
i=00000005.key=F9A8
i=00000006.key=42F9
i=00000006.key=42F9
i=00000007.key=F642
i=00000007.key=F642
i=00000008.key=2AF6
i=00000008.key=2AF6
i=00000009.key=202A
i=00000009.key=212A
i=0000000A.key=D420
i=0000000A.key=D421
i=0000000B.key=FDD4
i=0000000B.key=FDD4
i=0000000C.key=F3FD
i=0000000C.key=F3FD
i=0000000D.key=F6F3
i=0000000D.key=F6F3
i=0000000E.key=F6F6
i=0000000E.key=F6F6
i=0000000F.key=F4F6
i=0000000F.key=F4F6
i=00000010.key=F6F4
i=00000010.key=F6F4
i=00000011.key=F9F6
i=00000011.key=F9F6
i=00000012.key=F4F9
i=00000012.key=F4F9
i=00000013.key=FFF4
i=00000013.key=FFF4
i=00000014.key=EDFF
i=00000014.key=EDFF
xken_len = 22
cr result0 : 3D88C843A8F942F62A20D4FDF3F6F6F4F6F9F4FFEDF9
cr result1 : 3D88C843A8F942F62A21D4FDF3F6F6F4F6F9F4FFEDF9
Key0: IRrBJtrsJi@dBGnwvyppwIpswIygxJzz
Key1: IRrBJtrsJi@dBWnwvyppwIpswIygxJzz
经验证第二组正确
更详细情况见附件代码
[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com
最后于 1天前 被ccfer编辑 ,原因: