BUUCTF reverse [ACTF新生赛2020]SoulLike

查看无壳,用ida打开。

前面逻辑比较简单,在到了sub_83A函数的时候,会报错无法反编译。

解决办法是将ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE=64 改为 MAX_FUNCSIZE=1024。

关键函数在这一部分,输入得flag经过多次的异或与v3函数进行比较,如果不匹配则输出wrong on 并输出错误的位置。

我一开始的思路是动态调试输入一样的几个数字,然后进行异或操作之后再与原输入进行异或,希望这样获得进行异或的数值,再与

v3进行异或来获得flag,但是失败了异或好像不能这样用,这样只能进行爆破了。

贴出脚本

from pwn import *
import re

flag = "actf{"
# context.log_level="debug"

k = 0
while True:
    for i in range(33,127):
        p = process('./SoulLike')
        _flag = flag + chr(i)
        print _flag
        p.sendline(_flag)
        s = p.recvline()
        r = re.findall("on #(.*?)\n", s)[0]
        r = int(r)
        if r == k:
            print 'no'
            print k
        elif r == k + 1:
            print s
            flag += chr(i)
            k += 1
            p.close()
        p.close()
    if k > 11:
        break
print (flag)

获得flag后面加上一个}即可。

actf{b0Nf|Re_LiT!}

posted @ 2021-02-07 14:33  Sk2rw  阅读(447)  评论(0编辑  收藏  举报