buuctf [2019红帽杯]easyRE
buuctf [2019红帽杯]easyRE
查壳
64位无壳,拖入IDA
全是这种函数,无main函数,有一个start函数但没什么用,打开字符串子视图看看有没有什么信息
前五个比较重要,跟进到唯一一个引用函数
分析一下第一阶段,就是输入一个长度为36的字符串,这里IDA的识别有点问题,v12、v13和v14应该是连在一起的一个数组,不然下面的if判断条件中v12数组会越界
写个脚本看一下v15里的是什么内容
1 | v12="Iodl>Qnb(ocy\x7Fy.i\x7Fd`3w}wek9{iy=~yL@EC" |
输出结果是 Info:The first four chars are `flag`,没什么用...
往下分析
输入的字符串进行10次函数运算后得到的结果与off_6CC090
处字符进行比较
查看sub_400E44
函数与off_6CC090
内容
正常的base64表,其实刚才看字符串视图就已经看到了
这里就是加密后的字符串,解密十次得到
https://bbs.kanxue.com/thread-254172-3.htm
又被骗了...
其实真正的有效信息在off_6CC090
下方,跟进引用函数
这里可以看到flag初具雏形,不用管上面的1234次循环,直接根据byte_6CC0A0
处的内容可以得到v1和v4,这里unsigned_int8
和HIBYTE
是把低八位和高八位取出来,分别是f和g,可以合理猜测整个就是flag
脚本
1 | a=[0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B] |
得到flag
虽然这题当时好像只是一道签到,但很搞的是被骗了两次...
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Pluto's blog!