当前位置: 首页 > news >正文

【CTF Reverse】XCTF GFSJ1100 easyre-xctf Writeup(UPX壳+脱壳+反汇编+字符串搜索+小端存储)

easyre-xctf

龟缩起来,保护自己


解法

拖进 DIE 分析,发现加了 UPX 壳。

用 upx 脱壳。

upx -d easyre.exe

在这里插入图片描述

用 IDA 打开。

按 F5 反编译,没找到 flag。

int __fastcall main(int argc, const char **argv, const char **envp)
{_main();puts("Very easy upx!");puts("Then flag?");system("pause");return 0;
}

按 Shift + F12 打开字符串页,找到疑似半截 flag。

d_0n3_4nd_tw0}

有 part2 就有 part1。搜索一下 f_part1,没有找到,再搜 part1。

__int64 part1(void)
{return 0x5850557B67616C66i64;
}

将返回值显示为 char 类型,取得前半截 flag。

__int64 part1(void)
{return 'XPU{galf';
}

提交 flag,不对。

XPU{galfd_0n3_4nd_tw0}

查看汇编代码,发现返回前拼接了 ‘n4_’,反编译的时候可能被 IDA 漏掉了。

再次提交 flag,还是不对。

XPU{galfn4_d_0n3_4nd_tw0}

观察 flag 格式,发现 flag 拼成了 galf,UPX 拼成了 XPU。将拼接前的每段字符串分别翻转再拼接即可。

Flag

flag{UPX_4nd_0n3_4nd_tw0}

原理

下面是计算机组成原理复习时间。

x86 架构采用小端方式存储,最低有效字节(LSB)放在低地址。

前半截 flag 作为64位的整数常量(__int64)存储,而不是以常规的字符串方式存储,所以倒过来了。

__int64 part1(void)
{return 0x5850557B67616C66i64;
}

声明

本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规

博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任


http://www.mrgr.cn/news/30829.html

相关文章:

  • vue2使用 <component> 标签动态渲染不同的表单组件
  • 数据库SQLite的使用
  • 图像处理实验三(Morphological Image Processing)
  • SharePoint Online共享链接的参数是做什么的?
  • 平安人寿山西分公司:践行绿色金融,开启绿色新篇章
  • ts 中 ReturnType 作用
  • 渗透测试常用工具(非常详细)从零基础入门到精通,看完这一篇就够了。
  • CST软件超表面---电容或变容二极管调焦反射镜
  • 什么是HTTP DDOS,如何防护
  • BERT推理显存爆满?7个实用技巧教你快速优化!显存优化的最佳实践指南
  • VSCode配置、创建ROS项目简单记录
  • PyTorch的特点
  • MySQL:事务的ACID特性隔离级别脏读、不可重复读、幻读、Next-Key锁——场景复现
  • 金属材质检测系统源码分享
  • 基于单片机的车载传感器数据处理系统
  • Python安装不再难!全平台保姆级教程带你轻松搞定!
  • 稀土抗菌剂的应用场景有哪些?
  • Spring Cloud全解析:服务调用之Feign的执行流程
  • springboot 集成IP白名单配置
  • MATLAB画图,曲线图如何绘制美观,曲线图10种美化方法
  • 工厂工作服穿戴监测识别摄像头
  • 【笔记】2.1 半导体三极管(BJT,Bipolar Junction Transistor)
  • 线程池的状态
  • 分享一次应用LLM解决并发现问题的经历
  • Nginx 在处理大规模分布式系统时有哪些性能优化技巧?
  • 【数据结构】排序算法---基数排序