文件无壳 直接拖入IDA
进入主函数 F5查看伪c代码 能够看到很明显的base64编码 还能看到一串可疑字符串
于是直接把字符串拉去base64解密 但是解密出来有乱码 感觉应该是一种变形的base64编码 结合And I get a strange string from my program which is different from the standard base64这句话更加确定编码表被做了修改 于是继续回到主函数
看到base64编码表base64_table
双击查看编码表
对base64_64按X键查看引用函数
进入O_OLookAtYou函数
这段代码使用一个 for
循环遍历从索引 0
到 9
的整对于循环中的每个 i
,它首先存储base64_table[i]
的值到变量 v1
中。然后,它将 base64_table[19 - i]
的值复制到 base64_table[i]
。接着,它计算 19 - i
并将这个结果存储在 result
变量中。这个值实际上是 base64_table
中与当前 i
索引对称的元素的原始索引。最后,它将之前保存在 v1
中的原始 base64_table[i]
的值复制回 base64_table[result]
。由于 result
是 19 - i
,这实际上是将原始值放回了它在对称操作后被覆盖的位置。
编写脚本 输出新的base64编码表
def reverse_symmetric_pairs(base64_table_str):
# 将字符串转换为列表
base64_table = list(base64_table_str)
# 执行对称交换
for i in range(10):
base64_table[i], base64_table[19 - i] = base64_table[19 - i], base64_table[i]
# 返回交换后的字符串
return ''.join(base64_table)
# 使用函数
base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(reverse_symmetric_pairs(base64_chars))
改变后的编码表为TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这道题的思路是字符串d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD==利用新的编码表进行base64解密
编写反脚本
import base64
str_1 = "d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="
str_base = "TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
#自定义的编码表
str_zh_base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
#通用编码表
flag = base64.b64decode(str_1.translate(str.maketrans(str_base,str_zh_base)))
print(flag)
得到flag{Base64_is_the_start_of_reverse}