能力值:
(RANK:500 )
|
-
-
2 楼
咋跟第一个比较一点新意都没有??
前面的f(user) f(sn)跟第一个完全一样啊
感觉唯一不一样的就是CALL Keygenme.0040115B 除了 两个64位数的相乘又添了点其他东西.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不要感觉,看懂算法先
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
代码进一步优化,算法没变,但exe大小减少0.5k
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这个crackme有解么,lz能不能给个你名字的key
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
luxor
2F23-QQ3M-PX66-P4PF
biocrk
VCHQ-QFCT-6PQ8-DDQ6
提示: 不但有解,而且是唯一解.
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
只能看出原始的计算过程,不明白算法的原理,没有办法求解
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
我也粗略看了一下,也太唯一了,前一段检测,要通过难道一般,后面的运算太复杂了
实在是很难跟下去了,期待高手出现
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
same with below
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
难不成是用孙子定理?
利用这个0x95AC9329AC4BC9B5=0xE9*0x1BEF*0x5E31B3C82E3来搞?
感觉v1这样做比较方便,v2,v3也是如此?
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
I要比II简单多了,所以CRT在II,III上肯定是无效的。其实II不是太难,III才是最有挑战性的。
不能再提示了,你还是慢慢研究数论的基础吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
发现了这个素数
FFFFFFFFFFFFFFC5
模它的平方根还是好搞得,有时间再写kg吧
先challenge vIII试试
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
Keygenme II是在探讨一种类型的模为素数的同余二项式的解法。所谓模为素数的同余二项式就是下面形式的同余方程:
x^n=a (mod p)
也就是求a的模n次根。
有如下定理:
当n整除p-1时,只有 a^((p-1)/n)=1 (mod p)时有解,且解数为n。
当n不整除p-1时,设k=gcd(n,p-1),r满足r*n=1 (mod p-1),原同余方程的解就是下面方程的解:
x^k=a^r (mod p)
现在来看一下Keygenme II的实际情况:
Keygenme II使用了下面两个方程如下:
p=0xFFFFFFFFFFFFFFC5
(1) x^6= -c (mod p)
(2) x^6= -c*0x95AC9329AC4BC9B5 (mod p)
因为k=gcd(6,0xFFFFFFFFFFFFFFC4)=2,r=0x2AAAAAAAAAAAAAA1,因此Keygenme II实际上是求下面二次同余方程的解:
(1) x^2=(-c)^r (mod p)
(2) x^2=(-c*0x95AC9329AC4BC9B5)^r (mod p)
因为(-c)不一定是p的二次剩余,要想保证有解,就借助一个事实,两个非二次剩余的乘积是二次剩余,一个二次剩余和一个非二次剩余的乘积是非二次剩余。0x95AC9329AC4BC9B5恰好是p的非二次剩余,因此(1),(2)两式必有一个有解。
二次同余方程的解法这里就不讨论了。接下来Keygenme II为了保证有唯一解,取了两个解中高位为1的那个解。这样一来,在当解在0x7FFFFFFFFFFFFFC6和0x7FFFFFFFFFFFFFFF之间时,会导致Keygenme II无解。但这种情况的概率极其微小,可以忽略不计了。当然Keygenme II也可以设计为取高位为0的解,在极小的概率下会有两个解。
|
能力值:
( LV9,RANK:180 )
|
-
-
14 楼
按错.
打扰了.
|
能力值:
( LV15,RANK:2473 )
|
-
-
15 楼
不得要领啊,总算把自己的蒙出来了
ccfer
8QV3-C428-KTQF-VF28
|
能力值:
( LV9,RANK:180 )
|
-
-
16 楼
又按错了.唉~
|
能力值:
( LV15,RANK:2473 )
|
-
-
17 楼
被作者误导了,实际情况应该是下面两种:
(1) x^6= -c*0x95AC9329AC4BC9B6 (mod p)
(2) x^6= -c*0x95AC9329AC4BC9B5 (mod p)
|
能力值:
( LV15,RANK:2473 )
|
-
-
18 楼
用luxor,biocrk,ccfer这3个名字都是作者说的第二种情况
当用sessiondiy做名字的时候我怎么算也不对,只好自己调试了一下流程
发现并没有作者说的第一种情况,而是*0x95AC9329AC4BC9B6的情况
附件里的计算器我不了解是怎么实现的,我调用了ntl的一个函数x = SqrRootMod(a, p)就算出来了,以名字sessiondiy为例演算一下过程:
断在401379处
00401379 51 PUSH ECX
0040137A 50 PUSH EAX
0040137B 51 PUSH ECX
0040137C 50 PUSH EAX
0040137D 51 PUSH ECX
0040137E 50 PUSH EAX
0040137F E8 9CFDFFFF CALL 00401120
可以看到c在[ebp+60]处:
0012FCA8 72 9F F9 B5 10 C2 CA AE
c = 0xAECAC210B5F99F72
r = 0x2AAAAAAAAAAAAAA1
p = 0xFFFFFFFFFFFFFFC5 = 18446744073709551557
-c = p - c = 0xFFFFFFFFFFFFFFC5 - 0xAECAC210B5F99F72 = 0x51353DEF4A066053
a = (-c * 0x95AC9329AC4BC9B6)^r % p = 0xA54AEC3899AB03C2 = 11910591892375143362
用附件里的计算器QrprCalc输入p和a的十进制数值,计算得到
x = 18028090684986279051 = 0xFA30A4F60922C48B
用x的结果FA30A4F60922C48B在“CDFHKMPQTVX23468”按次序查表得到结果:
8XHC-XK8P-CVFF-3KT2
结果:
sessiondiy
8XHC-XK8P-CVFF-3KT2
|
能力值:
(RANK:420 )
|
-
-
19 楼
哇~~~哈~~~哈~~~哈~~~!!
那個 *0x95AC9329AC4BC9B6 ==>是内定值( defaultvalue).
所以說有兩個嘛!
不是只有一種!
|
能力值:
( LV9,RANK:180 )
|
-
-
20 楼
利害了.
总之不可能直接算出来.
|
能力值:
(RANK:420 )
|
-
-
21 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
小弟不才没算出来
崇拜ccfer...
|
|
|