首页
社区
课程
招聘
[原创]KCTF子鼠开天WP
2020-4-17 09:54 3415

[原创]KCTF子鼠开天WP

2020-4-17 09:54
3415


首先定位主要函数

 


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


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


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2020-4-17 18:43 被三猫编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回