64位,无壳
这里很容易看出应该是Base64变种了。
shift + f12看看字符情况
本来以为是在这。
所以应该是经过某个函数处理过了。
函数如下:
__int64 O_OLookAtYou()
{
__int64 result; // rax
char v1; // [rsp+1h] [rbp-5h]
int i; // [rsp+2h] [rbp-4h]
for ( i = 0; i <= 9; ++i )
{
v1 = base64_table[i];
base64_table[i] = base64_table[19 - i];
result = 19 - i;
base64_table[result] = v1;
}
return result;
}
可以看到就是位置变换了。
写了个py脚本拿到变换后的base64_tables
base64_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
base64_change_list = []
for i in range(10):
print(base64_list[i],base64_list[19-i])
print("ABCDEFGHIJ"[::-1])
print("KLMNOPQRST"[::-1])
def base64Decode(string):
result = []
string = string.strip("=")
binstr = ""
bin6list = []
bin8list = []
base64_list = "TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
# 还原出6位二进制列表
for ch in string:
bin6list.append("{:>06}".format(str(bin(base64_list.index(ch)).replace("0b", ""))))
# 还原出到2进制值的字符串流
binstr = "".join(bin6list)
# 还原出到8位2进制值的字符串列表
for i in range(0, len(binstr), 8):
bin8list.append(binstr[i:i + 8])
# 根据ascall值得出原字符 最后一个item全是多余的0
for item in range(len(bin8list) - 1):
result.append(chr(int(bin8list[item], 2)))
return "".join(result)
print(base64Decode("d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="))