预期解(未完成)
下载下来一个字节码文件,是一种没见过的语言,解释器在:项目地址
而且这个语言并没自带的反编译器,因此下载下来源码,发现debugger.c文件里有disassemble功能的函数。尝试编译出一个debug版本的解释器,但是报错失败了。(呜呜回头去看看官方有没有wp)
非预期解
直接看字节码文件里有长得像打乱后flag的明文,且发现代码最后的比较是逐字节比较。因此直接patch这些比较字符串然后进行爆破。
from pwn import *
context.log_level = 'warn'
def solve1(c): # 爆破一个字节
for j in range(23):
p = process(["camlrunm", "./tmp"])
p.sendline(b"?" * j + bytes([c]) + b"?" * (22 - j))
if p.recv() == b'correct':
p.close()
return j
raise IndexError("Connot Find")
binary = list(open("./challenge", "rb").read())
cmp = []
for i in range(23):
cmp.append(binary[0x43ec+i*0x10])
binary[0x43ec+i*0x10] = ord('?') # 把所有cmp字节都置为?
print(bytes(cmp))
flag = [0 for i in range(23)]
for i in range(23):
binary[0x43ec+i*0x10] = cmp[i] # 把需要爆破的字节还原
open("./tmp", "wb").write(bytes(binary))
flag[solve1(cmp[i])] = cmp[i]
binary[0x43ec+i*0x10] = ord("?")
print(bytes(flag)) # BALSN{TH1s0n3i57oOE4zY}