这个ylp1332已经分析过了
我虽然自己也分析了一遍.不过前面结果和他的差不多都类似
我就不贴代码了
关键是 看到ylp1332后面没有给出如何解那个方程
我现在给我我的思路. 也不知道是否正确 请各位大牛评判吧!!
检查magic和密码长度须是偶数 并且要为16进制数
hash用户名
假设用户名为kyo327
hash(kyo327)=BA D2 21 44 95 24 E5 D8 2E 78 65 CC 7D 6F 6C E9
00409BD0=<CrackMe_._mp_read_unsigned_bin>
无符号数的读取
取上面hash(kyo327) 10位 因为是无符号的读 因此高位补为0了
78 2E D8 05 4E 52 49 04 21 D2 BA=Xuser
再读幻数88269537 转成16进制的数后取
37 95 26 08 08=Xmagic
08269537
00000008
再读密码 得到大数
9A 78 56 04 23 01=Xpass
0456789a
00000123
mp_exptmod( &M, &e, &n, &C );//C= M^e mod n
X1=C9C794FF125DC1CA546E797E9486F62D78D83A8E2A6D8D4B
X2=D96F7B8483E94DC1F6291AB7395B
X3=3FAF265328715370501B09597543BAF1B42455D283DEC78B
X4=6EDD84F08B6C308F5727EEC13F5D87AC03D3FB7476654D2F
上面大数全转换为无符号数后
mp_mulmod(a,b,c,d) a*b mod c=d
0013e8b8
X5=Xuser*Xpass mod X2
=DB D7 67 05 70 C0 5F 01 5D 42 BF 0A 36 FE B6 08
0013e8f8
X6=Xpass*Xmagic mod X2
=16 8B A1 09 74 14 C5 08 AE 09
0013e8b8
X5'=X3^X5 mod X1
=05 41 F3 02 29 1E 13 0A 18 70 01 02 94 DE 41 0D C1 C0 78 08 14 6E 81 06 AD 07 13
0013e8f8
X6'=X4^X6 mod X1
=58 6A 4C 09 F2 C5 C8 06 ED BA 26 08 1B 54 BB 04 4D D7 C3 06 38 28 1D 01 99 2B 59
0013e8e8
X7=X5'*X6' mod X1
=6E DE 87 0C CE 97 77 07 A7 18 E3 00 C2 D3 C5 06 B2 2F DD 03 E6 52 09 01 BF F2 BB
0013e8e8
X7'=X7 mod X2
=F5 2D B6 0B ED D4 E7 04 5B E5 ED 0D A2 5B A1
如果
Xmagic=X7' 则注册成功
上面方程组可转化为这样
(X3^(Xuser*Xpass mod X2) mod X1)*(X4^(Xpass*Xmagic mod X2) mod X1) mod X1 mod X2=Xmagic
设Xmagic为已知数(随机假设一个数即可)
令(X3^(Xuser*Xpass mod X2) mod X1)=C
令(X4^(Xpass*Xmagic mod X2) mod X1)=Y
则C*Y mod X1 mod X2=Xmagic
那么C*Y=Xmagic+n*X2+k*X1 (n,k为自然数)
现在再设n=k=1
那么C*Y=Xmagic+X2+X1
分解Xmagic+X2+X1 得到两个数 设为p,q
则设(X3^(Xuser*Xpass mod X2) mod X1)=p
(X4^(Xpass*Xmagic mod X2) mod X1)=q
用离散对数计算器求出
Xpass*Xuser mod X2=p'
Xpass*Xmagic mod X2=q'
联立这个方程组可求出满足的xpass 就OK了
在最后 我用离散对数计算器 不知道为什么算不出来值.
可能是我的方法不对????也或者是那个DLPTOOL工具不好 呵呵 请大牛们来解释下吧
[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!