-
-
[原创]2019看雪CTF 晋级赛Q1 第5题
-
发表于:
2019-3-24 12:18
6722
-
没有多余的处理,直接可以进入对话框处理函数sub_402652(),看一下这个函数
从函数的前面部分可以知道几个输入key的条件:
1、长度大于12
2、前两位不能是AA
3、5,11位V分割
字符合法性判断完成后,进行字符串整理,将V从字符中去掉。
base64 custom字串“ABCyVPGHTJKLMNOFQRSIUEWDYZgbc8sfah1jklmnopqret5v0xX9wi234u67dz+/”
将输入的key进行Base64加密再解密,加密前和解密后相等。这样看来字串长度是4的倍数了。
满足base64转换条件后进入关键函数
v7 = sub_4024E1(0x64, v5, (int)&pOut, len);// 0x64,O,加密key ,加密key长度
initTextBufByType(v7, &Text); // v7需要等于2,输入正确结果
关键函数返回2,输入正确结果。
关键函数内是大整数运算,我们先看一下大整数的数据结构
BigInt struc{
int sing //符号
int len //数据长度
int* pData //指向数据
}
好了,我们进入关键函数看看
这里是多素数相乘,得到p
createP((int)&p, (int)&p, *buf_1); // 多素数相乘,得到p=0x41cd66acc237b22681a18067
核心算法是快速幂取模,取模后的值为2.
2=key^0x53mod(p)
多素数RSA密钥产生算法如下:
1.生成k个素数p1, p2, …, pk
2.求k个素数的乘积n=∏pi, i=1,2,…,k
3.求Euler函数值φ(n)=∏(pi-1)
4.选择指数e, 使得gcd(e,φ(n))=1
5.求指数d=e-1 mod φ(n)
6.输出公钥(e,n)和私钥(d,n)
多素数RSA 加密和解密算法与普通RSA的相同:
加密 c=me mod n
解密 m=cd mod n
现在我们已经知道
1、多素数数组[3,5,7....0x47]
2、多素数乘机0x41cd66acc237b22681a18067
3、φ(n)phi =((3-1)(5-1)10D19B3AB2BBDB0940000000..*(0x47-1))0x10D19B3AB2BBDB0940000000
4 、e=0x53
可以求出d= 0x6afde1a6c132be7eb2e43db
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-3-24 12:40
被ODPan编辑
,原因: