前言
应该是打过的最有希望进线下赛的一次了,密码题出的让我感觉很陌生,有种没活硬整的感觉,当然可能是因为我太菜了,写的题还是太少,继续努力吧。
题目
学会SM
task
我国的商用密码(国密)中有一种杂凑算法(也叫哈希算法), 请用该算法对字符串“heidun2024”进行运算, 将结果(小写十六进制值)作为本题答案。
思路:
用sm3算法直接生成就可以了,也可以用工具
exp
from gmssl import sm3, func text = "heidun2024" hash_value = sm3.sm3_hash(func.bytes_to_list(text.encode())) print(hash_value)
我的进制我做主
task
ergdgjboglfpgcbpbofmgafhfngpfoflfpfkgjgccndcfqfpgcgofofpdadadagr
思路:
有一说一第一次遇到这种题目,让我有种无助的感觉,第一开始认为他是一个随机进制的东西,我就放工具里面转化,很明显是错误的。
后面发现这一串字符到r,也就是18个,盲猜一波18进制,直接转化是错误的,后面pwn✌告诉我前缀是flag{,我把f直接去转化,发现没用,感觉可能是前面加了什么奇奇怪怪的东西,然后看了一些网上的题,发现有的是两三个一组去转化的,试了一下,真tmd出来了。
exp:
a="ergdgjboglfpgcbpbofmgafhfngpfoflfpfkgjgccndcfqfpgcgofofpdadadagr" c="fgpdocabrjlnemhkq" char={} for i in c: char[i]=ord(i)-ord('a') d=[a[i:i+2] for i in range(0,len(a),2)] falg="" for j in d: high=j[0] low=j[1] a1=char[high] a2=char[low] v=a1*18+a2 falg+=chr(v) print(falg)
源码和数据都要保护
task
data_encoded.txt文件是被my_encode()函数加密后的数据,由以下请求产生: my_encode.php?key=密钥&data=flag信息 为了避免源码泄漏,PHP使用了某种加密保护的扩展模块。
官方说源文件不能乱发,所以只能这样了,看看思路就行了。
思路:
首先这玩意是个php文件被加密,首先反应就是用在线工具解密,然后发现不管是啥平台的都要钱,秉持着自己写题不花钱的想法,开始手动解密,然后发现不会,崩了。在网上找的贴子全是什么php代码去加密,解密,并没有文件类型的。赛后看了官方wp,他告诉我要么在线平台去解密,要么去搭一个php-beast的环境,以 debug 模式把 PHP 源码还原出来。然后发现这玩意是个类似aes加密,直接解密就好了,里面key也给了。
exp
def my_encode(data,key): decode=[] key_length=len(key) for i,char in enumerate(data): key_c=key[i%key_length] decode_c=(ord(char)-ord(key_c))%256 decode.append(chr(decode_c)) return "".join(decode) with open('data_encoded.txt','r',encoding='latin1') as f: data=f.read() key='hdhd4321' if data: data=my_encode(data,key) print(data) else: print(1)
ok,期末考试继续加油