Buuctf reverse [FlareOn4]IgniteMe 题解

news2024/9/30 1:29:27

一. 查壳
无壳32位程序请添加图片描述
二. ida打开

请添加图片描述

  1. GetStdHandle函数根据微软官方文档可以得知是获取标准输入/输出/错误的句柄
    参数里的 0xFFFFFFF6转换一下是4294967286, 对应(DWORD) -10
    所以这里的WriteFile函数实际上是实现了printf的功能

请添加图片描述

  1. sub_4010F0()函数
    其功能是通过ReadFile函数读取输入的字符串并保存到地址为403078的内存处
int sub_4010F0()
{
  unsigned int v0; // eax
  char Buffer[260]; // [esp+0h] [ebp-110h] BYREF
  DWORD NumberOfBytesRead; // [esp+104h] [ebp-Ch] BYREF
  unsigned int i; // [esp+108h] [ebp-8h]
  char v5; // [esp+10Fh] [ebp-1h]

  v5 = 0;
  for ( i = 0; i < 260; ++i )
    Buffer[i] = 0;                              // 清空buffer数组
  ReadFile(hFile, Buffer, 260u, &NumberOfBytesRead, 0);// 读取数据到buffer中
  for ( i = 0; ; ++i )
  {
    v0 = strlen_401020(Buffer);                 // int类型修改为char*,获取字符串长度
    if ( i >= v0 )
      break;
    v5 = Buffer[i];
    if ( v5 != '\n' && v5 != '\r' )
    {
      if ( v5 )
        input_403078[i] = v5;                   // 将Buffer串保存到403078中
    }
  }
  return 1;
}

其中的401020()函数的功能不难发现是返回字符串长度,这里用strlen命名便于理解
另外ida可能会把函数参数认为是int类型(由于32位指针占4字节),可以右键使用set call type将int改为char*

在这里插入图片描述

  1. sub_401050函数
    这个函数的功能是:
    对输入字符串进行加密,加密操作是从flag的末尾到flag的开头进行一个异或操作
    将加密后的字符串和程序保存的加密串进行比较,所以加密串是已知的

v4的初始值由sub_401000()函数赋值,401000中仅有一个rol4函数
_ROL4_函数的功能是循环左移,位移时最高位不舍弃,将最高位挪回最低位
比如二进制数据 10000,循环左移2位后得到00010
这里循环左移四位后再右移一位,最终返回值是0x380004,也就是v4初值

在这里插入图片描述

int sub_401050()
{
  int len; // [esp+0h] [ebp-Ch]
  int i; // [esp+4h] [ebp-8h]
  unsigned int j; // [esp+4h] [ebp-8h]
  char v4; // [esp+Bh] [ebp-1h]

  len = strlen_401020(input_403078);
  v4 = sub_401000();                            // 返回的是0x380004
  for ( i = len - 1; i >= 0; --i )
  {
    encode_flag[i] = v4 ^ input_403078[i];      // 异或操作
    v4 = input_403078[i];
  }
  for ( j = 0; j < 39; ++j )
  {
    if ( encode_flag[j] != (unsigned __int8)encode_flag000[j] )
      return 0;
  }
  return 1;
}
  1. 解题脚本
#include <stdio.h>

int main() {
	unsigned char encode_flag000[] =
	{
	  0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C,
	  0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E,
	  0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13,
	  0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69, 0x00
	};

	char tmp = 0x380004;
	unsigned char flag[40] = { 0 };
	for (int i = 38; i >=0; i--)
	{
		flag[i] = encode_flag000[i] ^ tmp;
		tmp = flag[i];
	}
	puts(flag);
	return 0;
}

得到flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373482.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java EE|TCP/IP协议栈之数据链路层协议详解

文章目录一、数据链路层协议感性认识数据链路层简介以太网简介特点二、以太网数据帧格式详解帧头不同类型对应的载荷三、关于MTU什么是MTUMTU有什么作用ip分片&#xff08;了解&#xff09;参考一、数据链路层协议感性认识 数据链路层简介 从上图可以看出 &#xff0c; 在TCP/…

「JVM 高效并发」Java 线程

进程是资源分配&#xff08;内存地址、文件 I/O 等&#xff09;的基本单位&#xff0c;线程是执行调度&#xff08;处理器资源调度&#xff09;的基本单位&#xff1b; Loom 项目若成功为 Java 引入纤程&#xff08;Fiber&#xff09;&#xff0c;则线程的执行调度单位可能变为…

搭建Vue工程

搭建Vue工程 localhost 127.0.0.1 域名 IP 192.168.0.28 联网IP 最后都会渲染到一个页面里面&#xff0c;有多少个页面就有多少个页面模板。 vue里面改webpack配置 vue.config.js 配置参考 | Vue CLI /assets /api* 开发的时候用到的请求后台地址 和 项目真实部署上线的时候 请…

Linux 练习二 (VIM编辑器 + GCC编译器 + GDB调试)

文章目录VIM命令思维导图GCC编译器1、GCC编译文件练习2、静态库动态库制作练习将此函数编译成动态库将此函数编译成静态库GCC优化选项 -OnGDB调试命令练习练习一&#xff1a;编写一个程序&#xff0c;通过gdb调试&#xff0c;使用到gdb的b&#xff0c;n&#xff0c;s&#xff0…

ccc-台大林轩田机器学习基石-hw1

文章目录Question1-14Question15-PLAQuestion16-PLA平均迭代次数Question17-不同迭代系数的PLAQuestion18-Pocket_PLAQuestion19-PLA的错误率Question20-修改Pocket_PLA迭代次数Question1-14 对于有明确公式和定义的不需要使用到ml 智能系统在与环境的连续互动中学习最优行为策…

Android OTA 相关工具(四) 查看 payload 文件信息

文章目录1. payload_info.py 的使用1. 环境2. 帮助信息2. 查看 payload 文件信息1. 不带选项查看2. 使用 stats 选项查看3. 使用 signagures 选项4. 使用 list_ops 选项查看3. 其它一直以来&#xff0c;很多人都表达过很想去研究一下 Android OTA 的 payload 文件&#xff0c;看…

CSDN原力增长规则解读 实测一个月

CSDN原力越来越难了&#xff0c;当然&#xff0c;这对生态发展来说也是好事。介绍下原力增长有哪些渠道吧。发布原创文章&#xff1a;10分/次&#xff0c;每日上限为15分、2篇回答问题&#xff1a;1分/次&#xff0c;每日上限2分&#xff0c;2回答发动态&#xff1a;1分/次&…

MyBatis 的工作原理解析

文章目录前言一、mybatis工作原理1.1 流程图1.2 步骤解析1.3 代码实现前言 本文记录 Mybatis 的工作原理&#xff0c;做到知识梳理总结的作用。 一、mybatis工作原理 Mybatis 的总体工作原理流程图如下图所示 1.1 流程图 1.2 步骤解析 Mybatis 框架在工作时大致经过8个步骤…

【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用

ArcGIS Pro自带了1000种以上的GeoProcessing工具&#xff0c;几乎可以实现所有你想要做的事。 ArcGIS Pro的二次开发并不需要我们从底层做起&#xff0c;很多功能只要学会调用工具并组合使用&#xff0c;就完全可以实现。 下面介绍如何调用系统自带的GeoProcessing工具&#x…

pmp考试费用要多少?

PMP所带来的费用分为三种&#xff1a;PMP考试费用&#xff0c;PMP培训费用&#xff0c;以及PMP续证费用一、PMP 费用⭕PMP考试费用这个属于PMP本身的考试费用&#xff0c;由PMI机构收取&#xff0c;然后是交给人才管理中心的&#xff0c;费用是3900元人民币&#xff0c;补考的话…

蓝桥杯 考勤打卡

问题描述 小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只 要在一天中员工刷过一次卡, 就认为他到岗了。 现在小蓝导出了一天中所有员工的刷卡记录, 请将所有到岗…

机器学习可解释性一(LIME)

随着深度学习的发展&#xff0c;越来越多的模型诞生&#xff0c;并且在训练集和测试集上的表现甚至于高于人类&#xff0c;但是深度学习一直被认为是一个黑盒模型&#xff0c;我们通俗的认为&#xff0c;经过训练后&#xff0c;机器学习到了数据中的特征&#xff0c;进而可以正…

Python 多进程多线程线程池进程池协程

目录 一、线程与进程很简单的介绍 1.1 线程与进程的区别 二、多进程Process 2.1 多进程与多线程的区别 2.2 多进程为啥要使用队列 2.3 控制进程运行顺序 2.3.1 join &#xff0c; 2.3.1 daemon 守护进程 2.4 进程id 2.5 进程 存活状态is_alive() 2.5 实现自定义多…

python“r e 模块“常见函数详解

正则表达式&#xff1a;英文Regular Expression,是计算机科学的一个重要概念&#xff0c;她使用一种数学算法来解决计算机程序中的文本检索&#xff0c;匹配等问题&#xff0c;正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持&#xff0c;re模块…

python+pytest接口自动化(2)-HTTP协议基础

HTTP协议简介HTTP 即 HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09;&#xff0c;是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。HTTP 协议在 OSI 模型中属…

外贸人用远程工具进行跟单的详细操作

大多了外贸企业为了能保证公司的正常运作&#xff0c;是允许员工远程办公甚至居家办公的。那么作为外贸人员如何用远程软件跟单&#xff1f;怎么用远程软件进行跟单操作&#xff1f; 今天就分享外贸人用远程工具进行跟单的详细操作。 首先我们需要远程连接到我们办公的电脑或服…

JavaScript:严格模式

一、理解严格模式 1.1、JavaScript 是一门弱类型语言&#xff0c;为了防止导致不可预测的错误&#xff0c;增加代码规范&#xff0c;为了使编写的代码变得更合理、更安全、更严谨&#xff0c;ECAMscript5 提出了"严格模式"&#xff0c;处于严格模式下运行的 JavaScr…

Mybatis 分页插件 PageHelper

Mybatis 分页插件 PageHelper 使用步骤&#xff1a;(不咋好用) 1.导入依赖&#xff1a; <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.0</version&g…

《图机器学习》-GNN 《A Single Layer of a GNN》

这里写目录标题一、A Single Layer of a GNN二、Classical GNN Layer1、GCN2、GraphSAGE3、GAT三、GNN Layer in Practice一、A Single Layer of a GNN 单层的神经网络包括两个部分&#xff1a; 消息转换(Message)信息聚合(Aggregation) GNNLayerMessageAggregationGNN\ Laye…

物联网的新应用--触摸物联网

摘要&#xff1a;本文介绍一下触摸物联网的新进展--电子皮肤的物联网应用。还以为物联网的作用领域单单是从现场采集数据或者传输命令到执行设备吗&#xff1f;不&#xff0c;物联网的应用范围远比控制一盏灯大的多。据网上报道&#xff0c;香港城市大学&#xff08;城大&#…