BUUCTF [2019红帽杯]easyRE

查看文件

使用exeinfo查看,64位文件,放入IDA64中
在这里插入图片描述

程序

查看字符串(shift+F12)
在这里插入图片描述
进入函数查看
在这里插入图片描述
一共三个点,一个一个来解。

第一个

使V15的数组等于V51的数组与下标异或的值,很简单直接写脚本(A异或B=C可以得出C异或B=A)

v15 = [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]
v51 = list()

for i in range(len(v15)):
       v51.append(v15[i]^i)

for i in range(len(v51)):
       print(chr(v51[i]),end='')

爆出来一个字符串,感觉是个提示。
在这里插入图片描述

第二个

进入sub_400E44函数查看
在这里插入图片描述
不难看出这个就是BASE64加密。
在这里插入图片描述
返回主函数
在这里插入图片描述
可以看出,V55经过加密后传给了V6,v6给了V7,一直到V15,一共10次,所以将V0指向的字符进行10次BASE64解码就可以得出。
在这里插入图片描述
结果是个网址https://bbs.pediy.com/thread-254172.htm
在这里插入图片描述
这个网址应该是真的没什么用。

第三个

发现自己完全看不透这个if函数的作用,但我发现了另一个字符串。
在这里插入图片描述
进入字符串的函数。

在这里插入图片描述
发现有’f’和’g’两个字符,可以确定flag就在这个函数中。
第一个for循环完全看不懂,直接往下看,v9是数组v4中的第三个字符,
因为BYTE3()函数的作用是获取高字节也就是数组的第三位。
而第二个for循环的逻辑就是将byte_6CC0A0字符串与V4数组中元素进行异或
但我们并不知道V4全部元素,这时候第一个提示就起到作用了。
前四个字符是flag,再将flag与数组byte_6CC0A0进行异或就可以得出v4的4个元素。
式子(((((j >> 32) >> 30) + j) & 3) - ((j >> 32) >> 30))))可以简化为j&3-0
而j&3又可以等于j%4。
所以就可以写脚本了。

b = [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]
s = "flag"
v21 = []
for i in range(4):
       v21.append(b[i]^ord(s[i]))

for j in range(25):
       print(chr(b[j]^v21[j%4]),end='')

得出flag
flag{Act1ve_Defen5e_Test}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值