
无壳
IDA分析

发现base64加密字符串

发现标准base64字母表
尝试能否直接解码

发现是不可见字符,所以base64标准字母表被改变了
寻找调用它的函数

发现改变标准base64字母表的逻辑

写一个py代码来获取改变后的base64字母表
aAbcdefghijklmn = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
a = list(aAbcdefghijklmn)
for n6 in range(6, 15):
v1 = a[n6 + 10]
a[n6 + 10] = a[n6]
a[n6] = v1
aAbcdefghijklmn = ''.join(a)
print(aAbcdefghijklmn)
得到需要的字母表为:
ABCDEFQRSTUVWXYPGHIJKLMNOZabcdefghijklmnopqrstuvwxyz0123456789+/
解密发现依旧是不可见字符
所以还需要其他的函数

可以看出sub_403CF8是自定义的输出函数
所以sub_401080就只能是关于base64编码的函数,点开看看

发现前面都是正常的base64解加密的代码,发现最后面的一个可疑的sub_401030函数打开看看

可以看出其对加密的内容进行了大小写置换
所以py代码加上对加密字符串的大小写置换再解密即可得到flag
bbb = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'
b = list(bbb)
for i in range(len(b)):
if 'a' <= b[i] <= 'z':
b[i] = chr(ord(b[i]) - 32)
elif 'A' <= b[i] <= 'Z':
b[i] = chr(ord(b[i]) + 32)
bbb = ''.join(b)
print(bbb)

完整py代码为:
aAbcdefghijklmn = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
a = list(aAbcdefghijklmn)
for n6 in range(6, 15):
v1 = a[n6 + 10]
a[n6 + 10] = a[n6]
a[n6] = v1
aAbcdefghijklmn = ''.join(a)
print(aAbcdefghijklmn)
bbb = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'
b = list(bbb)
for i in range(len(b)):
if 'a' <= b[i] <= 'z':
b[i] = chr(ord(b[i]) - 32)
elif 'A' <= b[i] <= 'Z':
b[i] = chr(ord(b[i]) + 32)
bbb = ''.join(b)
print(bbb)
