2023年磐石行动第十五周

1、dssssa1

题目源码如下:

from Crypto.Util.number import *
import random
from gmpy2 import *
from hashlib import sha1
from secret import flag
m = bytes_to_long(flag)
q = getPrime(160)

while True:
    p = getPrime(1024)
    if (p-1) % q == 0:
        break
        
h = random.randint(1, p-2)
g = powmod(h, (p-1)//q, p)
x = random.randint(1, q-1)
y = powmod(g, x, p)

k = random.randint(1, q-1)
h = bytes_to_long(sha1(flag).digest())
r = powmod(g, k, p) % q
s = (h + x*r) * invert(k, q) % q

c = powmod(m, x, p*q)

print(p, q, g, y, h, r, s, c, k, sep=',')

# 94515040220263097875872541668071470619435707358211716562219917331797767488022053087267566586709944785329708571559126640339609375166385904147189950035630910404534642622114804635856314928438531544553236458244225698694846607333226704467932079712515971615643868209281460429629880920550469170449935295454629293399,1001535514136994695529636128311212301250326767869,89288700225171676599759774184146798321191748739703246395529001979988401303800066044674449834184095667747898974375431700503800142840899194492182057885675147681600217979466719692984863330298347742657472936559041930489702116255999412448996714923112824244267910808782794442895518685864174817501040060680962447941,93887528695360292524813814240190328732283663255426806128197957720674496260060703595933676082882204724501085633424942582304707395449222043328895852812543576418567716781870179606049899540449729036771290550645770978667075821043797569255787271932556218014920373462882329802597672026806552417735660553144344650642,775593521305134275967472254218401264703166138817,75084117510316201869105133948164969652170742276,599417004454208825884865529281453774324093134827,94203926294365722030261882520165826558476099177297861176153811285238289485953276649563642144753132730431066372867407177248194182778827143183520415437355921352580608448713381897280433120409711633310458263502217605470824497215111936036532237050330222480782799188409969149722885261258984444311562364318406725475829089368796269160936194172040318140462371217663,208672457767877303895327222020982963931779123819

通过阅读源码发现整个算法就是DSA算法,最后密文c通过RSA加密,已经知道了p、q、c,但是缺少x的值

通过之前学习的DSA知识,可以知道x的计算公式为:

x = (s*k - h)*r_ni
#那么python的计算方式就是
temp = (k*s-h) * gmpy2.invert(r, q)
x = gmpy2.f_mod(temp, q)

然后简单写一个exp:

import gmpy2
from Crypto.Util.number import *
p, q, g, y, h, r, s, c, k = 94515040220263097875872541668071470619435707358211716562219917331797767488022053087267566586709944785329708571559126640339609375166385904147189950035630910404534642622114804635856314928438531544553236458244225698694846607333226704467932079712515971615643868209281460429629880920550469170449935295454629293399,1001535514136994695529636128311212301250326767869,89288700225171676599759774184146798321191748739703246395529001979988401303800066044674449834184095667747898974375431700503800142840899194492182057885675147681600217979466719692984863330298347742657472936559041930489702116255999412448996714923112824244267910808782794442895518685864174817501040060680962447941,93887528695360292524813814240190328732283663255426806128197957720674496260060703595933676082882204724501085633424942582304707395449222043328895852812543576418567716781870179606049899540449729036771290550645770978667075821043797569255787271932556218014920373462882329802597672026806552417735660553144344650642,775593521305134275967472254218401264703166138817,75084117510316201869105133948164969652170742276,599417004454208825884865529281453774324093134827,94203926294365722030261882520165826558476099177297861176153811285238289485953276649563642144753132730431066372867407177248194182778827143183520415437355921352580608448713381897280433120409711633310458263502217605470824497215111936036532237050330222480782799188409969149722885261258984444311562364318406725475829089368796269160936194172040318140462371217663,208672457767877303895327222020982963931779123819



temp = (k*s-h) * gmpy2.invert(r, q)
x = gmpy2.f_mod(temp, q)

phi_n = (p-1)*(q-1)
n = p*q
d = gmpy2.invert(x,phi_n)
flag = pow(c,d,n)
print(long_to_bytes(flag))
#DASCTF{1d6f9460a596a4b38acc7263ea37b84d}

计算得到flag如下:

DASCTF{1d6f9460a596a4b38acc7263ea37b84d}

2、MusicBox

题目下载得到Secret.mp3,看到mp3想到mp3stego工具,但是缺少密码,那么寻找密码或者爆破密码就是接下来要做的,简单爆破了下发现不行

然后通过Audacity打开音频文件
在这里插入图片描述

通过播放和查看波形,发现摩斯编码,将短的作为. 长的作为-,不算特别多,手工将摩斯码撸出来

得到如下摩斯

.---- .---- -----
.---- ..... .----
.---- ....- ....-
.---- ..... .----
.---- ..... -....
.---- ....- --...
.---- ..--- ...--
.---- -.... ....-
.---- ....- .----
.---- -.... ..---

然后通过工具解密之后发现

.---- .---- ----- 110
.---- ..... .---- 151
.---- ....- ....- 144
.---- ..... .---- 151
.---- ..... -.... 156
.---- ....- --... 147
.---- ..--- ...-- 123
.---- -.... ....- 164
.---- ....- .---- 141
.---- -.... ..--- 162

然后尝试十进制发现乱码,将最前面的1去掉,处理为键盘密码,发现也不对,然后发现这些数字只有0-7,符合8进制的特征
在这里插入图片描述

得到字符串HidingStar

然后提交发现不对,想起来mp3隐写的环节,尝试解密

在这里插入图片描述

UU5GUEdTezI1MzRzMzM0MzZvOTgzMW45MXBxMTlzcjc1cXE0MTczfQ==

base64和rot13解码之后得到flag
在这里插入图片描述

得到flag如下:

DASCTF{2534f33436b9831a91cd19fe75dd4173}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值