title: WP:红帽杯2019 easyRe
date: 2021-05-6 1:24:00
tags:
- writeup
- binary security
- reverse analysis
comments: true
categories: - ctf
- reverse
pwn
题做完re
题当然也不能少,buu
上除了那些水题,开始做一些带点技术含量的题目了。红帽杯2019的easyRE
上来就是800KB
的elf
文件,看起来就很有技术含量的样子。其实看到大文件不用怕,函数多也不用怕,因为需要分析的函数一定只有几个,如果你点进去调用了大部分你没见过的函数,还有十分复杂的goto
关系,那么这个函数你可以直接当他不存在,这是我自己得到的一个结论,不一定对,但是可以应付大部分的题目。废话不多说进入正题:buuctf 2019红帽杯easyRE
所有二进制安全相关的题目字符串一定是切入点,因为它可读。做pwn
题你就找flag
,bin/sh
,当然这是签到-难度的题目才会有的字符串。做逆向题的话,看到很长的64位或者65位大小写字母和数字和一些其它字符组成的表,那么直接考虑base64
,然后就是一些带flag
的字符串或者是什么right
,correct
,congratulate
之类判断正误的话,那么多半也是以调用这个字符串的函数为中心去分析。好的,打开先看一下,看到有很多很多的函数,先不慌(实则慌的一批),冷静地先摁一个shift+F12
查看字符串。
一眼就可以看道有一个经典的base64
表,还有一句话you found me
(你找到我了),像极了flag
跟我们的对话,那么话不多说,点进去找到这个函数看看到底在哪里发出了这样的感叹。
__int64 sub_4009C6()
{
__int64 result; // rax
int i; // [rsp+Ch] [rbp-114h]
__int64 v2; // [rsp+10h] [rbp-110h]
__int64 v3; // [rsp+18h] [rbp-108h]
__int64 v4; // [rsp+20h] [rbp-100h]
__int64 v5; // [rsp+28h] [rbp-F8h]
__int64 v6; // [rsp+30h] [rbp-F0h]
__int64 v7; // [rsp+38h] [rbp-E8h]
__int64 v8; // [rsp+40h] [rbp-E0h]
__int64 v9; // [rsp+48h] [rbp-D8h]
__int64 v10; // [rsp+50h] [rbp-D0h]
__int64 v11; // [rsp+58h] [rbp-C8h]
char v12[13]; // [rsp+60h] [rbp-C0h] BYREF
char v13[4]; // [rsp+6Dh] [rbp-B3h] BYREF
char v14[19]; // [rsp+71h] [rbp-AFh] BYREF
char v15[32]; // [rsp+90h] [rbp-90h] BYREF
int v16; // [rsp+B0h] [rbp-70h]
char v17; // [rsp+B4h] [rbp-6Ch]
char v18[72]; // [rsp+C0h] [rbp-60h] BYREF
unsigned __int64 v19; // [rsp+108h] [rbp-18h]
v19 = __readfsqword(0x28u);
qmemcpy(v12, "Iodl>Qnb(ocy", 12);
v12[12] = 127;
qmemcpy(v13, "y.i", 3);
v13[3] = 127;
qmemcpy(v14, "d`3w}wek9{iy=~yL@EC", sizeof(v14));
memset(v15, 0, sizeof(v15));
v16 = 0;
v17 =