跳转至

Decrypto

nc连接后是个RSA解密程序,发送c的16进制会返回解密后的m,但限制不能解密题目给的c。 可以把c分解为c1*c2。 因为

m≡cd mod n m≡(c1*c2)d mod n

m1≡c1d mod n m2≡c2d mod n

m≡(m1*m2) mod n

所以只要将c1,c2发送给服务端解密,得到m1和m2即可得到明文。

exp.py:

from pwn import *
from Crypto.Util.number import *
n=140165355674296399459239442258630641339281917770736077969396713192714338090714726890918178888723629353043167144351074222216025145349467583141291274172356560132771690830020353668100494447956043734613525952945037667879068512918232837185005693504551982611886445611514773529698595162274883360353962852882911457919
c1=2*11*11633
c2=337776996205622514139897267259622439941441577050030472993857902470788424676204277856454319830164782994228390126907608894811791518457376474361092974276605202489697046967039975326799197021653060520761195507307194624139422604620483078617109192392046282600537260825743758255965171978527573880584944049011359
c1=hex(c1)[2:].rstrip('L')
c2=hex(c2)[2:].rstrip('L')

r1=remote('chal.noxale.com',4242)
r1.recvline()
r1.send(c1)
m1=int(r1.recvline(),16)
r1.close()

r2=remote('chal.noxale.com',4242)
r2.recvline()
r2.send(c2)
m2=int(r2.recvline(),16)
r2.close()

m=(m1*m2)%n
print long_to_bytes(m)
因数分解网站:http://factordb.com/index.php


评论