moectf2020 write up for RxEncode
前言
很难很难很难很难的一道逆向题QAQ非新手友好向QAQQQ
不敢想象后面的easyC++有多难Or2
逻辑分析
拖入IDA中进行分析:
程序里头s2 + v15 + v16
的地址是连在一起的,整体应当是一个被IDA解析成碎片的字符串
分析主函数逻辑可知程序会将我们输入的flag经过RxEncode()
函数处理后与前面的那个字符串进行比对
核心函数:RxEncode()
接下来分析RxEncode()
一堆看不懂的操作QAQ
不过我们可以发现其用到了一个find_pos()
函数,里面有一个类似base64码表的东西
大胆猜测RxEncode()
应当是一个换表base64解码(decode)函数!
所以说这个起名方式…
写一个换表base64程序就能够得到flag啦~
解码程序
1 |
|
得到flag
1 | moectf{Y0Ur+C+1s+v3ry+g0o0OOo0d} |
后面才发现python有好多可以用的库…好气啊…
不过我也不会python T T..
以及还需要注意大小端序(wsm倒着存啊…以前的程序员思路好奇怪欸…)
1
2
3
4
5
6
7
8 from base64 import *
from string import *
decoded_flag = b'\x9A\x87\x9C\xB5\xFE\x58\xD1\x4A\xFE\x0B\xED\x6C\xFA\xFD\xEB\xCB\xE8\x34\xA3\x43\x8E\xA3\x47\x7A'
flag = b64encode(decoded_flag).decode().translate(str.maketrans('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234{}789+/"))
print(flag)
moectf2020 write up for RxEncode
http://meteorpursuer.github.io/2020/11/22/moectf2020 write up for RxEncode/
# Related Post
1.RWCTF2023体验赛 write up for Digging into kernel 3
2.utctf2021 write up for 2Smol
3.minilctf2020 write up for easycpp
4.moectf2020 write up for baby canary
5.moectf2020 write up for baby migration
6.GWCTF 2019 write up for xxor
7.dmctf2020 write up for re4
8.moectf2020 write up for rop2
1.RWCTF2023体验赛 write up for Digging into kernel 3
2.utctf2021 write up for 2Smol
3.minilctf2020 write up for easycpp
4.moectf2020 write up for baby canary
5.moectf2020 write up for baby migration
6.GWCTF 2019 write up for xxor
7.dmctf2020 write up for re4
8.moectf2020 write up for rop2