200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > BUUCTF-reverse-reverse3(超级详细)

BUUCTF-reverse-reverse3(超级详细)

时间:2019-11-30 17:44:31

相关推荐

BUUCTF-reverse-reverse3(超级详细)

查下壳 32位,无壳

拖进ida32位

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

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

查看字符串:

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

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

点进去然后F5查看主函数

老规矩,从下往上看

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

接着往上看

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

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

先记一下。

继续往上

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

继续点进去

此处教一个简单方法

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

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

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

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

python代码如下:

import base64Des="e3nifIH9b_C@n@dH"flag=""for i in range(len(Des)):flag+=chr(ord(Des[i])-i)print(base64.b64decode(flag))

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

flag{i_l0ve_you}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。