本文主要是介绍BaseCTF [Week2] 最简单的编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:做题笔记。
下载解压 查壳。
64ida打开。
查找字符串。
跟进。
逆着向前看。
说明是密文。
里面是base64的变异加密。
原base64关键加密:
(看BaseCTF week1 [第一周]BasePlus 官方WP)
变种后:
在此基础上加上了a4[]的值,而a4对应的是 v9(已知)
接着往上看。
sub_14001119A:
大致看着挺复杂的。
不过,没关系,我们可以去动态调试。
跟进。
说明这是对原base64表进行了换位,从而得到了一个新的base64表。
程序整体逻辑就是:
输出的字符串,用新的base64表,以及新的base64算法去进行编码,从而得到了编码后的字符。
可是,佬,思路清晰,动手能力不行怎么办?
没事,我们有豆妈。。。豆妈爱你!!!
注意,豆妈生成的解码脚本需要密文后再加一个 “=” ()
自己写的话。。。我不知道需不需要 ”=“
脚本:
newbase64 = 'CDABGHEFKLIJOPMNSTQRWXUVabYZefcdijghmnklqropuvstyzwx23016745+/89'
base64_dict = {v: k for k, v in enumerate(newbase64)}def custom_base64_decode(encoded):padding = encoded.count('=')encoded = encoded.rstrip('=')a4 = [1, 2, 3, 4]decoded = b''i = 0while i < len(encoded):if i + 3 >= len(encoded):breakv1 = base64_dict[encoded[i]]v2 = base64_dict[encoded[i + 1]] if i + 1 < len(encoded) else 0v3 = base64_dict[encoded[i + 2]] if i + 2 < len(encoded) else 0v4 = base64_dict[encoded[i + 3]] if i + 3 < len(encoded) else 0v13 = ((v1 - a4[0]) << 18) + ((v2 - a4[1]) << 12) + ((v3 - a4[2]) << 6) + (v4 - a4[3])decoded += bytes([(v13 >> 16) & 0xFF])if i + 2 < len(encoded):decoded += bytes([(v13 >> 8) & 0xFF])if i + 3 < len(encoded):decoded += bytes([v13 & 0xFF])i += 4return decoded[:-padding]encoded_string = "TqK1YUSaQryEMHaLMnWhYU+Fe0WPenqhRXahfkV6WE2fa3iRW197Za62eEaD="
print(custom_base64_decode(encoded_string).decode('utf-8', errors='replace'))
少个“ } ” O.0? 额,添上就是了。
验证:
BaseCTF{B45E64_eNCoDIn9_I5_rE4LLY_7OO_5implE}
这篇关于BaseCTF [Week2] 最简单的编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!