ISCTF2025_wp
ISCTF 2025
本次比赛和Rycbartbad师傅一起打了第47名,感觉还是很不错的
加个pwn佬、web佬能起飞


[TOC]
说明 由于本人web和病毒分析纯ai做法,没有实际价值,不在wp中赘述
Reverse
比赛体量太大,重心没放在reverse上,个人仅做了两个题。
ELF
这个elf有点奇怪呢
1 | └─# file main |
file一下,stripped被剥离了符号表,果然打开ida啥也不是
strings检查发现爆出很多”python”字符串,是PyInstaller打包的Python程序
用特定脚本解包
1 | wget https://raw.githubusercontent.com/extremecoders-re/pyinstxtractor/master/pyinstxtractor.py |
反编译,注意不同python版本需要选择不同的工具。
3.1-3.9 uncompyle6
1 | uncompyle6 -o main.pyc main.py |
3.7-3.9 decompyle3
1 | decompyle3 main.pyc > main.py |
3.1+ or 3.10+
1 | cd pycdc |
本题用pycdc得到main.py
1 | # Source Generated with Decompyle++ |
加密流程:
1.24字节的flag分成8组,每组base64加密变为4字节
2.计算hex的md5
3.每组调用rep函数加密
rep函数是Fisher-Yates 洗牌算法的逆序版本洗牌算法(Shuffle Algorithm)Fisher-Yates 洗牌算法详细解读-CSDN博客
由于seed=161已知,洗牌的过程可以复现出来。每组三字节,爆破即可
1 | import base64 |
ISCTF{NO7_3x3_i5_3Lf!!!}
ezpy
这是什么库?没见过呢
strings检查发现了python痕迹,pyinstaller打包
同样,用脚本解包,pycdc反编译失败了
1 | └─# decompyle3 ezpy.pyc > ezpy_decompiled.py |
3.13太新了,pycdc失败
Rycbartbad师傅先做了此题,说有花指令,看看花指令什么情况。
1 | #!/usr/bin/env python3 |
发现在开头有一个nop。可以去,也可以不管直接看字节码:
1 | #!/usr/bin/env python3 |
1 | └─# python3 1.py |
逻辑基本清楚。
接下来可以用strings搜索
1 | # strings mypy.cp313-win_amd64.pyd |
可以找到以下字符串
ISCTF202H RC4 flag checker module check Check if the flag is correct
可以看到可能只进行了RC4加密,密钥是ISCTF202H。但是密钥明显不正常,可以猜到应该是ISCTF2025,接下来找密文
ida打开mypy.cp313-win_amd64.pyd
懒得看函数了,直接手动找data段
1 | .rdata:000000036F4D4007 aRc4FlagChecker db 'RC4 flag checker module',0 |
可以看到大概率从4D4050开始的都是密文
1 | #!/usr/bin/env python3 |
得到ISCTF{Y0U_GE7_7HE_PYD!!!}
那ISCTF202H是怎么回事呢?
IDA手动找数字5,找到的结果如下:
1 | .text:000000036F4D1535 mov word ptr [rsp+158h+var_132+8], 35h ; '5' |
所在函数反编译的结果:
1 | __m128i *__fastcall sub_36F4D1519(__int64 a1, __int64 a2) |
在Hex试图可见
1 | 000000036F4D1520 01 00 00 48 89 D1 48 B8 49 53 43 54 46 32 30 32 ...H....ISCTF202 |

Crypto
沉迷数学的小蓝鲨
小蓝鲨最近沉迷于椭圆曲线,但是有一个椭圆曲线问题它始终做不出来,据说它广泛应用于区块链技术。如果你可以帮助小蓝鲨解决这个问题,它将会给予你丰厚的报酬。
Hint1:你验证过基点 G 真的在曲线上吗?(这只是个ez题,别想太复杂)
Hint2:G是这条曲线上的冒牌货,但代数运算不在乎,因为计算机可不是数学家
1 | y² = x³ + 3x + 27 (mod p) |
信息过少,p,G都不知道,于是猜想是secp256k1固定参数
根据Hint1,b=27是假的,需要重新找到一个b’
k不大,在小范围内搜索才能跑的出来是关键
1 | import hashlib |
1 | (sagemath) ┌──(root㉿LAPTOP-BMERJF8L)-[/mnt/c/users/rekjo/desktop] |
ISCTF{43896099feea21a3d5804863075e1aaa}
小蓝鲨的费马谜题
小蓝鲨在一次网络探险中发现了一个神秘的加密系统。他发现这个系统好像使用了费马小定理来保护重要信息,但是又好像不太一样。小蓝鲨设法截获了系统的加密输出,但不知道如何解密,你可以帮帮它吗?
1 | import random |

1 | import math |
得到ISCTF{M0dIFi3D_f3RM47_7H30r3m_I5_fUn_8U7_h4rD3r!}
实际上这题只需要一个hint即可恢复出素数p?
小蓝鲨的密码箱
小蓝鲨有一个神秘的black-box,里面藏着它最珍贵的秘密。小蓝鲨告诉我们,只有知道密码箱的运算逻辑,你才能知道它的秘密。
这题比较传奇,误打误撞做对了
密码黑盒,要求输入a,b,c和明文
既然是黑盒那就试试看,明文设为A,经过几次尝试发现:
1.a,b,c!=0
2.a,c允许是负数
在测试数字1的时候密文始终输出来是00,a=b=1,c=-2的时候输出:
密文:
00
Flag:
00 00 00 -1 -1 00 -1 00 -1 00 00 00 -1 -1 00 -1 -1 00 00 00 -1 -1 00 -1 00 -1 -1 00 00 00 00 00 00 -1 00 -1 -1 -1 -1 00 -1 -1 00
于是莫名其妙的试了一下a=1, b=1, c=2147483648:
密文:
42
Flag:
4a 54 44 55 47 7c 39 36 39 66 38 38 35 37 2e 31 31 32 3a 2e 35 31 62 65 2e 63 37 38 64 2e 32 36 3a 63 62 67 39 35 63 36 63 39 7e
事实上42是66的十进制表示,所以每个字节凯撒移位1即可得到ISCTF{858e7746-0019-40ad-b67c-159baf84b5b8}
baby_math
死去的记忆突然被唤醒了
1 | from Crypto.Util.number import bytes_to_long |
这个题是真没想到和LLL有关,AI梭的



1 | from sage.all import * |
ISCTF{164a3221-7306-4024-88c3-4ef557b86895}
小蓝鲨的RSA密文
“小蓝鲨是海洋数学天才,它最近正在深耕RSA领域。你嗤之以鼻,心想RSA不是最基础的密码学知识吗?于是你信誓旦旦的跑到小蓝鲨面前告诉它你已经完全掌握了RSA,并宣称所有的RSA题目你都能做出来。 小蓝鲨意味深长的看了你一眼,并出了一道RSA来考考你。现在,该你向它证明你的实力了。”
1 | import json, secrets |
翻译一下

先爆破a2再恢复m

可以使用二分法找到m。注意!m不是明文哦,m=long_to_bytes(aes_key)

1 | from Crypto.Util.number import long_to_bytes |
ISCTF{i7_533M5_Lik3_You_R34lLy_UNd3R574nd_Polinomials_4nD_RSA}
小蓝鲨的LFSR系统
“小蓝鲨是海洋情报局的新晋密码专家,它设计了一个基于LFSR的流密码系统来加密机密信息。这个系统看起来简单高效,但小蓝鲨不知道的是,LFSR在某些情况下可能存在安全隐患。 一天,小蓝鲨的加密系统被神秘的黑客组织””深海幽灵””入侵,他们截获了一段加密信息。作为海洋安全部门的成员,你需要分析这个加密系统,找出潜在的弱点,并解密被截获的信息。”
1 | import secrets |
有点像测信道攻击

1 | import binascii |
ISCTF{lf5R_jUst_So_s0}
Power_tower
你知道拓展欧拉定理吗
1 | from Crypto.Util.number import * |

需要提防的是,1.2 ^ (2 ^ t)太大,直接跑跑不出来 2.n是伪素数,实际上给的是光滑数
结合提示,扩展欧拉定理

1 | import requests |
ISCTF{Euler_1s_v3ry|useful!!!!!}
easy_RSA
我们的爱情像欧拉函数φ(n)——无限趋近却永远达不到n的完美互质,最终只剩周期性的怀念在模n的世界里循环证明
1 | from Crypto.Util.number import * |
这题和一般RSA有啥区别呢?

式(1)用到了欧拉定理(Euler Theorem);式(2)用到了裴蜀定理(Bézout’s Lemma)。如果g!=1,求解会很困难。
解出u,v需用扩展欧几里得算法,用gmpy2库
1 | import gmpy2 |
加个小备注:
1 | import math |
ISCTF{Congratulations_you_master_Mathematical_ability}
misc
ez_disk
xx警方在翻斗小区抓捕了嫌疑人,并扣押了电脑里一个奇怪的虚拟磁盘,里面藏了犯罪嫌疑人的奇妙资料,运用所学尝试破解吧。
Hint:蓝鲨警局的阿sir说提取检材时末尾好像多了点东西
vmware尝试打开报错,然后卡了很久,试错的时候无意间发现7z可以打开。把oops!!where is passwd?.rar可以直接拖到E盘
需要密码,尝试ARCHPR爆破,试了很久。
能力不够,竟然很久都没有发现其实有一个倒置的jpg文件
FF D8 FF 记住了!
于是把数据提取出来再逆过来
1 | with open('ez_disk.vmdk', 'rb') as f: |
成功是成功了,然后各种隐写冲冲冲,stegsolve,steghide,exiftool,……全部失败
最终想起来之前string搜索看到的hint:all these bytes below must be useful
看到了ftc,确信要把以下全部反转
全选保存为新文件然后用之前的脚本即可,但是大量出现在jpg结束之后的不可见字符是啥情况?半信半疑的时候喂给了AI
竟然是:那些 ‌、â€、‬、 是 Unicode 零宽度字符的乱码显示
豁然开朗,和jpg无关
1 | import re |
把得到的文本全部复制到Unicode Steganography with Zero-Width Characters解码
1 | this_p@ssw0rd_tha7_9ou_caN_n0t _brut3_Forc3_hhhhhhhhhhhhhhaHaa_no0b |
我真裂开了,这么长的密码我爆破个der
打开rar即可。ISCTF{320303e2-5c6a-489a-bcd3-e96a69a3eefc}
消失的flag
“咦?我flag呢,我不是输出了么?
用户名:qyy
无密码”
nc容器,啥也没有,怀疑清屏
ssh连接并打印出清屏前的指令
1 | ssh qyy@challenge.bluesharkinfo.com -p 28892 | cat -v |
得到ISCTF{9b39f3d8-3c8d-4655-b8bd-69f44ad21e87}
冲刺!偷摸零!
小蓝鲨的实训作业……但似乎漏洞百出?(Flag有两段)
Hint:jar包里的东西也要看一眼
此题对新手颇有难度,这次对java程序也熟悉了不少
run-1.0-SNAPSHOT-jar-with-dependencies.jar 可以直接解压
看到了ctf.db直接点进去看看,乱码,搜索ISCTF可得到正确flag的前半段ISCTF{Tom0R1_Dash
剩下的肯定是动态运行程序了
可以吃掉所有伤害快速结束游戏

于是游戏结束肯定是关键。下载https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-1.6.6-min.jar
1 | java -jar jd-gui-1.6.6-min.jar |
实现java反编译
打开文件,找到com.qf.run.GameOverView即可
1 | package com.qf.run; |
固定密钥异或,可以秒
1 | enc = [5, 20, 7, 1, 103, 111, 10, 18, 32, 18, 32, 10, 18, 20, 18, 20, 116, 116, 40] |
得到:PART2:_GuGu_GAGA!!}
所以ISCTF{Tom0R1_Dash_GuGu_GAGA!!}
Image_is_all_you_need
你需要懂点AI和密码学
感觉此题颇难,超出能力范围。全程AI
share_secret.py
1 | import time |
/steg目录下的若干文件:
model.py:
1 | import torch.nn as nn |
net.py:
1 | from model import * |
utils.py:
1 | import torch.nn as nn |
block.py:
1 | import torch |
main.py:
1 | import torch |



1 | import os |
得到flag{Sh4r3_S3reCTTt_wiTh_Ai_H@@@@},ISCTF{Sh4r3_S3reCTTt_wiTh_Ai_H@@@@}
爱玩游戏的小蓝鲨
小蓝鲨说 它将永远追随刻律德菈
Hint:换行也应该带个下划线,刻律德拉是凯撒但这里不是凯撒。
很明显像素,还原成二维图像即可。
一共192318行,分解一下质因式即可
1 | import re |

一下子也不晓得是什么游戏的文字,交给Rycbartbad,找到了星穹铁道里面的翁法罗斯文字
手动翻译得到QKEMK{al4t_k4nT_auMm3_U0Kv_yzV94e3_kg_yp3_O0teI}
明显是Vigenere,密钥是ISCTF:ISCTF{st4r_r4iL_isTh3_M0St_fuN94m3_in_th3_W0rlD}
补一下漏掉的下划线ISCTF{st4r_r4iL_is_Th3_M0St_fuN_94m3_in_th3_W0rlD}
美丽的风景照
做题做累了吧,来看看风景吧!
Hint1:按照彩虹颜色排序试试看
Hint2:这照片里的古建筑上怎么写个明光大正”“那是正大光明,古风都是倒着来的
附件:zip
简单file发现zip,直接改后缀解压,得到一张gif,字符串肉眼可见,随便找个网站extracted就行,随波逐流也可
轻松得到jqW2 ZXw8T 7HLo8 6yRWh Dg2C 98Mz 3CaEK
不像是base64,比较像base58,试了都失败了
Hint1给出后重排,可以得到jqW2Dg2C7HLo86yRWh3CaEKZXw8T98Mz,解码还是错误
Hint2给出以后实在是无语了,继续重排2WqjC2gD7HLo86yRWhKEaC3ZXw8T98Mz,注意别忘了青花瓷也是“古代”。
base58解码得到ISCTF{H0w_834u71fu1!!!}
小蓝鲨的千层FLAG
“如果你愿一层一层一层地剥开我的 Zip 你会发现,你会流泪—— 埋在最深处 8+4 的真正奥秘……”
Hint:可参考资料:https://www.freebuf.com/articles/network/255145.html
本来想抢血的,但无奈写脚本能力太差,花了很久时间
嵌套压缩包,HxD打开,文件末尾写了密码。试着手动解压一次,规律都一样,只是数字-1,那就循环解压缩了
1 | import re |
得到了flagggg000.zip,然后又是flagggg99.zip,手动解压出flagggg99.zip,脚本基本上同上
1 | import re |
解压到flagggg3.zip,出题人开始玩心眼子了:The password is… wait, I forgot! But you must know what’s inside, right?
查看Hint,提示已知明文攻击。bkcrack
这一块我还没完全掌握,没有成功。交给了Rycbartbad解出,复现后的正确命令行如下:
1 | (base) ┌──(root㉿LAPTOP-BMERJF8L)-[/mnt/e/99] |
要进攻flagggg2.zip把它弄出来,需要的是flagggg2.zip的明文即flagggg1.zip和50 4B 03 04
成功后得到flagggg2_decrypted.zip,剩下的没有密码,手动解压即可
得到flagggg.txt,ISCTF{3f165c87-c0d4-4903-9c47-3a8d3b9c83df}
星髓宝盒
“什么什么什么,,,你竟然不知道什么是星髓宝盒!!!
星髓宝盒里的flag是只能留给优秀学生的奖励,优秀学生自会知道它的咒语!!!”
改后缀解压,得到星髓宝盒.png,pngcheck,发现有多余数据且binwalk分离失败
1 | foremost 1.png |
foremost分离,提取出来了一个zip,再直接解压
真-星髓宝盒.zip需要密码,flag应该就在里面。查看你是优秀学生吗.txt,明显0宽隐写
https://330k.github.io/misc_tools/unicode_steganography.html
要多积累几个网站,这次碰到的就是双重隐写
文本隐水印在这个网站成功去掉第一层零宽字符:
你虽然能走到这一步,但还不是优秀学生哦,flag是专属于优秀学生的奖励,优秀学生自会知道他的咒语
但是第二层又失败了,此时在https://330k.github.io/misc_tools/unicode_steganography.html又成功去掉了第二层
得到5b298e6836902096e9316756d3b58ec4
直接作为密码失败了,感觉像是md5,才想起来还有一个jpg没用上
1 | (base) ┌──(root㉿LAPTOP-BMERJF8L)-[/mnt/e/baobao/output/zip/00001795] |
exif数据发现一个网站https://www.somd5.com/
解密得到!!!@@@###123,难怪ARCHPR试了半天失败了,这密码当然爆破不出
解压得到flag.txt:ISCTF{1e7553787953e74113be4edfe8ca0e59}
阿利维亚的传说
你知道阿利维亚的传说吗
解压得到png和docx,docx必考改zip解压
先看看png有什么异常,pngcheck有附加数据,binwalk分离出zip,直接解压需要密码,尝试爆破
ARCHPR秒出8652,得到
谕言3:
T=FMfr
R=iytY
U=nGFo
E=diou
看起来是第三段,FindMyGiftForYou
试一下zsteg,得到明显base64:6LCV6KiAMjoKVz1Ib2VpaApIPW91VGdvCmw9cE1oaGkKTD1lYWV0YwpFPVlrckNl
解密得到
è°è¨2:
W=Hoeih
H=ouTgo
l=pMhhi
L=eaetc
E=YkrCe
第二段是HopeYouMakeTherightChoice(注意r小写,做题时候没注意)
回看docx,先直接打开看看,提示(解出的每段flag后面加_,类似于flag1_flag2_flag3),那就找找flag1
改字体颜色没发现异常,解压查看,后面的交给Rycbartbad师傅了
/word下找到documents.xml,得到
谕言1:
V=Dortt
A=otuTa
N=NTsin
得到DoNotTrustTitan
ISCTF{DoNotTrustTitan_HopeYouMakeTherightChoice_FindMyGiftForYou}
湖心亭看雪
张岱在“雪”景中有感而发
看眼题干基本上就知道是snow隐写
点开py,
1 | a = b'*********' #这个东西你以后要用到 |
解个密
1 | c = bytes([83, 89, 22, 17, 21, 90, 81, 64, 94]) |
得到15ctf2025
接下来看看jpg什么情况,exiftool全部正常,binwalk和foremost全部失效
拉进010editor看看,发现最后多了数据
14 00 09 00,补上50 4B 03 04保存为zip
加密了,输入15ctf2025解密得到txt
snow解密即可,密钥猜想仍是15ctf2025
1 | ./SNOW.exe -C -p "15ctf2025" flag.txt |
ISCTF{y0U_H4v3_kN0wn_Wh4t_15_Sn0w!!!}
OSINT
OSINT-1,OSINT-2,纯图寻题,Google识图即可,精确位置手动调一调
OSINT-3
这题就比较传奇了,把图片喂给AI,感觉明显不是中国,一开始试过乌克兰、白俄罗斯、美国。很早Grok就怀疑是在哈萨克斯坦,但是不是优先项。试了几次之后ChatGPT怀疑是在哈萨克斯坦,才找到正确方向。
信息点1:左侧的大片麦田,而且连绵不绝
信息点2:地上的车道分隔线是白色的
信息点2可以排除大部分国家如America,有的国家大部分地方Google街景没有覆盖,可直接排除
如果仔细观察,图片里面是有水印的,2024Google,所以在地图里面也可以根据水印快速排除

第一处,点进去查看公路,环视一下感觉稳了,就沿着公路一直找,最后还是找到了
一开始一直无法精确定位,后来想到可以借助途中左侧的一棵树,大致是西偏北30°,锁定了精确位置。
ISCTF{immorally.misusing.began}54.32161512496924, 65.7630826261645
SIGNIN
OSINT-4
本题是放在SIGNIN类别下的OSINT主题的MISC类型的题,没有隐写,没有图寻。
OSINT系列通用靶机地址(请勿攻击平台):
反复强调不是图寻,毕竟那张图上面随便标一个点,what3words的差别会巨大
很奇怪的是明明有附件,还给了OSINT网址,再联想到勇敢者的游戏,
是的,flag就是写在OSINT网站上的示例flag:ISCTF{like.crazy.thursdays}
不放心可以点开地图查查,确实是这儿
老朋友、老朋友们和新朋友们
。题的GALF到签取获ISCTF2025送发台后号众公息信鲨蓝向道一出会定肯年今FTCSI说里群在常们西东老
关注,发送5202FTCSI.ISCTF{0nce_M0re_With_Feeling_And_The_J0urney_C0ntinues!!}
小蓝鲨的RC4系统
送都送了,再给一个。
1 | import hashlib |
1 | import hashlib |
ISCTF{Welcome_to_ISCTF_&_this_is_a_secret_with_RC4}
我去,Flag是真的!?
随便交,可惜没找到彩蛋
ISCTF{我要投递简历加入蓝鲨信息!}
What a crazy day!! 之勇敢者的游戏
hint-50pts,但是你很勇敢,得到了349ptsISCTF{7hank_you_&_now_you_can_win_3v3n_mor3!!}
应急响应
hacker
hacker在数据库的某个后台写入了很多的垃圾用户(注册),请提交其IP。 Flag使用ISCTF{}包裹。
hacker.pcapng拖到wireshark,http.request.uri contains “/register.php”过滤,于是ISCTF{192.168.37.177}
这题一开始flag设置错误了,导致结果一直不对
奇怪的shell文件
小张同学是某安全团队的成员,负责公司服务器的日常安全检查。某天,他发现在一台关键业务服务器上存在异常行为,他的目标分析webshell连接工具,请提交工具名称作为flag以完成此次事件响应任务。 Flag使用ISCTF{}包裹。
附件下载: https://pan.baidu.com/s/1qQ1l-JncSGlDQdNqv3XjRw?pwd=gzei
喂ai盲猜ISCTF{Behinder},侥幸二血
