BUUCTF逆向wp [WUSTCTF2020]level3
第一步 查壳,本题是64位。
第二步 进主函数,按tab。
点开base64_table,发现标准base64编码表
Main函数里面的那个是编码的文本,本题并不是基于标准base64字符映射的,如下面,跟进这个函数,发现它对base64做了修改,修改后的便是本题字符映射的字符串表。
这是对一个名为base64_table的数组(就是上面提到的那个标准的base64表)进行操作的代码段。base64_table是一个包含至少20个元素的数组,通常用于Base64编码中,它包含64个字符的索引表。这段代码的目的是将数组的前10个元素与后10个元素的位置进行交换。
详细分析:
- 循环的初始化:i = 0,这意味着循环将从数组的第一个元素开始。
- 循环的条件:i <= 9,这表明循环将执行10次,当i从0增加到9。
- 循环体内的操作:
- 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处的位置,完成交换。
- 循环的迭代:每次循环结束时,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}