HWS_2022_Re3 复盘 多素数RSA大整数运算

 

不应该做不出来

一、Java层

 

 

 10进制转36进制

二、.so层

 

 

36进制转10进制

关键一点就是 bn_mod_exp 函数功能是RSA运算

 

 

他的e其实就是0x1001

 

 只是这个循环表现的比较隐晦,让我怀疑有没有乘了0x10001次方,实际上是有的...

三、解密脚本

import gmpy2
# 多个素数因子
N = 0x7019325B70F4A2F26E921102A0206DE415CAEB535CD4EC9D23D6608630DD00A9DB5DB8FAEF4621CCB2E775844C7447A1A843EBAC03ECA6F329FEABCD6560B80AACF7A54A298548827C9D75E1450FCF7E53DAC37C0F7FD25D509C342C23BDA0619504B28EC903C56C87
e = 0x10001
p = 1475203612633975218848450285487339190962027688336790188873776418606441616307026173067
q = 1475203612633975218848450285487339190962027688336790188873776418606441616307046219549
r = 1475203612633975218848450285487339190962027688336790188873776418606441616307129708089
c = 0x4920616D207375726520697420697320666C3467

phi=(p-1)*(q-1)*(r-1)
d=gmpy2.invert(e,phi)
m=hex(pow(c,d,N))[2:]
# 把两个16进制转化为三个10进制
flag=""
for i in range(0,len(m),2):
    tmp=int(m[i:i+2],16)
    if tmp<100:
        flag+="0"
    flag+=str(tmp)

#进行md5加密:
import hashlib
hl = hashlib.md5()
hl.update(flag.encode(encoding='utf-8'))
print(hl.hexdigest())

 

posted @ 2022-08-05 10:02  TLSN  阅读(54)  评论(0)    收藏  举报