FlareOn3_Challenge1
1.查壳
无壳,32位程序
2.IDA分析
这道题我们需要首先了解一下base64加密的原理
再来看这道题目
-
每次取三位数进行操作
-
以二进制的形式组合
-
每次取6位,计算十进制
-
按照base64表,查看对应的字符
明显是base64加密
不过这道题不一样的地方在于密码表不一样
密码表:“ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/“
正常密码表: ”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
可以看到就是大小写字母的最后3个字母移道了前面
3.编写exp脚本
import base64
str2 = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q"
# ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/
# ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
_list = list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
flag = ""
for i in str2:
if (ord(i) <= ord('W') and ord(i) >= ord('A')) or (ord(i) <= ord('w') and ord(i) >= ord('a')):
flag += chr(ord(i) + 3)
elif i == 'X':
flag += 'C'
elif i == 'Y':
flag += 'B'
elif i == 'Z':
flag += 'A'
elif i == 'x':
flag += 'c'
elif i == 'y':
flag += 'b'
elif i == 'z':
flag += 'a'
else:
flag += i
print(flag)
print("flag{"+base64.b64decode(flag).decode()+"}")
首先将本题加密后的字符串替换为正常base64加密后的字符串
然后正常解密
c2gwMHRpbmdfcGhpc2hfaW5fYV9iYXJyZWxAZmxhcmUtb24uY29t
flag{sh00ting_phish_in_a_barrel@flare-on.com}