KCTF子鼠开天WP
2020-04-19 06:47:07 Author: bbs.pediy.com(查看原文) 阅读量:322 收藏

[原创]KCTF子鼠开天WP

1天前 59

首先定位主要函数

 

FindEncrypt插件扫描一下看下大概有哪些密码学特征

 

分析可得函数sub_4010F0作用是将输入的sn进行AES解密 使用ECB模式 ZeroPading填充

秘钥:

48 0B 62 C3 AC D6 C8 A3 6B 18 D9 E9 06 CD 90 D2

函数sub_401210将AES解密得到的数据进行RSA 256加密

 

得到

N:69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39

E:0x10001

跟进函数401190

 

继续跟进4010b0

 

函数sub_4019C0是sha516算法 获取输入name的hash

函数sub_401570是md5 算法  计算sha516 hash的md5

函数4010b0被调用了两轮   

key1:

 

Key2:

 

 

最后将函数sub_401190计算出的32字节hash和前面RSA加密生成的64字节值的高32字节进行比较

逆推思路:

1.先动态调试程序,输入题目提供的sn,获取RSA算法加密生成的数据前32字节

00028888888888888888888888888800=>A

2.计算sub_401190(“KCTF”)=>B

3.A+B拼接为64字节加密数据C,RSA解密C 得到明文M

4.RSA解密算法必须分解N,根据e^d mod(p-1)*(q-1)==1 求得RSA私钥d

 

5.分解N


得p*q=0x979be0c9eece7426c9fd28c2d6e7772b*0xb22831d15714eb91cd83340b4837182b

使用gmpy2计算d值解密数据

n = gmpy2.mpz(0x69823028577465AB3991DF045146F91D556DEE8870845D8EE1CD3CF77E4A0C39)
p = gmpy2.mpz(0x979be0c9eece7426c9fd28c2d6e7772b)
q = gmpy2.mpz(0xb22831d15714eb91cd83340b4837182b)
e = gmpy2.mpz(0x10001)
c = gmpy2.mpz(0x0002888888888888888888888888880014AF58AD4D76D59D8D2171FFB4CA2231)
d = gmpy2.invert(e, (p - 1) * (q - 1))
m = gmpy2.powmod(c, d, n)

对RSA解密得到的明文进行AES解密取前32字节就是所求sn


sn:0C5CE379F2102313D7420EC4883E25D07B935F98E2B0D9819275450CFDA7086E

因为时间关系就没有那么详细了

[求职]想求职找工作,请来看雪招聘投递简历!

最后于 1天前 被三猫编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-258925.htm
如有侵权请联系:admin#unsafe.sh