readyu's crackme 2017
readyu@pediy
2017-05-31
根据规则,crackme 内部name固定。 SN唯一。
本题sn为:
7A7102F36F3B344D666132A6FF7EF4BA05B99640BB815C9E712A72C64B6ABC582C2
正确提示:
"Oh Yes! You got it.",
设计思路:
(1)
考虑一条有限域椭圆曲线上的已知点 G1, G2, 以及给定的系数 h1,h2,h3,
求点S(x,y) 满足方程, 以下大写字母表示有限域椭圆曲线上的点, 小写字母表示数值:
h1( S + h3*G1) = h2(S + h3*G2) mod n
那么, 判断正确的key, 等价于判断方程两边运算的点的x坐标: 两个大数相等。
因此, 比较key,不会出现明文比较。这里S是可以计算的,并没有用到ECDLP(椭圆曲线离散对数)。
那么,如何求出S(x,y):
=> (h1 - h2) S = h2*h3*G2 - h1*h3*G1
S(x,y) = (h2*h3/(h1 - h2)) * G2- (h1*h3/(h1 - h2)) * G1 mod n
sn = S(x,y) , x,y is the point on the cuver ECC2K-130
椭圆曲线选取公开的ECC2K-130:
(参数取自如下pdf文档)
f57K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3g2U0j5#2)9J5k6r3y4Z5j5h3I4D9k6h3&6Y4k6g2)9J5k6h3W2F1k6X3!0Q4x3V1k6S2L8X3!0F1i4K6u0W2M7r3c8X3
========
ECC2K-130 GF(2^m)
========
E: y^2 + xy = x^3 + a*x^2 + b
m = 131
f = x^131 + x^13 + x^2 + x + 1
a = 0
b = 1
E 即: y^2 + xy = x^3 + 1 , over GF(2^131)
point P (G1):
X= 51C99BFA6F18DE467C80C23B98C7994AA
Y= 42EA2D112ECEC71FCF7E000D7EFC978BD
Point Q (G2):
X= 6C997F3E7F2C66A4A5D2FDA13756A37B1
Y= 4A38D11829D32D347BD0C0F584D546E9A
np (number of points) =
80000000000000001353F755C0E8FC9A4
n (prime order) =
200000000000000004D4FDD5703A3F269
(2)
补充细节的考虑 之一 关于hash。
为了使得h1, h2, h3 线性无关,并且与name, 和相关字符 关联起来, 这里取md5 hash作为系数。
h1 = hash1(0x1 name - pediy);
h2 = hash2(0x2 0x2 name - 2017);
h3 = hash3(0x3 0x3 0x3 name - crackme);
hash 采用md5
例如: name = readyu
readyu-pediy
hexstring= 017265616479752D7065646979
hash1=
51c75f1f444baa97ed18dd6c340835d7
readyu-2017
hexstring= 02027265616479752D32303137
hash2=
0e5cf7f068d6efa16f42f935ec424a75
readyu-crackme
hexstring= 0303037265616479752D637261636B6D65
hash3=
a4cd1d64486abde1be441944460cd41d
(3)
补充细节的考虑 之二 关于sn 编码。
采用一个素数P269, 把S(x,y) 用d加密编码。 结果就是sn。用到了费马小定理。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!