press
直接调试黑盒分析算法输入输出,发现下一个字节的依赖于上一个字节来确定。可以直接将press程序作为一个输入输出的模块,从第一个字节开始枚举比对密文,匹配再进入下一个字节。以下代码需要在指定位置下断点调试,这个是为了让数据输入输出同步,否则会有部分字符错误。
# encoding=utf-8
import subprocess
import os
import time
enc_data = list(open("out.bak", "rb").read())
flag = list(b"ZmxhZ3tkZTBiZDY3ZS02ZDI19d995d185ce44090c13e2984b7ecc6d4123123123123123")
fin_flag = "ZmxhZ3tkZTBiZDY3ZS02ZDI"
for i in range(len(fin_flag) ,60):
for e in range(32,127):
#更新flag文件
flag[i] = e
f = open('flag', 'rb+')
f.write(bytes(flag))
f.close()
# 启动进程
subprocess.Popen("./press") # 启动进程
time.sleep(0.03)
# 读取运行结果out
enc = open("./out", 'rb')
data = enc.read()
#ZmxhZ3tkZTBiZDY3ZS02ZDI1LTg3ZDctMTg3Ni1hZDEzMWE2MTY1Y2J9
if data[i] == enc_data[i]:
fin_flag += chr(e)
print("flag = %s" % fin_flag)
break# 此处下断点
enc.close()
os.remove('./out')
time.sleep(0.03)
# 比较
最后解得 ZmxhZ3tkZTBiZDY3ZS02ZDI1LTg3ZDctMTg3Ni1hZDEzMWE2MTY1Y2J9
base64一下得flag
flag{de0bd67e-6d25-87d7-1876-ad131a6165cb}
Lithops
经逆向分析,这个题目就是一个编码问题,多字符串至utf-8字符串之间的转换问题。最终的校验的数据是一个utf-8的数据,提取出来后将其按utf-8输出即可。
flag是 不做伟大时代的旁观者