BUUCTF reverse [网鼎杯 2020 青龙组]jocker

用ida32打开

逻辑很简单,程序先对输入得字符串进行检查是否是24位,不是24位则程序停止运行。

wrong函数里面是一个简单的与运算和异或减法的拼接

omg函数里面先给v2赋值,然后与wrong转换完之后的字符串进行比较。好像挺简单啊。

写了个脚本

flag这就出来了?果然,是个假flag,既然是假的我们就只能接着往下看,其实下面还有两个函数,但是之前以为是俩没用的函数,现在看来关键点应该就在这两个函数里面。

函数无法查看,怪起来了嗷,那我们进行动调,打开x32debug。

找到函数位置,直接下断点运行

这是整个函数,分析一波,应该是输入与hahahaha_do_you_find_me?字符串进行异或,然后与al进行比较,这个地方有点懵逼,整不明白为啥是与al进行比较,在403040这个地方有一串字符串,应该是与这个进行比较,无语,搞不明白,这个地方循环了19次,还剩下五次应该是在finally函数里面,跟进finally函数。

直接开始哭,可能还是太废物了,分析了半天没看懂流程,上面传入五个参数,肯定跟flag有关,某大佬曾经说过,逆向七分逆三分猜,这波直接猜异或。

贴出脚本

a = [0x0E,0x0D,0x09,0x06,0x13,0x05,0x58,0x56,0x3E,0x06,0x0C,0x3C,0x1F,0x57,0x14,0x6B,0x57,0x59,0x0D]
b = 'hahahaha_do_you_find_me?'
c = [0x25,0x74,0x70,0x26,0x3A]
flag=''
for i in range(len(a)):
    flag = flag +chr(a[i]^ord(b[i]))
print(flag)
d = (0x3A^ord('}'))
for i in range(len(c)):
    flag = flag+chr(c[i]^d)
print(flag)

flag{d07abccf8a410cb37a}

 

posted @ 2021-02-04 12:11  Sk2rw  阅读(259)  评论(0)    收藏  举报