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 base64

Des="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}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SlientRainDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值