强网拟态线下Misc复现
强网拟态线下Misc复现
复现参考:
https://goodlunatic.github.io/posts/353513a/
https://0ran9e.fun/2025/11/30/qwnt/wp/
泄漏的时间与电码
1 | 题目描述: |
附件有以下三个

其中chal是elf可执行文件,chal.py内容如下:
1 | import time |
timing.log的内容为:
1 | 1.110270 |
是侧信道攻击的相关内容,模拟了一个“安全打字机”,在处理每个字符时,根据字符的值和内部状态产生了不同的计算量,从而导致处理时间不同,同时chal文件解包并反编译后发现代码逻辑与chal.py文件相同,先恢复timing.log的内容
1 | import sys |
得到恢复的表
1 | h i j k l m n |
结合hint1:ModR/M,可以在谷歌找到下面这个项目

https://github.com/woodruffw/steg86
1 | steg86 extract chal > flag.txt |

1 | 326a31306c206b6b6868203a332024206a686820346820326b32682024336a203468336b206a323068206a6a366c206b6b6c6c206c6c6b205e6a206b6b24686820306a6a202f7a203a3620356b24206a6a206a |
也就是
1 | 2j10l kkhh :3 $ jhh 4h 2k2h $3j 4h3k j20h jj6l kkll llk ^j kk$hh 0jj /z :6 5k$ jj j |
这是一段vim编辑操作,对应上面的字符表
| 指令 | 坐标 | 字符 |
|---|---|---|
2j10l |
(2, 10) | f |
kkhh |
(0, 8) | l |
:3 |
(2, 0) | a |
$ |
(2, 12) | g |
jhh |
(3, 10) | { |
4h |
(3, 6) | y |
2k2h |
(1, 4) | 0 |
$3j |
(4, 12) | u |
4h3k |
(1, 8) | - |
j20h |
(2, 0) | a |
jj6l |
(4, 6) | r |
kkll |
(2, 8) | e |
llk |
(1, 10) | _ |
^j |
(2, 0) | a |
kk$hh |
(0, 10) | m |
0jj |
(2, 0) | a |
/z |
(3, 8) | z |
:6 |
(5, 0) | 1 |
5k$ |
(0, 12) | n |
jj |
(2, 12) | g |
j |
(3, 12) | } |
flag{y0u-are_amaz1ng}
返璞归真
附件下载的压缩包存在伪加密,随波逐流工具直接自动修复了,解压时发现注释有hashisk3y

将图片拖入随波逐流中处理,发现文件尾还藏有一个bmp文件,分离出来得到:

是paperback,之前在L3HCTF2025做到过,附上工具下载链接:http://www.ollydbg.de/Paperbak/
得到wow.txt:
1 | jNX+xu2QKBm23AUlwClt+3xDkQcJGjM= |
结合之前的hashisk3y,我们把之间的那张image.jpg删去末尾BMP的数据后MD5一下
001a62ee54d1c28a8b769ab5499011cb
是rc4解密,得到

flag{examp13_f0r_r3a11}
猫咪电台
附件得到1.wav和cat0.png
首先处理cat0.png图片,在随波逐流发现存在LSB隐写,其中的顺序为BGR,是一个png文件,到stegsolve里面导出文件

得到

flag part0: ==gNWRWTFRjY4IGV4sGczg0QzAFUyQTQ

得到part0:Ci4l10~
接下来我们处理1.wav文件,可以发现该文件还藏有一个zip文件:

得到一个压缩包,里面有2.wav但是解压需要密码

发现有两条很清晰的频率,猜测是RTTY

用minimodem解码,自动检测:
1 | minimodem -a --rx rtty -i -f 1.wav |

得到flag1:R77YM30W1SFUN
1 | CQ CQ CQ DE CATHUB |
以及压缩包解压密码 450KTFQY1D4KX8JB

普通的音频采样率通常是 44100 Hz (44.1 kHz) 或 48000 Hz,这里的采样率是 2.4 MHz,这是无线电频谱的原始录制数据。这个采样率(2.4 MSps)是常见入门级 SDR 设备(如 RTL-SDR)的典型采样率,跑ai跑出来一个脚本
1 | import soundfile as sf |
运行结果如下
1 | [*] Loading 2.wav... |
在flag_FM.wav里面可以听到类似于sstv音频特点的声音,使用MMSSTV得到


2nd part _C4T9L1V3S
最后的flag:flag{Ci4l10~R77YM30W1SFUN_C4T9L1V3S}
标准的绝密压缩
是一道流量分析题目,我们追踪tcp流,可以发现有一些png数据(89504e47),手动提取并分别排序命名为12345…..(neta提取的图片数量不完全,而且没有顺序)

得到以下照片,而且它们的分辨率都为100 x 100
用pngcheck检查一下,结果表明这个极有可能不是一张真正的图片,而是一段被伪装成PNG IDAT数据块的文本信息,将文本信息进行了zlib压缩,直接塞进了IDAT块

脚本提取数据:
1 | import zlib |
得到
1 | Connection established. Hey, you online? It’s been a while since we last talked.Yeah, I’m here. Busy as always. Feels like the days are getting shorter.Tell me about it. I barely have time to sleep lately. Between maintenance logs and incident reports, I’m drowning.Sounds rough. I’ve been buried in audits myself. Every time I finish one, another pops up.Classic. Sometimes I wonder if the machines are easier to deal with than the people.No kidding. At least machines don’t ask pointless questions.True. Anyway, before I forget—how’s that side project you were working on? The one you wouldn’t shut up about months ago.Still alive… barely. Progress is slow, but steady. You know me—I don’t give up easily.Good. I hope it pays off one day.Thanks. Alright… I’m guessing you didn’t ping me just to chat?Well, half of it was. It’s been a while. But yes—I do have something for you today. Before sending the core cipher, I’ll transmit an encrypted archive first. It contains a sample text and the decryption rules.Okay. What’s special about this sample text?And… inside the sample text, I used my favorite Herobrine legend—you know the one I always bring up.Of course I know. The hidden original text from that weird old site, right?What can I say—old habits die hard. Anyway, the important part: the sample packet and the core cipher are encrypted with the same password.Got it. So if I can decrypt the sample, the real one should be straightforward.Exactly. Send the sample when ready.I’m ready. Go ahead.UEsDBBQAAQAIABtFeFu1Ii0dcwAAAHwAAAAJAAAAcnVsZXMudHh07XuRBFDbojGKhAz59VaKEpwD6/rKaZnqUxf+NMH0rybWrAMPewZ/yGyLrMKQjNIcEbPAxjmP5oTh8fP77Vi1wnFwzN37BmrQ9SCkC27FC/xeqbgw/HWcDpgzsEoiNpqT9ZThrbAScyg5syfJmNactjelNVBLAwQUAAEACACGOXhbpdvG1ysBAAAVAgAACgAAAHNhbXBsZS50eHTA1fy4cMLZwZkTI1mEk88yOXy9rmbTbCNBQOo9hqKQPK6vjZVo9aCtTVflmkKYGV99+51qXbinmG7WGik5UvLJk9MKRosThBCDMHrmjibOCzjzNELwEgEyX8DjqJkSc8pIFwj+oRM3bb4i0GtRxbwqgsxCtgwiKdCVoXVdetN7RKLIQ7DD+Huv/ZptNdd0yRNHis9LEA3loB+IHZ+dK7IknqPh4lYF8JwAjx5/wwp0YAM6Bcec7uAvk6B5t1pEztm1rLl8TjniVz5/bBUTo1LjUXnar/pnm1NvE9EAuxz/s6b+O8/ew7/A4ItdNJGzDudh6YULfiV3pCTXFIbR4GCe4LwkohWZIlAjysA+zLRrgkTDoB10vWdNGdfoBAlLRoUdZ95mS7X5/bXV41BLAQI/ABQAAQAIABtFeFu1Ii0dcwAAAHwAAAAJACQAAAAAAAAAIAAAAAAAAABydWxlcy50eHQKACAAAAAAAAEAGABIv3f82lzcAQAAAAAAAAAAAAAAAAAAAABQSwECPwAUAAEACACGOXhbpdvG1ysBAAAVAgAACgAkAAAAAAAAACAAAACaAAAAc2FtcGxlLnR4dAoAIAAAAAAAAQAYAFP0sZjOXNwBAAAAAAAAAAAAAAAAAAAAAFBLBQYAAAAAAgACALcAAADtAQAAAAA=got it. Decrypting… yeah, it works.Good. That means the channel is stable.Alright. Whenever you’re ready, send the real thing.The core cipher will be transmitted through our secret channel. You remember how to decrypt it, right?Of course. I’ve got the procedure ready. Start when you’re ready.Done. Core cipher fully received. Integrity verified—no corruption.Same to you. And hey… nice talking again.Agreed. Take care.Good. Keep things quiet for the next few days.Yeah. Let’s not wait so long next time.You too. |
其中的一串字符是base64编码的加密zip压缩包,需要sample.txt作为明文进行明文攻击
结合对话中提到的Herobrine legend和weird old site可以在网上找到sample.txt:

1 | It has been reported that some victims of torture, during the act, would retreat into a fantasy world from which they could not WAKE UP. In this catatonic state, the victim lived in a world just like their normal one, except they weren't being tortured. The only way that they realized they needed to WAKE UP was a note they found in their fantasy world. It would tell them about their condition, and tell them to WAKE UP. Even then, it would often take months until they were ready to discard their fantasy world and PLEASE WAKE UP. |
010查看加密压缩包的压缩方式,其加密的标志位为0x3F,猜测是用7z压缩的

进行明文攻击得到内部密钥:
1 | b47e923c 5aeb49a7 a3cd7af0 |
得到rules.txt:
1 | 1.you need to calc the md5 of port to decrypt the core data. |
大致的思路利用对应的端口的MD5作为key解密内容
1 | tshark -r capture.pcapng -T fields -e tcp.srcport -e tcp.dstport -e tcp.payload >1.txt |
刚提取出来的数据是分块的,如下
1 | 30012 8900 7c9062acee29aaa61768 |
也就是:
1 | 7c9062acee29aaa617689da62a4b8bed889e01e6c50f8566ba622cef65832f65d15cab15cd5c17c9937312dc74526dab11fac16788105bc707a25d50f5fe8add47d10edc2567e7f6570c7248dc81ad1abc19e44f6cd47a265fdfbaef0e08859931abe90523b675657b57f930a53d42f4e1f6062efd733db82d4fe08f08a1c98bd0c81c4cc46ee3cefcd7c13658748a913c28656b1fd7d1cb2029d9e76f67d043c504e75a379c0700fc30ef8722dbb1ac |
对应端口号是30012,md5为7c365ebfc34003c40033cc47f6116dd1作为key
AES-ECB模式解密:

得到压缩包

大小为4字节,符合crc爆破的条件,写脚本提取所有的数据,进行爆破
以下脚本来自 Lunatic 师傅:https://goodlunatic.github.io/posts/353513a/#%E9%A2%98%E7%9B%AE%E5%90%8D%E7%A7%B0-%E6%A0%87%E5%87%86%E7%9A%84%E7%BB%9D%E5%AF%86%E5%8E%8B%E7%BC%A9
1 | import subprocess |

得到80个zip文件,都能crc爆破,写脚本批量爆破 crc:
1 | import binascii |
这里crc_values是上一个脚本得到的数据
就是这里要注意最后一个压缩包中的 txt 是 3 字节,需要单独处理一下,所有CRC爆破结果合起来是:
1 | 53 29 00 00 CB AE 02 00 CB 2C 00 00 53 31 04 00 |
把上面的数据按每4字节一组解压,可以得到一个zip的hash
1 | import zlib |
hash为:
1 | $pkzip$1*1*2*0*35*29*4135a7f*0*26*0*35*0413*c8358ce9e6858f166753637de145d0c841cee9efd7cf2008d13e551dd584b69cae5895c7df45f32fdfb51d0c0d273820239896d3e6*$/pkzip$ |
参考2025 buckeyeCTF-zip2john2zip的wp:
https://github.com/cscosu/buckeyectf-2025-public/blob/master/forensics/zip2john2zip/solve/solve.py
已知三个内部密钥和哈希值,还原 zip 并解压缩:
1 | #!/usr/bin/env python3 |
得到flag{W0ww_th3_C@ske7|s_Tre4sur3_unl0cke9}





