特殊的 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,游戏结束~

相关推荐
uwvwko5 天前
ctfshow——web入门191~194
前端·数据库·mysql·安全·ctf
不想学密码的程序员不是好的攻城狮7 天前
TGCTF web
python·网络安全·web·ctf
CYRUS_STUDIO15 天前
Frida Stalker Trace 指令跟踪&寄存器变化监控
android·逆向·汇编语言
huan666*16 天前
CTF类题目复现总结-hashcat 1
ctf·office文件密码破解·john工具使用
ALe要立志成为web糕手19 天前
SESSION_UPLOAD_PROGRESS 的利用
python·web安全·网络安全·ctf
ad禥思妙想19 天前
NSSCTF(MISC)—[justCTF 2020]pdf
ctf·misc
石氏是时试22 天前
[VolgaCTF 2025] Baby-Welcome,BrokeBroke,Field Rules
ctf
Sweet_vinegar22 天前
变量1(WEB)
安全·web·ctf·bugku
CYRUS_STUDIO23 天前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·逆向·汇编语言
Sweet_vinegar23 天前
Wire1
安全·ctf·misc·攻防世界