[GWCTF 2019]BabyRSA

BUUCTF在线评测 (buuoj.cn)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNxkOvbn-1666617966492)(assets/image-20221024191355-lmm1x0v.png)]​

分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJutxLq6-1666617966494)(assets/image-20221024194722-mzkvffz.png)]​

通过这个代码可以分析得到m1,m2的过程:
将flag长度设为38,一分为2,q是p的下一个质数,,在经过后的算法最终得到

解题思路

只要我们计算出c1、c2的值,就可通过方程组计算出flag的左右两部分F1、F2

而求出c1、c2的关键就是找到p、q,在加密过程中我们已经分析出了p、q的求法,当然,由于p、q非常接近,也可以使用yafu进行分解。所以此题也就迎刃而解了。

解题脚本

# -*- coding: UTF-8 -*-
from gmpy2 import *
from Crypto.Util.number import *
import sympy

n=mpz(636585149594574746909030160182690866222909256464847291783000651837227921337237899651287943597773270944384034858925295744880727101606841413640006527614873110651410155893776548737823152943797884729130149758279127430044739254000426610922834573094957082589539445610828279428814524313491262061930512829074466232633130599104490893572093943832740301809630847541592548921200288222432789208650949937638303429456468889100192613859073752923812454212239908948930178355331390933536771065791817643978763045030833712326162883810638120029378337092938662174119747687899484603628344079493556601422498405360731958162719296160584042671057160241284852522913676264596201906163)
m1=90009974341452243216986938028371257528604943208941176518717463554774967878152694586469377765296113165659498726012712288670458884373971419842750929287658640266219686646956929872115782173093979742958745121671928568709468526098715927189829600497283118051641107305128852697032053368115181216069626606165503465125725204875578701237789292966211824002761481815276666236869005129138862782476859103086726091860497614883282949955023222414333243193268564781621699870412557822404381213804026685831221430728290755597819259339616650158674713248841654338515199405532003173732520457813901170264713085107077001478083341339002069870585378257051150217511755761491021553239
m2=487443985757405173426628188375657117604235507936967522993257972108872283698305238454465723214226871414276788912058186197039821242912736742824080627680971802511206914394672159240206910735850651999316100014691067295708138639363203596244693995562780286637116394738250774129759021080197323724805414668042318806010652814405078769738548913675466181551005527065309515364950610137206393257148357659666687091662749848560225453826362271704292692847596339533229088038820532086109421158575841077601268713175097874083536249006018948789413238783922845633494023608865256071962856581229890043896939025613600564283391329331452199062858930374565991634191495137939574539546
e = 0x10001

q = next_prime(iroot(n,2)[0])
p = n//q
#print 'p=',p,'q=',q
phi = (p-1)*(q-1)
d = invert(e,phi)
c1 = pow(m1,d,n)
c2 = pow(m2,d,n)

F1 = sympy.Symbol('F1')#方程组定义变量
F2 = sympy.Symbol('F2')
f1 = F1+F2-c1
f2 = pow(F1,3)+pow(F2,3)-c2
result = sympy.solve([f1,f2],[F1,F2])

flag1 = long_to_bytes(result[0][1])
flag2 = long_to_bytes(result[0][0])
flag  = flag1 + flag2
print flag

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nz3mADFK-1666617966495)(assets/image-20221024212203-e17s95i.png)]​

在安装Crypto库时一定要注意虚拟机联网!!!!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值