首页
社区
课程
招聘
对某个单词软件的注册算法跟踪了5天
发表于: 2005-7-13 15:51 6213

对某个单词软件的注册算法跟踪了5天

2005-7-13 15:51
6213
其中注册码生成涉及到高精度运算(而且真的很全,高精的引用赋值(数据部分用浅复制)、高精的拷贝赋值(数据部分用深复制)、高精加减乘除左移右移、辗转相除都有了),加上算法自己设计的变换部分,可能大概有3000多行汇编码。现在读了应该有一半了,可是还没有几个变换没有研究透,注册算法还差中间几个关键数的生成没破解出来。有时觉得自己在浪费时间,手头还有正式项目要开发。可是怕现在停止了,以后想再重新破解的时候会把现在的程序结构忘得一干二净。到底是否应该放弃呢……

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
玩玩就行了
2005-7-13 16:05
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
正事要紧
2005-7-13 17:36
0
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
先为自己的生活想想吧
2005-7-14 15:30
0
雪    币: 280
活跃值: (281)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
实在不行爆破好了
2005-7-14 17:12
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
6
先把分析步骤简单记录,工作忙完继续
2005-7-14 21:22
0
雪    币: 270
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
7
实在没办法,就只剩下最后一点算法不知道怎样反求写注册机,烦请各位帮忙看看这段算法的功能。偶的数论学得确实不怎样,遇到循环群这些东西就处理不了了

其中B、S、T、FuncArg3是常量,且
T = B^(-1) mod 2^255,是用扩展欧几里德算法计算出来的。
S = 2^255 - T,就是T的取反,其中T有多少个bit就反多少,前面的0不用求反
没有特别说明的话,所有参数都是256bit的整数

算法:
_14 = 2^n - B;
_1c = FuncArg2;
for (i = 0; i < FuncArg3.n_bits; i++) {
  if (FuncArg3.bit(i) == 1) {
    _14 = conv(_14,_1c);
  }
  _1c = conv(_1c,_1c);
}
FuncArg1 = _14;
return FuncArg1;

其中的函数conv(arg1, arg2): (附上跟踪过程查到的部分数据)
输入变量:
arg1=
01272F50  DF A7 0B E1 9C F3 5C 8E 79 94 5E 1C AE E1 F1 31  擐 ?筌????
01272F60  3E 6D D2 B9 6C DC 3B B5 E8 61 8B FB A9 38 9E 06  >m夜l?佃a???

arg2=
01272D40  F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9  痼pQ尖?眙?lR派
01272D50  8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08  ?6?..侍?硭r?

函数过程:
tmp1 = (arg1 * arg2) % 2^510=
01272CF0  10 8E E6 37 26 A7 12 B6 26 B0 E5 02 41 AC 27 DC  ?7&??板A?
01272D00  6F FF 98 80 54 C8 3B E0 A8 EB 63 3D 6F 41 B9 C3  o???啜脬=oA姑
01272D10  D5 16 B0 6B 20 78 10 3B 59 B6 27 34 01 05 43 0C  ?半 x;Y?4C.
01272D20  20 16 4A 2D 2C 0F E2 F0 71 BC D1 14 4B 55 3A 00   J-,怵q佳KU:.

tmp2 = (tmp1 * S) % 2^255 =
01272CC0  F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9  痼pQ尖?眙?lR派
01272CD0  8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08  ?6?..侍?硭r?

tmp3 = (tmp2 * B) % 2^510 =
01272C70  F0 71 19 C8 D9 58 ED 49 D9 4F 1A FD BE 53 D8 23  瘃荣X砩傧?S?
01272C80  90 00 67 7F AB 37 C4 1F 57 14 9C C2 90 BE 46 3C  ?g??W??F<
01272C90  22 23 08 BD 3D 39 D5 5E 1D 84 9F 01 35 A4 9F 58  "#?9辙?5?X
01272CA0  27 EF D0 1C 7E F5 22 74 B4 42 20 E2 1A E4 2D 04  '镄~?t绰 ??

tmp3 = tmp3 + tmp1 =
01272C70  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
01272C80  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
01272C90  F8 39 B8 28 5E B1 E5 99 76 3A C7 35 36 A9 E2 64  ??^卞?:?6┾d
01272CA0  47 05 1B 4A AA 04 05 65 26 FF F1 F6 65 39 68 04  GJ?e&?鲥9h

tmp3 = tmp3 >> 255 =
01272C70  F0 73 70 51 BC 62 CB 33 ED 74 8E 6B 6C 52 C5 C9  痼pQ尖?眙?lR派
01272C80  8E 0A 36 94 54 09 0A CA 4C FE E3 ED CB 72 D0 08  ?6?..侍?硭r?

if (tmp3 >= B) {
  tmp3 -= B;
}

return tmp3;
2005-7-15 01:49
0
雪    币: 270
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
8
今天有了新的想法,从数学直觉角度,我觉得这个函数形成的群和模n剩余系的乘法群是同构的。

因为假如把conv看作模n乘法,并假设_14初始值为1,那么显然该段程序在计算FuncArg2^FuncArg3。也就是说_14的初值是群的零元。不过我没办法从数据上证明我的猜想。也许我应该试试按照RSA的思路,看看当FuncArg3取自己逆元的时候,能不能把编码后的数据解出FuncArg2。

如果证实了这点,再结合这个程序的其他部分研究,可以看出整个算法是一个变形的RSA算法。那样的话这个软件就完全解开了。真奇怪作者居然把两个大质数也直接用硬编码写在代码中。
2005-7-15 12:01
0
雪    币: 2003
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
实在麻烦的话还是爆破了好...
2005-7-18 01:49
0
雪    币: 270
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
10
爆破太简单,就几个地方有判断,所以才想写keygen

总算把keygen写出来了,呵呵,直觉是正确的。
本来作者完全可以设计成RSA算法那样,两个密钥只要隐藏掉一个,就算知道解码算法也不可能写出反向编码的程序,可是他的程序里面泄漏了太多秘密。里面涉及到不少数论知识,为了keygen我还手写了一堆高精度的例程。
2005-7-29 17:50
0
雪    币: 214
活跃值: (86)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
最初由 henryouly 发布
爆破太简单,就几个地方有判断,所以才想写keygen

总算把keygen写出来了,呵呵,直觉是正确的。
本来作者完全可以设计成RSA算法那样,两个密钥只要隐藏掉一个,就算知道解码算法也不可能写出反向编码的程序,可是他的程序里面泄漏了太多秘密。里面涉及到不少数论知识,为了keygen我还手写了一堆高精度的例程。


恭喜恭喜~呵呵,看来你的数学应该很强啊~
2005-7-29 22:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
高手啊!恭喜!有时间教教小弟啊!
2005-7-30 10:55
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
遇到这种问题,只能说是一种变态式的享受,顶住兄弟。成功的喜悦会让忘掉一切的
2005-7-30 11:20
0
雪    币: 270
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
14
恩,我承认我是技术偏执狂,

纯粹为了享受把这个数学难题解决的喜悦。事实上把代码分析清楚后,最后阶段的工作已经从代码功夫转移到数论功夫了。
2005-7-30 14:29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
佩服楼主,顶一个!::
2005-7-30 15:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
了解一下!
2005-7-31 09:03
0
游客
登录 | 注册 方可回帖
返回
//