re:从零开始的re世界生活

r1ck9

re:从零开始的re世界生活

bugku

1.入门逆向

先来品鉴一个签到题,其实我ida之前都是乱用,慢慢上手吧

将baby.exe用ida打开,然后去_main函数那里,选中ASCII码,按 r 转为字符1

flag{Re_1s_S0_C0OL}

2.Easy_vb

直接点击后打开,发现按确认也没有反应

2

用Exeinfo PE看一下有没有加壳

3
  • 32位-》只能用 x86 调试器:OllyDbg、32 位 IDA,不能用 64 位 IDA/x64dbg

  • Not packed = 没有加壳!,不需要脱壳,直接调试即可。try debug ollydbg提示直接丢 OD 调试。

IDA32 VS OllyDbg

IDA32 = 静态分析为主(不运行)

OllyDbg = 动态调试器(看运行时真实状态)

OllyDbg:

  • F2:下断点
  • F7:单步步入(进入 call 函数)
  • F8:单步步过(跳过 call)
  • F9:继续运行程序

a.

这里先尝试用ida32做:

可以直接search到flag

4

b.尝试使用ollydbg

但其实这里最快还是直接搜索,,断点那些后面再学吧

MCTF{N3t_Rev_1s_E4ay} 改成 flag{N3t_Rev_1s_E4ay}就可以提交了

Easy_Re

又是一个exe

首先双击运行一下

5

输入失败之后会自动退出

放到exeinfo中,无壳32bit,先放到ida32看看,这次直接搜字符串失灵了

a.ida32

搜索“欢迎来到”,发现附近有一长串数字,按a

  • R:只作用单个立即数,把一个数字转成单引号字符 66h → 'f',只能处理 1 字节。
  • A:作用一片内存数据,把连续的 db 字节序列,解析成完整 C 风格字符串,以\0结尾。

6

DUTCTF{We1c0met0DUTCTF}

b.尝试一下ollydbg

搜索可以直接出

另一种办法是正常去调试,双击下方的 flag_get√\n

7

选中jnz那条,F2下断点,然后F9继续执行,弹窗后要求输入flag,随便输入123,然后F8单步继续运行,跳到错误分支,但是右侧寄存器出了flag

8

DUTCTF{We1c0met0DUTCTF}

mobile2(gctf)

一开始以为mobile题 第一次上手做会很难,毕竟这么多文件,

不过好像只是单纯的一个记事本查看就直接得到flag了,,,

游戏过关

额其实我没看懂题目啥意思,不过随便按了几下居然出来了

9

zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

然后我们尝试正常做法去做

exeinfo一下,32bits 无壳

接下来用ida32,直接搜字符串不行,试试用ollydbg动态的方式获得

10

网上看到这个函数的push处,可以知道是从00E27AB4跳过来的,然后再跳到00E2F66C,,这里看到有八个jnz,应该就是对应游戏的8个判断

又因为

1
If m of the Nth lamp is 1,it's on ,if not it's off……When all lamps are on,flag will appear

要让判断都为1

这里选择修改源码,让无论哪个分支到最后都跳转到出flag处

11

保存后,随便输入然后运行,出了

12

signin

解压后是一个apk文件,同样尝试丢到exeinfo里面,可惜解不了

将apk放到jadx中,反编译成为java源码

关注到里面还有一个apk1,打开后是有几个比较有意思的函数getFlag()和checkPassword()

13

1
2
3
4
5
6
7
8
9
public class MainActivity extends AppCompatActivity {
public void checkPassword(String str) {
if (str.equals(new String(Base64.decode(new StringBuffer(getFlag()).reverse().toString(), 0)))) {
showMsgToast("Congratulations !");
} else {
showMsgToast("Try again.");
}
}

14

0x7f0b0020,而且是个string,去string里面看一下

发现有一串像是base64的东西

15

然后根据checkPassword()提示,取反然后base64解码

16

reverse后的字符串为“ZmxhZ3tIZXIzX2k1X3kwdXJfZjFhZ18zOWZiY199”

base64解密后为flag{Her3_i5_y0ur_f1ag_39fbc_}

love

一个exe程序,先双击,但是我这类找不到dll,没办法打开

放到exeinfo看看,32bits 无壳

先用ida32看看,看到main_0

17
1
.data:0041A034 Str2       db 'e3nifIH9b_C@n@dH',0 ; DATA XREF: _main_0+142↑o

然后奇怪的函数sub_4110BE,其实就是base64的编码,不过这里是点到这个aAbcdefghijklmn发现的

18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  for ( i = 0; i < 3 && v11 >= 1; ++i )
{
byte_41A144[i] = *v13;
--v11;
++v13;
}
if ( !i )
break;
switch ( i )
{
case 1:
*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];
v5 = v4 + 1;
*((_BYTE *)v12 + v5) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];
*((_BYTE *)v12 + ++v5) = aAbcdefghijklmn[64];
*((_BYTE *)v12 + ++v5) = aAbcdefghijklmn[64];
v4 = v5 + 1;
break;
case 2:
*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];
v6 = v4 + 1;
*((_BYTE *)v12 + v6) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];
*((_BYTE *)v12 + ++v6) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | (4 * (byte_41A144[1] & 0xF))];
*((_BYTE *)v12 + ++v6) = aAbcdefghijklmn[64];
v4 = v6 + 1;
break;
case 3:
*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];
v7 = v4 + 1;
*((_BYTE *)v12 + v7) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];
*((_BYTE *)v12 + ++v7) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | (4 * (byte_41A144[1] & 0xF))];
*((_BYTE *)v12 + ++v7) = aAbcdefghijklmn[byte_41A144[2] & 0x3F];
v4 = v7 + 1;
break;
}
}

所以来理清一下思路

1
2
3
4
输入flag,一个str
然后对他进行base64编码
然后每一位加上自己的下标
与str2比对,如果一模一样,则print "right flag"
1
2
3
4
5
6
7
str2="e3nifIH9b_C@n@dH"
s=""
i=0
for c in str2:
s=s+ chr(ord(c)-i)
i+=1
print(s)

解得:e2lfbDB2ZV95b3V9,base64解码,得到 {i_l0ve_you}

树林的小秘密

exe 双击,让我input flag,随便输入报错后就会退回

尝试exeinfo,64bits而且,是pyinstall弄出来的exe

1
Big sec. 01 [ .text ] , try internal ( .Zlib Ripper and unpacker - many file possible )

pyinstxtractor‑ng 是拆包工具(把 exe → 提取 pyc)

pycdc 是反编译工具(pyc → py 源码)

  • 先进行pyinstxtractor‑ng 解包

19

然后用pycdc 把pyc变成py

20

这里看到是base64,拿工具进行解码flag{my_name_is_shumu}

马老师杀毒卫士

打开是一个exe和一个mp3,exe打开是一个自制的杀毒软件,并没有看到什么信息

放到exeinfo试一试 -》 无壳32bits

然后没找到main,从string那里直接搜一下 在搜索}的时候看到了一个疑似栅栏密码的:

1
.rdata:004D300C	00000015	C	fgaag_!l{_oun}amb_ob

21

出了

特殊的Base64

运行exe,输入错误的flag后自动退出

exeinfo一下查壳,64bits无壳

放到ida64中试试

“rightflag”文字附近出现一串像是base64的字符串,但是解码后又是乱码,感觉题目所说的base64就是指这个

22

然后看到下面还有一串,难道是特殊的映射吗

23

果然 这就出来了flag{Special_Base64_By_Lich}

NoString

双击exe 又是要求input,随便输入后会报error

exeinfo看看,32bits无壳,用ida32打开看看

1
2
3
4
5
6
7
8
9
10
11
12
v11 = 0;
v13 = 0;
v12 = 0i64;
v2 = strlen(a80z);
for ( j = 0; j < v2; ++j )
a80z[j] ^= 9u;
scanf(a80z, &v11);
for ( k = 0; k < 19; ++k )
*(&v11 + k) ^= 9u;
v5 = strcmp(&v11, aOehnl3rHfCcgpt);
if ( v5 )
v5 = v5 < 0 ? -1 : 1;
1
.data:00416210 aOehnl3rHfCcgpt db 'oehnl3r=<?=hF@CCGPt',0

大概的逻辑是先每一位和9异或,然后再和9异或,然后和aOehnl3rHfCcgpt所指向的字符串oehnl3r=<?=hF@CCGPt比较

异或两次,那其实就是直接和oehnl3r=<?=hF@CCGPt比较

1
2
3
4
5
str="oehnl3r=<?=hF@CCGPt"
s=""
for c in str:
s = s + chr(ord(c)^9)
print(s)

出了 flage:{4564aOIJJNY}

不好用的ce

双击,显示点击一万次就有flag,感觉可以改一下点击次数这样

无壳32,用OD动态分析,直接看字符串其实可以看到一个base64了,不过我们这次尝试一下用动态跑

下断点找到数据会改变那一条跳转

这里会看到一个与10000的比较

用二进制把00401E24用NOP填充了,然后执行

24

然后出了

25

然后发现不是base64,是base58

出了flag flag{c1icktimes}

待续……

  • 标题: re:从零开始的re世界生活
  • 作者: r1ck9
  • 创建于 : 2026-09-07 10:35:14
  • 更新于 : 2026-09-07 10:36:08
  • 链接: https://www.r1ck9.top/2026/09/07/re:从零开始的re世界生活/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论