32位载入
字符串没有找到有用信息
进入主函数
sub_403CF8
看到file,猜是读取文件的,没什么用
sub_401080
这边是base64加密,从代码看不出来的话,这边的密码表可以点进去,虽然是EOA0,但E0AA的空间和他是连在一起的,所以这俩个合在一起就是密码表,然后看到那个 ‘+/’,这些符号应该就可以看出来base64加密了
sub_401000
base加密开头的函数,就是交换字符,从第6个开始,往后数到15
因为这俩个空间是连在一起的,所以可以当作一个数组
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
所以才有第15个,不然到不了15的
也就是QRSTUVWXY和GHIJKLMNOP相互交换
这边交换之后形成了新的密码表
"ABCDEFQRSTUVWXYGHIJKLMNOPGHIJKLMNOPZabcdefghijklmnopqrstuvwxyz0123456789+/
sub_401030
这个就很简单了,大小写字母转化,非字母的就不动
思路
首先这里有一个比较的函数,结合上面所说的,这个byte_40E0E4就是我们输入的字符串经过加密后的样子,就到这来,
1.先进行大小写转换
2,算出新的密码表
3,通过新的密码表,对恢复原大小写的字符串进行base64解密
因为密码表被动过了,所以一些解密网站都没用了,要自己写代码解密,这个我也不会,贴上大佬的
脚本
import base64
flag = ''
dict = {}
offset = 10
string = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'.swapcase() #sub_401030()
print ('转换后的字符串:'+string)
myb = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for i in range(len(myb)):
dict[myb[i]] = myb[i]
for i in range(6, 15): #sub_401000()
dict[myb[i]] , dict[myb[i+offset]] = dict[myb[i+offset]] , dict[myb[i]] # 恢复base64密钥表
print ('**********')
for i in dict:
print (i,dict[i])
print ('**********')
for i in range(len(string)):
flag += dict[myb[i]]
flag = base64.b64decode(flag)
print(flag)
flag{bAse64_h2s_a_Surprise}