特殊的 BASE64 1

这个一看题目就是base64编码表被改了.

知识点:

Base64编码使用一个包含64个字符的字符集,这些字符分别是:

  • 大写字母A-Z
  • 小写字母a-z
  • 数字0-9
  • 特殊字符+和/

这些字符分别对应64个不同的6位二进制数。在补零后形成的8位字节中,实际使用的只有低6位。

内容为:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

例行检查,载入PE

无壳,64bit

载入IDA(64bit)

寻找main函数.

cpp 复制代码
int __fastcall main(int argc, const char **argv, const char **envp)
{
  std::ostream *v3; // rax
  std::ostream *v4; // rax
  std::string result; // [rsp+20h] [rbp-60h] BYREF
  std::string rightFlag; // [rsp+30h] [rbp-50h] BYREF
  std::string str; // [rsp+40h] [rbp-40h] BYREF
  char v9; // [rsp+4Fh] [rbp-31h] BYREF
  std::string v10; // [rsp+50h] [rbp-30h] BYREF

  _main();
  std::string::string(&str);
  std::allocator<char>::allocator(&v9);
  std::string::string(&rightFlag, "mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI==", &v9);
  std::allocator<char>::~allocator(&v9);
  v3 = (std::ostream *)std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "Please input your flag!!!!");
  refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v3);
  std::operator>><char>(refptr__ZSt3cin, &str);
  std::string::string(&v10, &str);
  base64Encode(&result);
  std::string::~string(&v10);
  if ( std::operator==<char>(&result, &rightFlag) )
    v4 = (std::ostream *)std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "The flag is right!!!!!!!!!");
  else
    v4 = (std::ostream *)std::operator<<<std::char_traits<char>>(refptr__ZSt4cout, "This is a wrong flag!!!!!!!!");
  refptr__ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(v4);
  std::string::~string(&result);
  std::string::~string(&rightFlag);
  std::string::~string(&str);
  return 0;
}

我们这里可以发现有一个rightflag:mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI==

还有一个base64Encode(&result);,用来进行base64编码,base64编码表估计就在里面呢.

点进去看看.

找到了,开始构造exp

python 复制代码
import base64
str1 = "mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI=="
string1 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+"
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print(base64.b64decode(str1.translate(str.maketrans(string1, string2))))

得到flag,游戏结束~

相关推荐
胡耀超6 天前
固件逆向:从一坨二进制,到一个可以被解释的系统
python·逆向工程·硬件安全·二进制分析·电子数据取证·嵌入式安全·固件逆向
print_Hyon12 天前
【CTF-MISC-音频和视频】分析音频频谱,提取图片中的文件并尝试解码得到rar文件
ctf
print_Hyon12 天前
【CTF-MISC-盲水印】压缩包8字节反转+bkcarck破解压缩包+双图盲水印
ctf
福来阁86号技师12 天前
2026-now 网络安全笔记
网络安全·ctf·awd
print_Hyon13 天前
【CTF-MISC-压缩包】bkcrake通过已知明文文件攻击来破解加密的压缩包
ctf
Lihua奏1 个月前
汇编语言:看懂高级代码背后发生了什么
汇编语言
Amo Xiang1 个月前
申万宏源证券新闻中心 —— AES/ECB 响应解密(摩斯电码派生密钥)
js逆向·python爬虫·逆向工程·aes加密·响应解密
忧云1 个月前
x64dbg 反汇编逆向入门到实操:从安装到动手调试零基础完整教程
逆向工程·反汇编·x64dbg·windows 调试·软件逆向入门
祁白_1 个月前
PHP回调函数
web安全·php·ctf·代码审计·writeup
阿昭L1 个月前
通过KiSystemServiceUser获取SSDT基址
逆向工程·windows内核·ssdt