buu SameMod(奇怪的共模攻击)

题目:

{6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249,773}
{6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249,839}

message1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
message2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535

首先,审计题目,我们可以发现出现了相同的n值,给了我们两组不同的c值和n值,于是,我们自然而然的可以联想到共模攻击,于是,带入共模攻击的思路:

c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535
import gmpy2
S=gmpy2.gcdext(e1,e2)
s1=S[1]
s2=S[2]
m=(gmpy2.powmod(c1,s1,n)*gmpy2.powmod(c2,s2,n))%n
print(m)

此题在得到m值后,我们常规的将其long_to_bytes转换出来是一堆乱码,于是,我们输出m值查看,可以发现m的开头为1,而这样是不可能转换为可见字节的,所以,考虑为其他的典型,一番测试后,发现是ascii码,于是解题:

m=str(m)
flag=''
i=0
while i<len(m):
    if m[i]=='1':
        flag+=chr(int(m[i:i+3]))
        i+=3
    else:
        flag+=chr(int(m[i:i+2]))
        i+=2
print(flag)

exp:

n=6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249
e1=773
e2=839

c1=3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349
c2=5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535
import gmpy2
S=gmpy2.gcdext(e1,e2)
s1=S[1]
s2=S[2]
m=(gmpy2.powmod(c1,s1,n)*gmpy2.powmod(c2,s2,n))%n
print(m)

m=str(m)
flag=''
i=0
while i<len(m):
    if m[i]=='1':
        flag+=chr(int(m[i:i+3]))
        i+=3
    else:
        flag+=chr(int(m[i:i+2]))
        i+=2
print(flag)



得到:flag{whenwethinkitispossible}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值