IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> buu-特殊的 BASE64 -> 正文阅读

[数据结构与算法]buu-特殊的 BASE64

64位exe
在这里插入图片描述

运行还是只有一个输入点,输错退出
ida查看字符串
在这里插入图片描述

等一个密码表.jpg
查看main函数
C++写的程序

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

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

啥也不用管,直接看base64Encode()
没有操作密码表的

std::string __cdecl base64Encode(std::string *p_decode)
{
  std::string *v1; // rdx
  char *v2; // rax
  int v3; // eax
  int v4; // ebx
  char *v5; // rax
  int v6; // eax
  int v7; // ebx
  char *v8; // rax
  int v9; // eax
  _BYTE *v10; // rax
  int v11; // eax
  char *v12; // rax
  int v13; // eax
  _BYTE *v14; // rax
  int v15; // eax
  char *v16; // rax
  int v17; // eax
  int v18; // ebx
  char *v19; // rax
  int v20; // eax
  _BYTE *v21; // rax
  int v22; // eax
  __int64 v24; // [rsp+0h] [rbp-80h]
  char v25; // [rsp+2Fh] [rbp-51h]
  int pos_0; // [rsp+30h] [rbp-50h]
  int pos; // [rsp+34h] [rbp-4Ch]
  int len; // [rsp+38h] [rbp-48h]
  int i; // [rsp+3Ch] [rbp-44h]
  std::string *p_encodeResult; // [rsp+60h] [rbp-20h]
  std::string *p_decodea; // [rsp+68h] [rbp-18h]

  p_encodeResult = p_decode;
  p_decodea = v1;
  std::allocator<char>::allocator((char *)&v24 + 47);
  std::string::string(p_encodeResult, &unk_489084, &v25);
  std::allocator<char>::~allocator(&v25);
  len = std::string::length(p_decodea);
  for ( i = 0; len / 3 > i; ++i )
  {
    v2 = (char *)std::string::operator[](p_decodea, 3 * i);
    v3 = *(char *)std::string::operator[](&baseKey, *v2 >> 2);
    std::string::operator+=(p_encodeResult);
    v4 = 16 * (*(_BYTE *)std::string::operator[](p_decodea, 3 * i) & 3);
    v5 = (char *)std::string::operator[](p_decodea, 3 * i + 1);
    v6 = *(char *)std::string::operator[](&baseKey, v4 | (*v5 >> 4));
    std::string::operator+=(p_encodeResult);
    v7 = 4 * (*(_BYTE *)std::string::operator[](p_decodea, 3 * i + 1) & 0xF);
    v8 = (char *)std::string::operator[](p_decodea, 3 * i + 2);
    v9 = *(char *)std::string::operator[](&baseKey, v7 | (*v8 >> 6));
    std::string::operator+=(p_encodeResult);
    v10 = (_BYTE *)std::string::operator[](p_decodea, 3 * i + 2);
    v11 = *(char *)std::string::operator[](&baseKey, *v10 & 0x3F);
    std::string::operator+=(p_encodeResult);
  }
  if ( len % 3 == 1 )
  {
    pos = 3 * (len / 3);
    v12 = (char *)std::string::operator[](p_decodea, 3 * (len / 3));
    v13 = *(char *)std::string::operator[](&baseKey, *v12 >> 2);
    std::string::operator+=(p_encodeResult);
    v14 = (_BYTE *)std::string::operator[](p_decodea, pos);
    v15 = *(char *)std::string::operator[](&baseKey, 16 * (*v14 & 3));
    std::string::operator+=(p_encodeResult);
    std::string::operator+=(p_encodeResult, "==");
  }
  if ( len % 3 == 2 )
  {
    pos_0 = 3 * (len / 3);
    v16 = (char *)std::string::operator[](p_decodea, 3 * (len / 3));
    v17 = *(char *)std::string::operator[](&baseKey, *v16 >> 2);
    std::string::operator+=(p_encodeResult);
    v18 = 16 * (*(_BYTE *)std::string::operator[](p_decodea, pos_0) & 3);
    v19 = (char *)std::string::operator[](p_decodea, pos_0 + 1);
    v20 = *(char *)std::string::operator[](&baseKey, v18 | (*v19 >> 4));
    std::string::operator+=(p_encodeResult);
    v21 = (_BYTE *)std::string::operator[](p_decodea, pos_0 + 1);
    v22 = *(char *)std::string::operator[](&baseKey, 4 * (*v21 & 0xF));
    std::string::operator+=(p_encodeResult);
    std::string::operator+=(p_encodeResult, "=");
  }
  return (std::string)p_encodeResult;
}

直接拿去用就好了
在这里插入图片描述

import base64
import string
 
str1 = 'mTyqm7wjODkrNLcWl0eqO8K8gc1BPk1GNLgUpI=='

string1 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321/+"
#更改后的密码表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))

在这里插入图片描述

flag{Special_Base64_By_Lich}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:43:30  更:2022-03-16 22:48:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 16:17:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码