BUUCTF [WUSTCTF2020]level3
考点:base64,交叉引用标准表查看加密逻辑
查壳,进入ida
shiftF12,猜测是base64魔改标准表的题目
回到main函数
结合程序逻辑:
程序一半概率→ 运行自己写的 base64_encode
另一半概率→ 直接输出一段 ** 长得像 Base64、但作者说 “和标准不一样”** 的字符串
题目暗示非常明显:
“这是我的程序生成的奇怪字符串,不是标准 base64”
→ 意思就是:这是用我自定义的 Base64 表编码出来的 flag。
所以d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD==就是加密后的字符串
v3 = base64_encode(v6);这里虽然是标准base64加密,双击base64_table查看也是标准表,但是直接标准表解密不出来
按A
交叉引用base64_table
进入O_OLookAtYou,这就是base64标准表被改的伪代码
#include <stdio.h> int main() { char base64_table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for ( int i = 0; i <= 9; ++i ) { char v1 = base64_table[i]; base64_table[i] = base64_table[19 - i]; int result = 19 - i; base64_table[result] = v1; } printf("%s",base64_table); getchar(); return 0; }
解得加密后的编码表是TSRQPONMLKJIHGFEDCBAUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
解得flag{Base64_is_the_start_of_reverse}
