reverse3题解

雷霆是当日的雷霆,风雨是当日的风雨,都不必再去说了。

目录

1.查壳

2.拖入32位IDA静态分析

3.编写wp


1.查壳

是一个32位可执行文件,没有壳

2.拖入32位IDA静态分析

找到_main_0函数

 按下F5反编译

函数稍有点复杂,可以先看看string窗口,看看有没有什么关键的字符串能帮助解题

找到一个标准的base64编码表,说明这个题应该用到了base64加密

base64加密有关内容

Base64编码和Python解码_光无影的博客-CSDN博客

带着这个获取到的信息继续有针对性地查看反编译的代码

sub_41132F("please enter the flag:");
  sub_411375("%20s", &Str);
  v3 = j_strlen(&Str);
  v4 = (const char *)sub_4110BE((int)&Str, v3, (int)&v12);
  strncpy(Dest, v4, 0x28u);

 这个输入了flag,获取了长度

sub_4110BE可能就是对输入的Str进行了Base64加密,双击跟进查看

双击跟进sub_411AB0

 这一段就是base64加密的特征代码,说明确实是对于这个输入的flag进行了base64加密

使用的应该是我们找到的标准base64编码表

返回主函数继续查看

 v4 = (const char *)sub_4110BE((int)&Str, v3, (int)&v12);
  strncpy(Dest, v4, 0x28u);
  v9 = j_strlen(Dest);
  for ( j = 0; j < v9; ++j )
    Dest[j] += j;
  v5 = j_strlen(Dest);

将加密后的字符串赋值给Dest,进行了一个for循环的操作

if ( !strncmp(Dest, Str2, v5) )
    sub_41132F("rigth flag!\n");
  else
    sub_41132F("wrong flag!\n");

然后将进行了这个操作后的字符串与Str2进行比较,相等就是正确的字符串,说明Str2中存储的就是加密并且for循环操作后的字符串

查看Str2,并且编写逆向脚本,先for循环减去for循环中加的数值,再对得到的字符串解密

 双击跟进Str2,得到Str2

'e3nifIH9b_C@n@dH'

3.编写wp

import base64
tmp=""
Str2='e3nifIH9b_C@n@dH'
for i in range(0,len(Str2)):
    tmp+=chr(ord(Str2[i])-i)
flag=base64.b64decode(tmp.encode());
print(flag.decode())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烨鹰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值