CTF-Reverse暑期刷题记录
以下题目来源:ctfshow reverse + nssctf reverse
(ctfshow里面这个板块的题目有点少,不成体系)
(´・_・`)✍️📄
01 逆向签到题
🚩flag:flag{7ujm8ikhy6}
💡hint:基础分析
使用ida pro打开可以直接看到。

02 re2
🚩flag:flag{RC4&->ENc0d3F1le}
💡hint:基础分析 rc4解密
ida分析主函数,将flag.txt内容加密写入enflag.txt。

分析到标准rc4加密。
enflag.txt是flag.txt进行rc4加密后的结果。在这里进行解密。
这是密钥加密过程:

解密密钥:[Warnning]Access_Unauthoriz~d

对enflag.txt进行rc4解密。

03~05为萌新赛
03 flag白给
🚩flag:flag{HackAv}
💡hint:加壳
检查是否加壳,经过检查有壳。

使用upx脱壳。
upx -d flag.exe |

然后使用ida找到flag。
04 签退
🚩flag:flag{c_t_f_s_h_0_w_!}
💡hint:python逆向
用pycdc反编译或python反编译 - 在线工具

得到python源代码:
#!/usr/bin/env python |
解密脚本:
#!/usr/bin/env python |
运行结果:

05 数学不及格
🚩flag:flag{newbee_here}
💡hint:反编译
ida pro反编译:
int __fastcall main(int argc, const char **argv, const char **envp) |
判断了四个方程,并且v9=f(v4)
双击跟进f()函数,返回斐波那契数列第n项
于是(v9-v10)+(v9-v11)+(v9-v12)+(v4+v12+v11+v10)=3*v9+v4=0x19d024e75ff,十进制为1773860189695,又v9=f(v4)
__int64 __fastcall f(int a1) |
写脚本爆破:
for v4 in range(3,100): |
得到:
58
591286729879
得到v4,v9后解出argv数组
v9=591286729879 |
得到:
0x666c61677b
0x6e65776265
0x655f686572
0x657d
解密:

06~09为内部赛
06 批量生产的伪劣商品
🚩flag:ctfshow{群主最爱36D}
💡hint:安卓逆向 静态分析 反编译
apk文件,jadx打开,查看AndroidManifest.xml

找到app入口appinventor.ai_QA629A242D5E83EFA948B9020CD35CB60.checkme.a

即可看到flag。
07 来一个派森
🚩flag:ctfshow{zhe_bu_shi_flag}
💡hint:python逆向 静态分析 反编译
使用python反编译工具pyinstxtractor.py,将.exe文件转换成.pyc文件
python pyinstxtractor.py checkme.exe |

python反编译 - 在线工具得到python源码
def b58encode(tmp = None): |
解密脚本:
def b58decode(): |
结果:

08 好好学习 天天向上
🚩flag:flag{good_good_study_day_day_up}
💡hint:静态分析 反编译 爆破
爆破脚本
from pwn import * |
09 屏幕裂开了
🚩flag:flag{i_hope_you_didnt_click_the_button_99999__justRE_in_Static}
💡hint:静态分析 反编译 安卓逆向
jadx打开。

定位关键函数checkflag

rc4加密但是不好解密。S盒打乱那部分要重复 99999 次。
s = [i for i in range(256)] |
运行结果:
flag{i_hope_you_didnt_click_the_button_99999__justRE_in_Static}
10~11为七夕杯
10 逆向签到
🚩flag:ctfshow{re_sign_is_easy_}
💡hint:静态分析 反编译
分析这个:

用cyberchef分析:
7B776F6873667463h
5F6E6769735F6572h
5F797361655F7369h
7Dh
得到:
ctfshow{re_sign_is_easy_}
11 easy_magic
🚩flag:ctfshow{7x_flag_is_here}
💡hint:静态分析 反编译 md5
16进制字符串,md5解密。
cb4bc1bdc7a7a220b6df7fc49611ab8a

以下题目来源nssctf
12 [SWPUCTF 2021 新生赛]re1
🚩flag:NSSCTF{easy_reverse}
💡hint:c 语言逆向 逆向技术
反编译
int __fastcall main(int argc, const char **argv, const char **envp) |
解题脚本:
def decrypt_flag(): |
13 [SWPUCTF 2021 新生赛]简简单单的逻辑
🚩flag:NSSCTF{EZEZ_RERE}
💡hint:Python XOR 算法分析
flag = 'xxxxxxxxxxxxxxxxxx' |
解题脚本:
def decrypt_flag(): |
14 [SWPUCTF 2021 新生赛]简简单单的解
🚩flag:NSSCTF{REAL_EZ_RC4}
💡hint:Python RC4 语言逆向
import base64,urllib.parse |
解题脚本:
import base64, urllib.parse |
15 [SWPUCTF 2021 新生赛]非常简单的逻辑题
🚩flag:NSSCTF{Fake_RERE_QAQ}
💡hint:Python 逆向技术 语言逆向
flag = 'xxxxxxxxxxxxxxxxxxxxx' |
解题脚本:
def decrypt_flag(encrypted_result): |
16 [SWPUCTF 2021 新生赛]老鼠走迷宫
🚩flag:NSSCTF{69193150b15c87d39252d974bc323217}
💡hint:Python 逆向 DFS
下载是一个没有后缀的附件,通过010打开,看到4d 5a判断是.exe文件。
使用ida pro打开,看到字符串很多py前缀推测是.pyc文件。
使用pyinstxtractor解析
然后反编译获得源码:
# uncompyle6 version 3.8.0 |
解题脚本:
import hashlib |
17 [SWPUCTF 2021 新生赛]fakerandom
🚩flag:NSSCTF{FakeE_random}
💡hint:Python XOR 语言逆向
import random |
这是一个基于伪随机数生成器的异或加密算法。
解题脚本:
import random |
18 [SWPUCTF 2021 新生赛]fakebase
🚩flag:NSSCTF{WHAt_BASe31}
💡hint:Python 算法分析 语言逆向
flag = 'xxxxxxxxxxxxxxxxxxx' |
解题脚本:
import libnum |
19 [SWPUCTF 2021 新生赛]astJS
🚩flag:NSSCTF{astIsReallyFunny}
💡hint:逆向技术 XOR 逆向
题目描述:这也是程序?得到的flag请使用NSSCTF{}格式提交。
得到的是一个.json文件。
上网查了一下,考点是AST抽象语法树还原为js代码。
{ |
转换好 的js代码
(function () { |
进行运行
NSSCTF{astIsReallyFunny}
20 [SWPUCTF 2021 新生赛]easyapp
🚩flag:NSSCTF{apkYYDS}
💡hint:安卓逆向 JAVA XOR
先010查看开头为50 4B 03 04 ,判断为.zip文件,修改后缀。得到.apk文件,使用jadx打开。
jadx-gui |
找到三个关键函数:



从第一个关键函数中得到类似于乱码的字符串
第三个关键函数中我们知道是异或运算,并且key是123456789
第二个关键函数把key改成了987654321
得到解题脚本:
text ='棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌' |
运行得到:
NSSCTF{apkYYDS}
21 [SWPUCTF 2021 新生赛]PYRE
🚩flag:NSSCTF{more_qwq_lol}
💡hint:RC4 Base64 Python
下载的附件没有后缀,在010中看到文件头是4D 5A 90 00,推测是.exe文件。
exe转python。
# 题目 |
# 解密 |
运行得到:
NSSCTF{more_qwq_lol}
22 [LitCTF 2023]世界上最棒的程序员
🚩flag:NSSCTF{I_am_the_best_programmer_ever}
💡hint:逆向技术 语言逆向
使用ida pro打开,搜索flag。

23 [NSSCTF 2022 Spring Recruit]easy C
🚩flag:NSSCTF{easy_Re}
💡hint:逆向技术 语言逆向
|
解题思路分析
这段C代码的逻辑是:
- 用户输入一个7字符的flag
- 对每个字符进行两个操作:
- 先执行
a[i]++(ASCII值加1) - 然后执行
a[i] = a[i]^2(ASCII值与2异或)
- 先执行
- 将处理后的字符串与
"dvxbQd”` 比较
逆向解密步骤
要还原原始flag,我们需要逆向这两个操作:
- 先逆向异或操作:
original ^ 2 = encrypted⇒original = encrypted ^ 2 - 再逆向自增操作:
original = encrypted - 1
# 给定的加密字符串 |
24 [SWPUCTF 2021 新生赛]re2
🚩flag:NSSCTF{nss_caesar}
💡hint:C 语言逆向 算法分析
ida pro反编译:
int __fastcall main(int argc, const char **argv, const char **envp) |
解题脚本:
def decrypt_flag(): |
anss_caesar}
最终flag为:NSSCTF{nss_caesar}
25 [SWPUCTF 2022 新生赛]base64
🚩flag:NSSCTF{base_64_NTWQ4ZGDNC7N}
💡hint:Base64 C 逆向技术
ida pro分析。
使用shift+f12.

得到base64字符串:TlNTQ1RGe2Jhc2VfNjRfTlRXUTRaR0ROQzdOfQ==
进行解码,得到flag。
26 [WUSTCTF 2020]level2
🚩flag:NSSCTF{Just_upx_-d}
💡hint:脱壳 UPX壳 逆向技术
分析头部,是elf文件。
使用upx进行脱壳。
upx -d attachment-15.elf |
然后使用ida pro打开。
看到flag。

27 [HUBUCTF 2022 新生赛]simple_RE
🚩flag:NSSCTF{a8d4347722800e72e34e1aba3fe914ae}
💡hint:Base64 C 逆向技术
使用ida pro打开,得到一串字符串。
5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOf
看着像BASE64,解码一下,没解出来,应该是自定义编码。

看加密函数
__int64 sub_401770() |
还有:
.rdata:0000000000404000 00000041 C qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD
.data:0000000000403020 00000039 C 5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==
解题脚本:
import base64 |
28 [HDCTF 2023]easy_re
🚩flag:NSSCTF{a8d4347722800e72e34e1aba3fe914ae}
💡hint:Base64 UPX 脱壳
upx脱壳之后,使用ida pro打开。
int __fastcall main(int argc, const char **argv, const char **envp) |
void __cdecl func(char *x, char *y) |
其他信息:
加密字符串:SERDVEZ7WTB1X2hAdjJfL1wvXEA1N2VyM2RfN2hlX3IzdjNyczN9
#!/usr/bin/env python3 |
其实直接base64解了就好,这里想多了还去写脚本。
HDCTF{Y0u_h@v2_//@57er3d_7he_r3v3rs3}
改成
NSSCTF{Y0u_h@v2_//@57er3d_7he_r3v3rs3}
29 [HNCTF 2022 Week1]超级签到
🚩flag:NSSCTF{hell0_w0rld}
💡hint:C 逆向技术 语言逆向
直接打开IDA的strings表,查看其中的字符串"wrong flag",然后右键List cross reference to 找到引用该字符串的地方,肯定就是判断Flag的地方了. 后面就按照正常流程分析就可以了

hello_world不对,看到admin的帖子说,把o都换成0,就能过了。
30 [SWPUCTF 2022 新生赛]easyre
🚩flag:NSSCTF{oh_you_find_it}
💡hint:C 逆向技术 语言逆向
一图到底。

31 [GFCTF 2021]wordy
🚩flag:NSSCTF{u_are2wordy}
💡hint:花指令 C 逆向技术
- 定位main函数
- 方法1:通过
_libc_start_main函数调用链定位 - 方法2:IDA文本搜索”main”(Ctrl+T跳转下一个匹配项)
- 方法3:观察IDA导航栏棕红色异常代码段
- 识别花指令特征
- 异常跳转指令(红色标记的jmp)
- 跳转目标地址为
loc_xxxx+1形式 - 后续字节码无法正常反汇编
- 典型模式:
0xEB 0xFF 0xC0(jmp short 0xFFC0)
- 手动修复方法
# 单字节修补示例 |
- IDAPython批量修复脚本
start = 0x1144 |
- 两种解题路径
方法A:完整反编译
- 修复后按
P创建函数 F5生成伪代码- 提取所有
putchar()参数拼接flag
方法B:非预期解
# 修改初始判断条件 |
- 注意事项
- 显示操作码字节(Options -> General -> Disassembly)
- 花指令可能多层嵌套,需反复验证
原始输出:GF�CTF{u_are2wordy}
修正格式:NSSCTF{u_are2wordy}
核心是通过特征码识别+批量修补恢复原始逻辑。
32 [NISACTF 2022]string
🚩flag:NSSCTF{5353316611126}
💡hint:C 逆向技术 动态调试
反编译找到核心代码。
puts(“The length of flag is 13”); |
双击seed:
seed dd 2766h ; DATA XREF: flag+133↑r
|
gcc exp.c |
33 [HNCTF 2022 Week1]贝斯是什么乐器啊?
🚩flag:NSSCTF{B@se64_HAHAHA}
💡hint:C 逆向技术 动态调试
解题脚本
key = “NRQ@PAu;8j[+(R:2806.i” |
b‘NRQ@PAu;8j[+(R:2806.i’
[78, 82, 81, 64, 80, 65, 117, 59, 56, 106, 91, 43, 40, 82, 58, 50, 56, 48, 54, 46, 105]
NSSCTF{B@se64_HAHAHA}
34 [UTCTF 2020]Basics(RE)
🚩flag:NSSCTF{str1ngs_1s_y0ur_fr13nd}
💡hint:C 逆向技术
看文件头,改后缀.elf
使用die确定没有加壳。
使用ida pro打开,strings到flag。
.rodata:00000000000020C0 0000001F C utflag{str1ngs_1s_y0ur_fr13nd}
35 [NISACTF 2022]sign-ezc++
🚩flag:NSSCTF{this_is_NISA_re_sign}
💡hint:C 逆向技术
int __fastcall main(int argc, const char **argv, const char **envp) |
human可疑。
void __cdecl Human::give_flag(Human *const this) |
并在内存中发现:
.data:000000000046A020 flag db 44h, 2 dup(59h), 49h, 5Eh, 4Ch, 71h, 7Eh, 62h, 63h |
写脚本解密:
s=[0x44,0x59,0x59,0x49,0x5E,0x4C,0x71,0x7E,0x62,0x63,0x79,0x55,0x63,0x79,0x55,0x44,0x43,0x59,0x4B,0x55,0x78,0x6F,0x55,0x79,0x63,0x6D,0x64,0x77,0x14] |
NSSCTF{this_is_NISA_re_sign}
36 [NSSCTF 2022 Spring Recruit]easy Python
🚩flag:NSSCTF{this_is_NISA_re_sign}
💡hint:Base64 Python 算法分析
import string |
解题脚本:
import string |
37 [HNCTF 2022 Week1]你知道什么是Py嘛?
🚩flag:NSSCTF{Pyth0n_1s_th3_best_l@nguage}
💡hint:Python XOR 逆向技术
s = str(input("please input your flag:")) |
解题脚本:
arr = [29, 0, 16, 23, 18, 61, 43, 41, 13, 28, 88, 94, 49, 110, 66, 44, 43, 28, 91, 108, 61, 7, 22, 7, 43, 51, 44, 46, 9, 18, 20, 6, 2, 24] |
38 [广东省大学生攻防大赛 2022]pyre
🚩flag:NSSCTF{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}
💡hint:Python PYC 逆向技术
反编译,爆破b。
c = [ |
flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca}
39 [GDOUCTF 2023]Tea
🚩flag:NSSCTF{hzCtf_94_re666fingcry5641qq}
💡hint:TEA XTEA 动态调试
解压是个exe文件,没有加壳。
在 ida 使用快捷键 shift+f12打开字符串窗口搜索关键字 flag
双击进入,然后一直点击快捷键 x 找到调用处,分析关键代码
for ( j = 0; j < 10; ++j ) |
进入 sub_1400117D0函数,可以看到, key的值修改为 [2233, 4455, 6677, 8899]
进入 sub_140011900 函数,可以看到是Tea加密
TEA(Tiny Encryption Algorithm)是一种轻量级的对称加密算法,由David Wheeler和Roger Needham于1994年提出,其核心特点是结构简单(仅需20行代码)、效率高(基于Feistel网络结构),适用于资源受限的环境。它通过多轮(通常32轮)的位运算(加法、异或、移位)和密钥混合(128位密钥分为4个32位子密钥)对64位数据块进行加密,每轮操作包含对明文的非线性变换和密钥的轮换使用,虽然安全性曾受限于密钥相关攻击,但改进版XTEA和XXTEA修复了这些弱点,至今仍广泛应用于嵌入式系统和网络协议中。
进入 sub_140011B60 函数,得到加密后的数据,写解题脚本
def main(): |
485a4354467b687a4374665f39345f726536363666696e6763727935363431710000717d00000000

40 [GXYCTF 2019]luck_guy
🚩flag:NSSCTF{do_not_hate_me}
💡hint:
elf文件,ida pro 反编译。
核心代码为

解题脚本:
flag = '' |
hate_me}
加上前缀信息:GXY{do_not_hate_me}