BugkuCTF-Reverse题特殊的Base64

知识点

换表的base64特点:
1.出现64个字节的字符串(其实应该叫做表)作为数组取值,并且(经常,不是一定)出现“/”和“+”符号
2.=作为补位,体现为对3求余(%3)

Base64 字典表顺序
Ida打开F5找到加密的,点开basekey

解题流程

无壳
一看这个就知道base64的码表肯定被改了,然后拖进ida一看
用ida64打开。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本都是构造函数和析构函数,其里一个最显眼的是查找一下
base64Encode(&result);,base64 的码表估计就藏在里面
在这里插入图片描述
看了这个&unk_489084
在这里插入图片描述

方法一:

下面有个码表,一看就是base64 的,好了,上工具
http://web.chacuo.net/netbasex
在这里插入图片描述
得到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() 方法给出的字符映射转换表转换后的字符串。
"""

在这里插入图片描述
flag{Special_Base64_By_Lich}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值