BUUCTF-reverse-reverse3(超级详细)

查下壳 32位,无壳

BUUCTF-reverse-reverse3(超级详细)_第1张图片

拖进ida32位

具体的快捷键和操作方式就不加赘述了,不懂的可以去第一篇里面找,第一篇介绍的非常详细

BUUCTF-reverse-reverse1(面向新手超详细)_Dua0g的博客-CSDN博客_buuctf reverse

查看字符串:

BUUCTF-reverse-reverse3(超级详细)_第2张图片

 一个base64编码表,一个含有flag函数,base64编码原理及解码脚本在专栏CTF逆向的加密与解密这篇里

base64原理及加密C、Python代码_Dua0g的博客-CSDN博客

点进去然后F5查看主函数

BUUCTF-reverse-reverse3(超级详细)_第3张图片

 老规矩,从下往上看

BUUCTF-reverse-reverse3(超级详细)_第4张图片

 v5为Des(为了简洁后面把Destination叫为Des)的长度,if里面strncmp判断Des和Str2是否相等,相等则输出正确的flag    (同样,不懂这个第30行if()这个函数去上面发的第一篇链接去查找,不加赘述)   所以Str2为flag经过变换后的字符串,点进去看看是啥

接着往上看

BUUCTF-reverse-reverse3(超级详细)_第5张图片

 将v4的值赋给Des,然后对Des做了一个for循环运算,此处为对Des做的一次变化。

变化为:假设Des长度为10,则第一次循环:Des[0]+0  第二次为:Des[1] +1   .....

先记一下。

继续往上

BUUCTF-reverse-reverse3(超级详细)_第6张图片

 第22行的函数显然是输入函数,Str为你输入的flag,23行v3是flag的长度,然后关键点就在第24行的函数sub_4110BE对Str做的变换上,点进该函数查看是什么变换

BUUCTF-reverse-reverse3(超级详细)_第7张图片

 继续点进去

BUUCTF-reverse-reverse3(超级详细)_第8张图片

 此处教一个简单方法

BUUCTF-reverse-reverse3(超级详细)_第9张图片

 看到"/3""和*4"是不是想到了什么,没错就是base64对字符的二进制编码做的处理,这是定义了v9和v10来存放base64对字符的二进制变化;倘若你不确定,继续往下看

BUUCTF-reverse-reverse3(超级详细)_第10张图片

一个if判断,两个循环(别的题目中也可能是for循环、do循环)结合前面的猜测实锤了函数是base64加密

然后正向总结一下思路:输入了一个Str字符串,然后对字符串做了一个base64加密,该加密的值赋给了v4,v4被赋给了Des,Des做了一个for循环,该循环对Des做了变化,最后倘若Des与Str2相等则输出正确的flag

所以写解密脚本思路为:将Str2逆向还原为Des,再对Des做base64解码

python代码如下:

import base64

Des="e3nifIH9b_C@n@dH"
flag=""

for i in range(len(Des)):
    flag+=chr(ord(Des[i])-i)
print(base64.b64decode(flag))

有点累,不解释代码意思了,不明白这段代码意思的可以私信

BUUCTF-reverse-reverse3(超级详细)_第11张图片

 flag{i_l0ve_you}

你可能感兴趣的:(BUUCTF,安全)