天天看点

BugkuCTF-Reverse题特殊的Base64

知识点

换表的base64特点:

1.出现64个字节的字符串(其实应该叫做表)作为数组取值,并且(经常,不是一定)出现“/”和“+”符号

2.=作为补位,体现为对3求余(%3)

Base64 字典表顺序

Ida打开F5找到加密的,点开basekey

解题流程

无壳

一看这个就知道base64的码表肯定被改了,然后拖进ida一看

用ida64打开。

BugkuCTF-Reverse题特殊的Base64
BugkuCTF-Reverse题特殊的Base64
BugkuCTF-Reverse题特殊的Base64

基本都是构造函数和析构函数,其里一个最显眼的是查找一下

base64Encode(&result);,base64 的码表估计就藏在里面

BugkuCTF-Reverse题特殊的Base64

看了这个&unk_489084

BugkuCTF-Reverse题特殊的Base64

方法一:

下面有个码表,一看就是base64 的,好了,上工具

http://web.chacuo.net/netbasex

BugkuCTF-Reverse题特殊的Base64

得到flag{Special_Base64_By_Lich}

方法二:

盲猜是换表的base64,脚本处理。

贴出脚本

import base64
import string

str1 = "mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI=="   #str1是要解密的代码
string1 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+"   #string1是改过之后的base64表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

"""
str() 函数将对象转化为适于人阅读的形式。

Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示
转换的目标。
注:两个字符串的长度需相同,为一一对应的关系。
maketrans()方法语法:str.maketrans(intab, outtab)
返回值:返回字符串转换后生成的新字符串。

str.maketrans()方法接受一个或两个参数, 返回一个字典(字典的 key 和 value 均用unicode编码)
1.接受两个参数:str.maketrans(str1, str2)
str1, str2均为字符串, 将 str1 和 str2 的元素按次序关系构造成字典, 字典的 key 和 value 均用unicode编码.
intable = "aeiou"
outtable = "12345"
trantab = str.maketrans(intable, outtable)
返回trantab: {97: 49, 101: 50, 105: 51, 111: 52, 117: 53}
2.接受一个参数:str.maketrans(dict1)
dict1 为一个字典, 返回一个字典(字典的 key 和 value 均用unicode编码).
parentheses_table = str.maketrans({"(": None, ")": None})
parentheses_table: {40: None, 41: None}

Python translate() 方法根据 maketrans() 方法给出的字符映射转换表转换字符串里的字符。
返回根据 maketrans() 方法给出的字符映射转换表转换后的字符串。
"""
           
BugkuCTF-Reverse题特殊的Base64

flag{Special_Base64_By_Lich}