misc
2023isctf 你说爱我尊嘟假嘟
这题有点脑洞,需要把你说爱我换成Ook.将尊嘟换为Ook!假嘟换成Ook?(根据语气进行猜测吧)用在线工具解密最后用base64解密即可
2023isctf 杰伦可是流量明星
解压后是一个MP3文件,但是用010查看后发现是一个rar得到一个流量包和MP3,MP3是不能说的秘密,就去看流量包,先尝试看追踪流,但是没有东西,就去直接搜索flag,结果真搜到了
2023isctf 一心不可二用
下载得到附件后是一个apk文件,用010看是一个PK压缩包文件打开发现一堆内容根据提示在010里面搜索,发现了flagzip和路径尝试解压却发现报错了去搜索报错信息发现属于syntax错误,这里有点脑洞,用SyntaxError作为密码试了一下,发现对了
2023isctf stream
根据题意,分析流量包,追踪流查看http一眼sql注入,看他得到的数字,很像ASCII码表,去搓了前4个确实是flag,后面继续手搓,要注意成功返回的是2c2,失败是2d2
flag{Blueshark_Haker2023}
2023isctf Wonderful New World
下载后得到了hmcl的启动器和一个1.20版本的mc,去日志里面看看这些数字看着非常可疑发现是10进制,得到的字符一看就是base64的格式,解密出来
接着去存档那里找,发现这样一种图片,看这个分隔符很像莫斯密码,最后试了一下发现蜂蜜块是.侦测器是分隔,史莱姆块是——得到前半部分,将两部分拼起来就可以了
2023isctf Ez_misc
下载得到了PPT和压缩包,在PPT第五页发现字符尝试用这个作为压缩包密码,猜对了,得到一张图片,发现不能直接打开,用010修复,添加文件头FF D8 FF E0后可以打开隐约看到二维码的样子,用cqr扫一下
2023isctf 小猫
解压出一张小猫图片,用随波逐流一把梭看一下发现了存在隐藏图片分出来发现也是没用,但注意到随波逐流之前分析到jpg的lsb隐写,就用stego看一下发现存在图片,save bin然后把文件头多余部分删掉,得到社会主义核心价值观在最开始的图片左上角竟然还存在坐标正好对应社会主义核心价值观,这是一个社会主义核心价值观加密
公正 公正 公正 诚信 文明 公正 民主
公正 法治 法治 诚信 民主 公正 民主
公正 和谐 公正 民主 和谐 民主 和谐
敬业 和谐 平等 公正 公正 公正 自由
和谐 和谐 公正 自由 和谐 富强 公正
公正 和谐 文明 和谐 和谐 和谐 敬业
和谐 文明 和谐 平等 和谐 自由 和谐
爱国 公正 自由 和谐 富强 和谐 文明
和谐 敬业 和谐 法治 和谐 公正 和谐
法治 公正 自由 公正 文明 公正 公正
和谐 法治 和谐 公正 和谐 公正 法治
友善 法治
解码就得flag
crypto
2023isctf 1Zrsa
题目如下
from secret import flag
from Crypto.Util.number import *
import gmpy2
e = 65537
def genKey(nbits):
while 1:
p1 = getPrime(3*nbits)
p2 = gmpy2.next_prime(p1)
q1 = getPrime(nbits)
q2 = getPrime(nbits)
print(abs((p1 - p2)*q1*q2 / p2) < 0.5)
if (abs((p1 - p2)*q1*q2 / p2) < 0.5):
n1 = p1 * q1
n2 = p2 * q2
return n1,n2
def encrypt(message,e,n):
m = bytes_to_long(message)
cipher = pow(m,e,n)
return cipher
e = 65537
nbits = 512
N1,N2 = genKey(nbits)
c = encrypt(flag,e,N1)
print("c =",c)
print("N1 =",N1)
print("N2 =",N2)
"""
c = 10514867898770499427284608506159580569755258729683776720082395249877529851029152305989048383470182992945743997295638334301128554841767619528809377736651238576700664675871769469687466885347209033023021132575700436470105289467423655742323143373578268184141573237433927498143740155552829633601489926767185335051352605346248971754473960051955670785777007641909166041398566067524811394639822575661469340152913706417365065683835945980239268665146900957692685590242386540944646586739158427428484471978559453954674292300496568823382513505511940062159025700312492163454304120916055466108498000990408937265075788135466153131436
N1 = 29306627985861300819651846356448043523015086509329909246911330574896611830331438353458702041787309531570626136669100576501108581024502570212983369979387658041578384466200573362881060761873478590684611265249166591510948597798713864127744488747451815919677861684787135464097885906630772472111899455047125676738720391327331161464894360886214160668909531050207033060523194208723151015702926842472554933849380343375654696115359960495727909221926251630408376527033291123026893207722440649867394971680316008434251667567174806214522621693042164997381729300075394393372808917061813346794422821819494227772694592990703688149467
N2 = 18405525902524887428651801489049128242565457677879715229456940729064725933277139190670749899959483734341103740185991771024797037242681566772189045321838652668819112989587974866361063424698215713773139281840970499871668796770682692589505769008516630604297570518689639885716307469568821629424402742264467677407820449195383921766157185602677665872353099155904715047452319853202981674101731121033360393547940246101864940155160699277417096395998766928213545196492031975135121409309520198853066288180944871441224241681478164494169741263236267316380581883196836731872676312125837497320438964940186318916950049777255612191899
"""
这里看了大佬的脚本
import gmpy2
import libnum
c = 10514867898770499427284608506159580569755258729683776720082395249877529851029152305989048383470182992945743997295638334301128554841767619528809377736651238576700664675871769469687466885347209033023021132575700436470105289467423655742323143373578268184141573237433927498143740155552829633601489926767185335051352605346248971754473960051955670785777007641909166041398566067524811394639822575661469340152913706417365065683835945980239268665146900957692685590242386540944646586739158427428484471978559453954674292300496568823382513505511940062159025700312492163454304120916055466108498000990408937265075788135466153131436
N1 = 29306627985861300819651846356448043523015086509329909246911330574896611830331438353458702041787309531570626136669100576501108581024502570212983369979387658041578384466200573362881060761873478590684611265249166591510948597798713864127744488747451815919677861684787135464097885906630772472111899455047125676738720391327331161464894360886214160668909531050207033060523194208723151015702926842472554933849380343375654696115359960495727909221926251630408376527033291123026893207722440649867394971680316008434251667567174806214522621693042164997381729300075394393372808917061813346794422821819494227772694592990703688149467
N2 = 18405525902524887428651801489049128242565457677879715229456940729064725933277139190670749899959483734341103740185991771024797037242681566772189045321838652668819112989587974866361063424698215713773139281840970499871668796770682692589505769008516630604297570518689639885716307469568821629424402742264467677407820449195383921766157185602677665872353099155904715047452319853202981674101731121033360393547940246101864940155160699277417096395998766928213545196492031975135121409309520198853066288180944871441224241681478164494169741263236267316380581883196836731872676312125837497320438964940186318916950049777255612191899
e=65537
#这里数组的第一个为0是为了下标从1开始,方便计算和对齐
def get_aList(p,q,a_list = [0]):
a=p//q
a_list.append(a)
if p % q != 0:
return get_aList(q,p%q,a_list)
else:
return a_list
def get_pqList(a_list):
pqList=[(0,0)] #这里跟上述同理
#pqList为一个数组,每个值为一个元组,表示分子和分母
pqList.append((a_list[1],1))
pqList.append( (a_list[1]*a_list[2] + 1, a_list[2]) )
for i in range(3,len(a_list) ):
pqList.append( (a_list[i]*pqList[i-1][0] + pqList[i-2][0] , a_list[i] * pqList[i-1][1] + pqList[i-2][1]) )
return pqList
def crack(N1,N2):
alist = get_aList(N1,N2)
pqList = get_pqList(alist)[1:] #把前面对齐的第0项删掉,或者下边过滤一下不计算第0项
for q1,q2 in pqList:
#找每一项渐进分数
if N1 % q1 == 0 and q1 != 1:
print(q1)
p1 = N1 // q1
d = gmpy2.invert(e,(p1-1)*(q1-1))
m = pow(c,d,N1)
print(n2s(int(m)))
break
if __name__ == "__main__":
crack(N1,N2)
涉及到的定理以及学习:
https://math.stackexchange.com/questions/531736/legendres-proof-continued-fractions-from-hardys-book 运用到了连分数的运算