reverse3 1(Base加密)

题目

在这里插入图片描述

做法

下载压缩包,解压,把解压后的文件拖进Exeinfo PE进行分析
在这里插入图片描述
32位,无壳
扔进IDA(32位),找到main,F5反编译
在这里插入图片描述
只是因为在人群中多看了你一眼——第31行的right flag,关键词找到,我们就从这里开始向上分析

if ( !strncmp(Dest, Str2, v2) )
    sub_41132F("rigth flag!\n");

如果Dest和Str2的前v2个字符相同,系统会打印一个right flag给我们,sub_41132F不难猜出是print
我们点进Dest和Str2看看有啥东西(Dest没啥东西,Str2点进去如下,得到Str2的值)
在这里插入图片描述
结合上面分析,得出Dest的值(即Str2的值)
往上继续分析

for ( j = 0; j < v8; ++j )
    Dest[j] += j;

一个for循环,Dest[0] = Dest[0]+0,Dest[1] = Dest[1]+1 …这般规律为结果生成下去,直到j=v8(该循环对Dest做了变化)
再往上就没啥了
但是有一个点不清楚它的作用
在这里插入图片描述
点进sub_4110BE看看
在这里插入图片描述
继续点进去
在这里插入图片描述
遍历一下
(注:看到第16行的 *3 和第19行的 *4 ,这里就是base64对字符的二进制编码做的处理(经验之谈),要不确定的话我们可以继续往下看,这是定义了v9和v10来存放base64对字符的二进制变化;
Base64加密的核心逻辑(分组、补零、填充)必须通过if判断和循环来实现。下面还有if判断和while循环还有for循环,至此,我们基本可以判断本题是Base64加密题)
exp

import base64           #导入模块
Des = "e3nifIH9b_C@n@dH"    #定义目标字符串
flag = ""                   #初始化结果字符串
for i in range(len(Des)):
    flag += chr(ord(Des[i]) - i)    #Des[i]:取出字符串 Des 中索引为 i 的字符。
                                    #ord(Des[i]):使用 ord() 函数获取()内字符的 ASCII 码值。
                                    #ord(Des[i]) - i:将该 ASCII 码值减去其索引位置 i。
print(base64.b64decode(flag))       #进行 Base64 解码并输出结果

得出结果,’ '里的内容换成flag{}格式提交即可
在这里插入图片描述
在这里插入图片描述

更新

于2025.4.17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值