深育杯 Reverse WP

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是 不做伟大时代的旁观者

posted @ 2021-11-22 12:09  辰星-cxing  阅读(132)  评论(2编辑  收藏  举报