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

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.kler.cn/a/308383.html

相关文章:

  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • 低代码集成多方API的简单实现
  • 在C++上实现反射用法
  • 【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)
  • 机器视觉和计算机视觉的区别
  • c语言数据结构与算法--简单实现队列的入队和出队
  • k8s介绍及部署
  • stm32 SPI通信外设(硬件SPI读写W25Q64)
  • 火山引擎携手地瓜机器人,加速大模型在机器人场景规模落地
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • 数模原理精解【12】
  • Centos 7.9 安装 Python3.7.9
  • Python 数学建模——Fitter 拟合数据样本的分布
  • 常用游戏运行库下载
  • C++ vector的使用
  • IO模型---BIO、NIO、IO多路复用、AIO详解
  • 【CTF Web】BUUCTF BUU UPLOAD COURSE 1 Writeup(文件上传+PHP+文件包含漏洞)
  • 高等数学 2.5 函数的微分
  • Qt 中openMp 配置
  • QT操作数据库
  • Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息
  • (c++)函数的分文件编写
  • [创业之路-146] :如何理解:复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情数字化,数字化的事情自动化,自动化的事情智能化
  • Chisel简明教程
  • 【大模型实战篇】高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍
  • JDK的选择安装和下载