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)