[BUUCTF]REVERSE——[2019红帽杯]easyRE

[2019红帽杯]easyRE

附件

步骤:

  1. ida载入,没有main函数,就先检索了程序里的字符串
    在这里插入图片描述
    发现了base64加密的特征字符串,双击you found me跟进,找到了调用它的函数,函数很长,我们分开看
  2. 首先我们输入的数据与它下表异或后等于数组a
    在这里插入图片描述
    数组a里的值,一开始ida分析出来是v17这种的参数,我改了一部分,太多了没有全部修改完,它这边定义了一个长度为36的数组,数值看图
    在这里插入图片描述
    先写个异或脚本,看一下我们输入的字符串是什么
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]

flag=""

for i in range(36):
    flag+=chr(a[i]^i)

print (flag)

在这里插入图片描述
看模样都知道不是flag,继续往下看
在这里插入图片描述

利用在线解密工具将得到的字符串base64解密10次即可得到我们第二次输入的数据
base64加密10次后的密文
在这里插入图片描述
自己python3的base64库出了点问题,就用的在线工具解密
在这里插入图片描述
https://bbs.pediy.com/thread-254172.htm
得到了一个网站,进去就是一个看雪的帖子,看网页源码也没找到flag
程序都结束了,还没找到flag,看了其他师傅的wp后才知道,在我们base64加密结束后,下面有调用一个sub_400D35的函数
在这里插入图片描述
在这里插入图片描述
24行,v5开始的数组和我们已知的一个数组抑或后能得到‘flag’的字样,我们可以反向异或得到v5,之后进行28行的异或操作,得到v2,看看v2是啥

我们以知的数组
在这里插入图片描述

v5 = ''
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):
    v5 += chr(enc[i] ^ ord(enc1[i]))
print (v5)

for i in range(len(enc)):
    v2 += chr(enc[i] ^ ord(v5[i%4]))
print(v2)

在这里插入图片描述
flag{Act1ve_Defen5e_Test}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值