buu:[2019红帽杯]easyRE wp

放入ida后我人懵了,这是我见过函数最多的一次。但是总归是要尝试的,打开strings window

 ok,这里可以看出两个东西一个是base 64一个是you find me!这意味着flag位置找到了。点进去交叉引用。

 

 第一步是静态分析,然后呢,修改函数名,其实这一步我老是忽略,但其实很重要,可以帮助分析,且有效避免眼瞎。

首先sub_410cc00很容易看出是输出可以看成puts.

然后sub_4406E0(0LL, v15, 37LL),这个函数,第一个参数0,第二个参数,字符指针,第三个参数一个整型变量,这是我看别的师傅的wp才知道这样一般是read。

然后sub_400360这个函数看久了其实一眼就是strcmp

这样就基本改好了

然后偷懒,直接看对比的字符串

 看上面的函数

 这种一看就是标准base64的代码

进行解密

 一遍出不来,看上面的代码也知道要多来几次,

 激动以为flag要来了,点开网站。

 这是什么鬼东西

然后我就陷入了沉思,发现上面的最常见的那一列数字还没用。回去写脚本

 

a=[73,111,100,108,62,81,110,98,40,111,99,121,127,121,46,105,127,100,96,51,119,125,119,101,107,57,123,105,121,61,126,121,76,64,69,67,255]
flag=''
for i in range (0,36):
    flag+=chr(a[i]^i)
print(flag)

出来了这个Info:The first four chars are `flag`

啊这,你不说我也知道。

然后我就果断去看别的师傅的wp,才知道了答案真的很隐晦。

 在这下面的sub_400D35里

 两个异或,第一个是异或可以发现第0个和第3个字符是'f'和'g',他是由一个未知量异或6cc0a0得到,反向操作,知二求三,可以写出那个未知量,然后看下一个异或,Ok直接照着写

v 15= ''
enc1 = 'flag'
v2 = ''
enc =[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]
for i in range(4):
    v15 += chr(enc[i] ^ ord(enc1[i]))
print (v15)
for j in range(len(enc)):
    v2 += chr(enc[i] ^ ord(v15[j%4]))
print(v2)

flag{Act1ve_Defen5e_Test}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值