【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;
}

声明

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值