当前位置: 首页 > news >正文

BUUCTF逆向wp [WUSTCTF2020]level3

第一步  查壳,本题是64位。

第二步   进主函数,按tab。

点开base64_table,发现标准base64编码表

Main函数里面的那个是编码的文本,本题并不是基于标准base64字符映射的,如下面,跟进这个函数,发现它对base64做了修改,修改后的便是本题字符映射的字符串表。

这是对一个名为base64_table的数组(就是上面提到的那个标准的base64表)进行操作的代码段。base64_table是一个包含至少20个元素的数组,通常用于Base64编码中,它包含64个字符的索引表。这段代码的目的是将数组的前10个元素与后10个元素的位置进行交换。

详细分析:

  1. 循环的初始化:i = 0,这意味着循环将从数组的第一个元素开始。
  2. 循环的条件:i <= 9,这表明循环将执行10次,当i从0增加到9。
  3. 循环体内的操作:
    • v1 = base64_table[i];:将当前索引i处的数组元素赋值给变量v1。这是保存将要交换的元素值的操作。
    • base64_table[i] = base64_table[19 - i];:将索引19 - i处的元素值赋值给索引i处的位置。这是实际进行交换的操作,它将数组前半部分的元素与后半部分的元素进行交换。
    • result = 19 - i;:计算并保存索引19 - i的值到变量result中。这个操作其实是不必要的,因为result的值可以直接在下一行中使用。
    • base64_table[result] = v1;:将之前保存的v1(即原始的base64_table[i])赋值给索引19 - i处的位置,完成交换。
  4. 循环的迭代:每次循环结束时,i的值增加1。

具体来说,这个循环的每次迭代会做以下交换:

  • 当i = 0时,交换base64_table[0]和base64_table[19]
  • 当i = 1时,交换base64_table[1]和base64_table[18]
  • 当i = 9时,交换base64_table[9]和base64_table[10]

在循环结束后,base64_table数组的前10个元素和后10个元素的位置已经被交换。

第三步   编写脚本

得到修改后的用于本题的映射base64表

进入这个网站:在线自定义base64编解码、在线二进制转可打印字符、在线base2、base4、base8、base16、base32、base64--查错网 (chacuo.net)

  Flag{Base64_is_the_start_of_reverse}


http://www.mrgr.cn/news/28966.html

相关文章:

  • 从函数的角度理解运算
  • 【基于 Delphi 的人才管理系统】
  • Java String类讲解(第一节) String构造方法/比较/查找/转化/替换/拆分/截取
  • (算法)大数的进制转换
  • GetMaterialApp组件的用法
  • docker镜像结构
  • 头部检测系统源码分享
  • 安装WINDOWS微软商店已下架的WSL系统,以UBUNTU 16.04 为例
  • 算法设计与分析(循环赛日程表
  • 并发安全与锁
  • TransmittableThreadLocal简单使用
  • UVA-211 多米诺效应 题解答案代码 算法竞赛入门经典第二版
  • 嵌入式DCMI摄像头功能调试方法
  • ChatGLM-6B部署到本地电脑
  • Chainlit集成Langchain并使用通义千问AI知识库高级检索(多重查询)网页对话应用教程
  • C++:析构函数
  • 全面掌握 Jest:从零开始的测试指南(下篇)
  • Python JSON
  • 分析和管理远程服务器方法
  • Netty笔记09-网络协议设计与解析