ADworld reverse wp easyre-153

news2024/11/22 18:20:39

逆向分析

做逆向题先查壳, 就像做pwn先checksec一样
在这里插入图片描述

用PEid查不出来, 用Exeinfo PE可以查出ELF文件的壳
用工具直接脱upx壳, kali自带的工具或者手动安装一个windows的upx工具

脱壳之后拖入IDA32

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int pipedes[2]; // [esp+18h] [ebp-38h] BYREF
  __pid_t v5; // [esp+20h] [ebp-30h]
  int v6; // [esp+24h] [ebp-2Ch] BYREF
  char buf[30]; // [esp+2Eh] [ebp-22h] BYREF
  unsigned int v8; // [esp+4Ch] [ebp-4h]

  v8 = __readgsdword(0x14u);
  pipe(pipedes);
  v5 = fork();                                  // subprocess fpid
  if ( !v5 )                                    // if subprocess then execute
  {
    puts("\nOMG!!!! I forgot kid's id");
    write(pipedes[1], "69800876143568214356928753", 0x1Du);
    puts("Ready to exit     ");
    exit(0);
  }
  read(pipedes[0], buf, 0x1Du);                 // subprocess input 69800876143568214356928753
  __isoc99_scanf("%d", &v6);
  if ( v6 == v5 )
  {
    if ( (unsigned __int8)*(_DWORD *)((char *)lol + 3) == 204 )
    {
      puts(":D");
      exit(1);
    }
    printf("\nYou got the key\n ");
    lol(buf);
  }
  wait(0);
  return 0;
}

这是一个linux系统编程的逆向, 需要fork和进程间通信的知识, 系统编程和软件开发是做逆向的基本功, 所以需要补这方面的知识, 就不多说了 (面向搜索引擎做逆向也是基本功, 什么不懂现场学就完了

首先fork()是返回创建的子进程的进程id, 子进程fpid是0, 父进程则保存子进程的fpid, 所以下面的代码只有子进程会执行

  if ( !v5 )                                    // if subprocess then execute
  {
    puts("\nOMG!!!! I forgot kid's id");
    write(pipedes[1], "69800876143568214356928753", 0x1Du);
    puts("Ready to exit     ");
    exit(0);
  }

pipe(pipedes);是创建父子进程之间的通信管道, pipedes[0]是读, pipedes[1]是写
read(pipedes[0], buf, 0x1Du);即父进程从管道读取0x1D的数据到buf缓冲区
write(pipedes[1], "69800876143568214356928753", 0x1Du);是子进程将"69800876143568214356928753"写入管道, 所以父进程读出来的就是这一串

跟如lol()函数发现反编译和汇编代码不一致, 这里就是涉及IDA反汇编的优化操作, 如果一段汇编代码被强制跳转略过, 根本不会被执行, 那么IDA的F5就不会反编译这段汇编代码, 所以看到的伪代码就是一行printf
用IDApython nop掉0x080486B0地址的汇编指令, 这里如果是IDA7.5+版本, 因为API改了, 所以需要加一句from idc_bc695 import *
在这里插入图片描述
再F5即可反编译完整汇编

int __cdecl lol(_BYTE *buf)
{
  int result; // eax
  char flag[7]; // [esp+15h] [ebp-13h] BYREF
  int v3; // [esp+1Ch] [ebp-Ch]

  flag[0] = 2 * buf[1];
  flag[1] = buf[4] + buf[5];
  flag[2] = buf[8] + buf[9];
  flag[3] = 2 * buf[12];
  flag[4] = buf[18] + buf[17];
  flag[5] = buf[10] + buf[21];
  flag[6] = buf[9] + buf[25];
  if ( v3 == 1 )
    result = printf("%s", flag);
  else
    result = printf("flag_is_not_here");
  return result;
}

破解

阅读F5出来的伪代码, 即可知道flag就是69800876143568214356928753处理出来的7字节串, 直接用cpp写逆

#include <iostream>
#include <string>
using namespace std;

int main () {
    string flag(7, '0');
    string buf = "69800876143568214356928753";
    flag[0] = 2 * buf[1];
    flag[1] = buf[4] + buf[5];
    flag[2] = buf[8] + buf[9];
    flag[3] = 2 * buf[12];
    flag[4] = buf[18] + buf[17];
    flag[5] = buf[10] + buf[21];
    flag[6] = buf[9] + buf[25];

    cout << "RCTF{" << flag << '}' << endl;
}

搞定~

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

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

相关文章

SLAM从入门到精通(amcl定位使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习slam&#xff0c;一般就是所谓的边定位、边制图的知识。然而在实际生产过程中&#xff0c;比如扫地机器人、agv、巡检机器人、农业机器人&…

Sentinel学习——sentinel的使用,引入依赖和配置 对消费者进行流控 对生产者进行熔断降级

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍sentinel的使用&#x…

Bug:elementUI样式不起作用

前端问题合集&#xff1a;VueElementUI 1. Vue引用Element-UI时&#xff0c;组件无效果解决方案 前提&#xff1a; 已经安装好elementUI依赖 //安装依赖 npm install element-ui //main.js中导入依赖并在全局中使用 import ElementUI from element-ui Vue.use(ElementUI)如果此…

电压提前/滞后电路 —— 电赛综测备赛

电容可以让交流波形提前或滞后&#xff0c;不过很多人不知道用法 电压滞后电路 我们从中间输出给示波器 波形&#xff08;红色&#xff09; 电容越大电阻越大&#xff0c;波形越滞后 电压提前电路 波形&#xff08;红色&#xff09;提前 电容越小电阻越小&#xff0c;波形…

【python】numpy库

文章目录 简单介绍功能示例代码 简单介绍 NumPy&#xff08;Numerical Python的简称&#xff09;是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy是在一个连续的内存块中存储数据&#xff0c;独立于其他Python内置对象。NumPy…

uniapp iOS离线打包——如何创建App并提交版本审核?

uniapp 如何创建App&#xff0c;并提交版本审核&#xff1f; 文章目录 uniapp 如何创建App&#xff0c;并提交版本审核&#xff1f;登录 appstoreconnect创建AppiOS 预览和截屏应用功能描述技术支持App 审核信息 App 信息内容版权年龄分级 价格与销售范围App 隐私提交审核 登录…

VS Code使用clang-format自定义C++代码默认格式化样式

解决的问题 让 VS Code 在不使用.clang-format或_clang-format文件时&#xff0c;默认使用自定义的 C 代码格式化样式。以下假定规则文件为D:\ClangFormat\rules.txt。 格式规则 具体设置参照 Clang-Format官方文档&#xff0c;也可以使用 Clang-Format交互式构建器。 贴上…

Spring Boot 中使用 Micrometer 进行度量和监控

Spring Boot 中使用 Micrometer 进行度量和监控 Micrometer 是一个开源的度量库&#xff0c;用于在应用程序中收集、存储和展示度量数据。它提供了一种统一的方式来度量应用程序的各种指标&#xff0c;如响应时间、请求次数、内存使用等。在Spring Boot中&#xff0c;Micromet…

kuaishou sig、sig3参数记录分析

**免责任声明: 任何可操作性的内容与本文无关,文章内容仅供参考学习 如有侵权, 损害贵公司利益&#xff0c; 请联系作者&#xff0c;会立刻马上进行删除** 经常研究快手的小伙伴都知道&#xff0c;快手有几个比较重要的参数&#xff0c;像sig&#xff0c;token-sig和sig3字段…

linux-定时任务

目录 一、crond命令 1、什么是计划任务 2、crond服务的概念 3、crontab 二、at命令 1、at任务的概念 三、邮件服务 1、概念 2、启动postfix 四、mailx命令 1、三个概念&#xff1a; 2、交互式发邮件 3、非交互式发邮件 四、cron定时任务实践 1、系统定时任务配置…

What is a UDP Flood Attack?

用户数据报协议 &#xff08;UDP&#xff09; 是计算机网络中使用的无连接、不可靠的协议。它在互联网协议 &#xff08;IP&#xff09; 的传输层上运行&#xff0c;并提供跨网络的快速、高效的数据传输。与TCP&#xff08;其更可靠的对应物&#xff09;不同&#xff0c;UDP不提…

ChatGPT,AIGC 助力人力资源管理对身份证号处理

HR&#xff0c;行政&#xff0c;文员办公对于员工信息管理中有一项目非常重要的操作&#xff0c;便是从身份证号中提取相关信息如下&#xff1a; 可以用ChatGPT完成三个字段的提取与计算。 我们先让ChatGPT描述一下身份证号每一位都代表什么意思。 接下来从身份证号中提取出生…

leetCode 139.单词拆分 + 完全背包 + 排列数

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xff1a; 输入: s "leetcode", wordDict […

BUUCTF reverse wp 31 - 40

[HDCTF2019]Maze 脱壳, IDA打开, 发现无法F5, 而且反汇编失败 这种情况一般是花指令, 误导了IDA的递归反汇编, 这里E8是call指令, nop掉按p设置main函数入口再F5即可 int __cdecl main(int argc, const char **argv, const char **envp) {int v4; // [esp0h] [ebp-24h]int v5…

Python语言简介和版本选择

博主&#xff1a;命运之光 专栏&#xff1a;Python程序设计 目录 Python语言简介 Python发展历史 Python语言概述 Python版本选择 Python语言简介 解释型 解释执行可移植好 3种编程模式 函数式编程&#xff1b;对象编程&#xff1b;命令式编程 丰富的库 内置强大标准…

【软件评测】Apowersoft 傲软抠图AI智能换背景工具软件

现如今的数字图像处理已经成为人们生活中不可或缺的一部分&#xff0c;而图像抠图作为其中的重要环节&#xff0c;更是被广泛应用于设计、摄影、广告等领域。为了满足用户的需求&#xff0c;Apowersoft推出了一款傲软抠图AI智能换背景工具&#xff0c;宣称能够自动抠图并智能替…

提升 Windows 生产力的实用工具集:Microsoft PowerToys | 开源日报 No.42

microsoft/PowerToys Stars: 95.2k License: MIT Microsoft PowerToys 是一套用于调整和优化 Windows 体验以提高生产力的实用工具集。该项目包含多个功能模块&#xff0c;其中主要功能有&#xff1a;Always on Top、FancyZones、File Explorer Add-ons 等。其核心优势和关键特…

opencv实现目标跟踪及视频转存

创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧&#xff0c;选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…

AD20软件学习

一.建立文件夹以及汉化操作 1.创建工程 菜单栏- > File -> New -> Project 2.创建原理图 菜单栏- > File -> New -> Schematic 记得保存&#xff01;&#xff01;&#xff01; 3.创建PCB 菜单栏- > File -> New -> PCB 依次为综合库&#xff0c;原…

APP的收费模式及特点

移动应用&#xff08;APP&#xff09;的收费模式多种多样&#xff0c;可以根据开发者的需求、目标受众和应用的性质来选择。以下是一些常见的APP收费模式及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…