reverse3题解

举报
御麟 发表于 2023/04/25 22:55:30 2023/04/25
【摘要】 ​ 雷霆是当日的雷霆,风雨是当日的风雨,都不必再去说了。​编辑目录1.查壳2.拖入32位IDA静态分析3.编写wp1.查壳​编辑是一个32位可执行文件,没有壳2.拖入32位IDA静态分析找到_main_0函数​编辑 按下F5反编译​编辑函数稍有点复杂,可以先看看string窗口,看看有没有什么关键的字符串能帮助解题​编辑​编辑找到一个标准的base64编码表,说明这个题应该用到了base64...

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

编辑

目录


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())


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。