BUUOJ [2019红帽杯]easyRE

20 篇文章 0 订阅

Start

IDA,Shift+F12
在这里插入图片描述
跟进去,交叉引用
在这里插入图片描述
F5来到该函数
在这里插入图片描述
关键处
在这里插入图片描述
sub_424BA0可以看出应该是strlen,先判断v53的长度是不是36位,之后作为for循环推出的条件。
每一次都会对v53的单个字符与i进行异或之后判断是否等于下面这一串中的值
在这里插入图片描述
写出脚本:
在这里插入图片描述
得到第一条信息,the first four chars are 'flag'

continue:

在这里插入图片描述
v56调用了10次sub_400E44进行处理,最后与off_6CC090进行sub_400360,根据经验,sub_400360应该就是strcmp

off_6CC090:

在这里插入图片描述
在这里插入图片描述
来到sub_400E44
在这里插入图片描述
这里if就是判断v1是否等于39, 条件成立,v2 = 13
之后进入while循环,每次循环都对a1中的三个值进行运算,之后存到v9
在这里插入图片描述
到这里,大概可以看出是一种加密算法。根据最终的结果,猜测应该就是base64加密,并且加密了10次,
将数据整理之后变成了

Vm0wd2VHUXhTWGhpUm1SWVYwZDRWVll3Wkc5WFJsbDNXa1pPVlUxV2NIcFhhMk0xVmpKS1NHVkdXbFpOYmtKVVZtcEtTMUl5VGtsaVJtUk9ZV3hhZVZadGVHdFRNVTVYVW01T2FGSnRVbGhhVjNoaFZWWmtWMXBFVWxSTmJFcElWbTAxVDJGV1NuTlhia0pXWWxob1dGUnJXbXRXTVZaeVdrWm9hVlpyV1hwV1IzaGhXVmRHVjFOdVVsWmlhMHBZV1ZSR1lWZEdVbFZTYlhSWFRWWndNRlZ0TVc5VWJGcFZWbXR3VjJKSFVYZFdha1pXWlZaT2NtRkhhRk5pVjJoWVYxZDBhMVV3TlhOalJscFlZbGhTY1ZsclduZGxiR1J5VmxSR1ZXSlZjRWhaTUZKaFZqSktWVkZZYUZkV1JWcFlWV3BHYTFkWFRrZFRiV3hvVFVoQ1dsWXhaRFJpTWtsM1RVaG9hbEpYYUhOVmJUVkRZekZhY1ZKcmRGTk5Wa3A2VjJ0U1ExWlhTbFpqUldoYVRVWndkbFpxUmtwbGJVWklZVVprYUdFeGNHOVhXSEJIWkRGS2RGSnJhR2hTYXpWdlZGVm9RMlJzV25STldHUlZUVlpXTlZadE5VOVdiVXBJVld4c1dtSllUWGhXTUZwell6RmFkRkpzVWxOaVNFSktWa1phVTFFeFduUlRhMlJxVWxad1YxWnRlRXRXTVZaSFVsUnNVVlZVTURrPQ==

拿去base64解密,刚好解了10次,得到一个网址
在这里插入图片描述
所以发现这里是个坑,这里不是正确的flag, 翻了一下官方的wp才知道,这个字符串是关键,当时看到off_6CC090的时候并没有在意
在这里插入图片描述
试着交叉引用
在这里插入图片描述
这里对byte_6CC0A0[0]byte_6CC0A3v2的第一个字符和第四个字符异或之后进行了判断也就是第一个字符和第四个字符进行判断,根据之前得到的flag前四个字符是flag
在这里插入图片描述
通过该循环可以发现,v24字节的数,并且是随机获取的,但可以通过if条件里面的语句反推出v2的值
在这里插入图片描述
if里面的for循环,这里每一次异或得到的值就是真正的flag
在这里插入图片描述

exp.py
s1 = 'flag'
v2 = []
flag = ''
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):
	v2.append(enc[i] ^ ord(s1[i]))

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

# flag{Act1ve_Defen5e_Test}
总结:
这道题坑的地方就在于,不知道踩坑了,也不知道是base64加密,然后就去疯狂的逆算法,最后发现是个坑,hhhhhh,考的是心态

End

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值