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())

浙公网安备 33010602011771号