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}