2025第三届盘古石杯初赛wp

1
2
VR容器密码:9f8L2kP7mQv3RzX1tB5n6yH4CwJp9TqEa2rF1xSbD0LcKjZ
容器密码:01tn0GdE0]BF00pT0T&f00&u0k-q0Up41UhA00N,0\-L0kRr0j-p0T&R1F&=0\Ni1GR]

VR场景如下:

image-20250512221548158

手机

T1

分析安卓手机检材,手机的IMSI是?

image-20250510135532073

1
460036641292715

T2

养鱼诈骗投资1000,五天后收益是?

image-20250510135631987

1
175

T3

分析苹果手机检材,手机的IDFA是?

image-20250510135718773

1
E477D4C7-BD02-4979-BC9D-5C5DE7BD1F17

T4

Telegram应用的卸载时间是?

image-20250510142156828

1
2025-04-17-10:51:39

T5

机主hotmail邮箱地址是?

image-20250510143718824

1
hostsixer@hotmail.com

T6

苹果电脑开机密码是?

藏在系统截屏里!

image-20250512162139410

1
12345678

T7

Telegram加密通讯中,加密聊天信息用到的第二个解密载体是? [答案格式:123.zip]

image-20250512162247601

在苹果手机的截屏里有涉及,看着像,但是不能完全确定。

但当我们看mac镜像的时候,就会发现:

image-20250512162918830

1
2.mp4

T8

贾韦码的内部代号是?

image-20250510154339514

贾韦码是被清理的那个,也就是代号48.

1
48

T9

特快专递的收货地址是?[标准格式:老牛市快速路11号ADE公司] What is the delivery address for the express package? [Answer format: 老牛市快速路11号ADE公司]

image-20250510153942550

1
西红市中山路35号PGS健身房

app

T1

分析安卓检材,远控工具包名是?

image-20250510155210264

这个银联会议下下来是一个RustDesk,是一个远控软件。

1
com.carriez.flutter_hbb

T2

远控工具中继服务器IP是?

image-20250510163915238

image-20250512164044224

1
59.110.10.229

T3

远控工具ID服务器端口是?

image-20250510163920433

1
21116

T4

远控工具中继服务器Key是?

image-20250510163920433

1
WIUqzRq1Ocx4QNnsF26dZQijKdyd2L9OfaT55hDlQCI=

T5

远控工具中收藏的远程ID是?

image-20250510164228457

1
1807892422

T6

远程控制该手机的手机型号是?

image-20250510164359710

1
google-Pixel

T7

监听工具包名是?

image-20250510161537435

存在录制音频的权限,且通过源码看出其开机自启动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example.liekai;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/* loaded from: classes.dex */
public class BootReceiver extends BroadcastReceiver {
@Override // android.content.BroadcastReceiver
public final void onReceive(Context context, Intent intent) {
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Intent intent2 = new Intent(context, MainActivity.class);
intent2.addFlags(268435456);
context.startActivity(intent2);
}
}
}
1
com.example.liekai

T8

监听工具代码主入口是?

image-20250510161647335

1
com.example.liekai.MainActivity

T9

监听工具的签名算法是?

image-20250510161844857

1
SHA256-RSA

T10

监听工具运行多少秒后会跳转成黑色幕布?[标准格式:3.000]

猜测。。。直接打开liekai工具数一下。。

1
1.000

T11

监听工具运行后,黑色幕布上字符串是?[标准格式:aes取证平台]

我们看apk源码的时候发现了这个apk的相关框架特征:

image-20250512170156763 image-20250512170205583

应该是属于flutter框架的。

在这个jadx的源码中我们没有发现任何线索,那么想办法逆向一下flutter框架。

利用 Flutter 框架开发的 app,打包后,会将代码打包成 so,而且会将接口请求添加证书校验,防止中间人攻击,普通方法是抓不到包的。无形中增加了逆向的难度,说句题外话,用 Flutter 框架开发,不仅可以跨平台,还增加了安全性👍。 Flutter 框架开发的项目,打包后会生成两个 so,分别是 libapp.solibflutter.so,前者是业务相关的,后者是 Flutter 引擎用到的。 用 IDA 打开libapp.so,会发现函数名都被混淆了,这时就要借助开源框架Blutter来还原混淆的函数名了。

https://github.com/worawit/blutter

好像只有linux能成功,那么我们放vps上试试

1
2
3
4
5
6
git clone https://github.com/worawit/blutter --depth=1

apt install python3-pyelftools python3-requests git cmake ninja-build \
build-essential pkg-config libicu-dev libcapstone-dev

python3 blutter.py /root/arm64-v8a/ out_dir

获得out_dir后,打开libapp.so后运行输出文件夹中的IDApython脚本ida_script/addNames.py,符号就被全部恢复出来啦

image-20250512195921265

image-20250512200017174

去看一下跑出来的 asm 那个文件夹,liekai 里面有一个 screens 文件夹,里面有一个 dart 写的 black_overlay.dart,这个就是和黑色幕布相关的东西。

image-20250512200126025

image-20250512200213488

1
pgs比武专用

T12

监听工具检测到多少分贝开始录音?[标准格式:30]

打开工具后它会显示一秒,趁机给他截个屏!

image-20250512200726916

1
70

T13

监听工具录音连续几秒没有检测到声音停止录音?[标准格式:3]

1
4

T14

监听工具保存文件存储路径的数据库名称是?

image-20250510165634530

1
recordings.db

T15

监听工具保存录像文件的文件夹是?

保存的录像文件,应该是在storage文件夹下,我们跟进去找一下发现recording。

image-20250512201116531

1
recording

T16

监听工具数据库中保存音视频文件的路径使用什么加密?[标准格式:Rsa]

image-20250512211013910

image-20250512211043101

对应上了

1
Salsa20

T17

录音的文件采用什么加密方式?[标准格式:RC4-123]

录音文件,我们可以根据英文翻译来找相关的函数

image-20250512211310999

AES,那么是哪种AES呢?跟进看看

image-20250512211718181

密钥长度32位,那就是AES-256

1
AES-256

T18

录像文件加密秘钥的最后一位是?[标准格式:0x6A]

录像文件,那就是video

image-20250512212716957

1
0x9A

T19

原始文件md5为3b4d****55ae的创建时间是?[标准格式:2024-2-14-16:32:8]

不会。

计算机

T1

分析贾韦码计算机检材,计算机系统Build版本为?[标准格式:19000]

image-20250512223441762

1
18362

T2

计算机最后一次正常关机的时间为?UTC +0 [标准格式:2025-05-06 09:00:00]

image-20250512223546871

注意检材的时区是 UTC+8,答案要求 UTC+0,需要减去 8 小时。

1
2025-04-18 3:20:54

T3

计算机网卡的MAC地址为?[标准格式:00-0B-00-A0-00-00]

image-20250512223746654

1
00-0C-29-0F-69-00

T4

计算机用户“贾韦码” 安全标识符SID为?[标准格式:S-X-X-X-X-X-X-X]

image-20250512225113616

1
S-1-5-21-3733482367-3411043098-2536183883-1001

T5

计算机默认浏览器为?[标准格式:Mozilla Firefox]

image-20250512231907132

1
Google Chrome

T6

计算机默认浏览器版本为?[标准格式:000.0.0000.00]

image-20250512232406278

1
135.0.7049.96

T7

机主通过浏览器搜索国外社交软件为?[标准格式:Whatsapp]

image-20250512232504724

1
Telegram

T8

机主的邮箱账号为?[标准格式:pgscup@pgs.com]

image-20250512233327494

1
tqmdavidjohnson300@gmail.com

T9

计算机装过一款反取证软件为?[标准格式:EnCrypt.exe]

image-20250512233417365

1
VeraCrypt.exe

T10

计算机通过Xshell远程连接的ip地址为?[标准格式:127.0.0.1]

image-20250512233515931

1
192.168.56.129

T11

机主曾买过一个美国的TG账号,请给该账号的原两步验证密码?[标准格式:8位数字]

image-20250512233704073

1
13770603

T12

给出其电脑内加密容器的解密密码?[标准格式:Abc@123]

image-20250512234808567

确实是存在加密容器的

记得之前VR场景的纸条吗?有容器以及vmx加密规则

image-20250512221548158

用passwareKit爆破一下?

image-20250513204838924

这个爆破速度有点破防。。。

image-20250513204907540

感觉是因为我的笔记本电脑太垃圾了。。。。。。生气!!

直接给出密码吧

1
Pgs8521d3j

T13

给出其电脑内加密容器挂载的盘符?[标准格式:C]

image-20250514095708079

仿真后我们是知道文件系统只有C盘的,而这里存在F盘的访问路径,那么加密容器挂载的就是F盘

1
F

T14

给出其电脑内存放了多少张伪造身份证?[标准格式:10]

先挂载加密容器,发现里面的output文件夹其实就是伪造的身份证。

image-20250514103118781

原以为是1024,但是最后一个是一个excel表,因此就是1023张。

1
1023

T15

找出任敏的身份证编号?[标准格式:18位]

image-20250514103305703

1
430529195112085460

T16

找出其电脑内存放的密钥文件,计算其MD5? [标准格式:字母小写]

image-20250514104013063

发现了一个可疑的文件,但是找不到源文件。源文件是一个快捷方式。。

尝试在火眼爆搜,但是搜不出来。那么用xways搜一下?直接爆搜十六进制文件头

1
526172211A070100

image-20250514110940692

image-20250514111440407

1
1022cc083a4a5a9e2036065e2822c48e

T17

找出其电脑内存放的密钥文件,解密此密钥文件,给出其内容?[标准格式:第3届pgscup]

一眼base64

image-20250514111538720

1
zfs加密pool密钥文件

T18

对macOS系统进行解析,登陆的电子邮件服务是谁提供的?[标准格式:pgscup]

image-20250514112109947

1
Outlook

T19

系统备忘录的包名是什么?[标准格式:com.dfefef.note]

image-20250514112218864

1
com.apple.Notes

T20

图片中隐藏的内容是什么?[标准格式:隐藏内容 厨子戏子痞子]

密语规则中有一个png图片,不出意外就是隐写了一些东西。

image-20250514114443586

image-20250514114728547

red plane0通道有一个二维码

解码后如下:

1
位移加密 正向位移操作

T21

被加密文件的扩展名是什么?[标准格式:123]

image-20250514114846453

存在一个文件加密器app和一个资料文件,一眼加密过的

1
enc

T22

被加密的文件总共有几个?[标准格式:5]

image-20250514115128813

应该只有一个,其他不是,因为这个加密的话是在整个文件名(包括后缀)后加上.enc的。

1
1

T23

贾韦码家使用的智能门锁品牌型号是什么?[标准格式:小米X号]

这应该是需要解密jwm的资料了。我们可以先看苹果应用取证。

文件加密的逻辑如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def encrypt_file(self, input_file, output_file=None):
if not output_file:
output_file = input_file + '.enc'
try:
cipher = AES.new(self.enhanced_key, AES.MODE_CBC)
iv = cipher.iv
with open(input_file, 'rb') as f:
file_data = f.read()
padded_data = self.pad_data(file_data)
encrypted_data = cipher.encrypt(padded_data)
with open(output_file, 'wb') as f:
f.write(iv + encrypted_data)
return (True, output_file)
except Exception as e:
return (False, str(e))

我们不知道enhanced_key是什么,尝试直接在加密的时候输出它。

image-20250516184216509

iv为文件的前 16 个字节,接下来用cyberchef解密

1
2
a78ea9f73a9d69af44e014943ed38dd1
2cd7460b2f7fd3c26c86c81a9adc27ca

image-20250516190556777

image-20250516190606880

1
金刚Ⅲ号

苹果应用取证

T1

对mac电脑中的加密程序进行分析,使用了一个特定的数作为密钥生成的种子,请问这个数是什么?[标准格式:1234]

尝试直接运行该加密程序的gui

image-20250514115558992

image-20250514115742318

找到这个模块,反编译后导入即可。

1
pycdc.exe C:\Users\TY\Desktop\encrypt_deobfuscated.pyc -o encrypt_deobfuscated.py

我们先找一下这段加密的逻辑,这个缺失的模块就很像。

image-20250514120702214

1
42

T2

分析文件头部元素并确定它们的正确顺序。将字段名称按顺序连接并提交?[标准格式:字段1_字段2_字段3…]

这时,我发现在pycdc反编译出来的py文件中是没有这个答案的,答案是部分缺失的。

接下来用pylingual在线网站进行反编译。

image-20250516003315680

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# Decompiled with PyLingual (https://pylingual.io)
# Internal filename: encrypt_deobfuscated.pyc
# Bytecode version: 3.8.0rc1+ (3413)
# Source timestamp: 2025-04-17 01:58:27 UTC (1744855107)

import os
import sys
import tkinter as tk
from tkinter import filedialog, messagebox
from Crypto.Cipher import AES
import base64
import hashlib
import time
import random

class EncryptionTool:

def __init__(self):
self._generate_key()

def _generate_key(self):
seed_values = [(19, 7, 83), (5, 31, 69), (13, 11, 86), (41, 3, 76), (2, 57, 55), (23, 5, 96), (17, 13, 58), (29, 7, 94), (11, 19, 102), (7, 17, 42), (43, 3, 48), (37, 11, 51), (3, 43, 52), (59, 7, 53), (47, 5, 54)]
key_parts = []
for a, b, base in seed_values:
val = (a * b % 60 + base) % 256
if val % 2 == 0:
val = (val + 13) % 256
else:
val = (val + 7) % 256
key_parts.append(chr(val))
scrambled = []
indices = [3, 7, 2, 12, 0, 11, 5, 14, 9, 1, 6, 4, 10, 8, 13]
for idx in indices:
scrambled.append(key_parts[idx])
raw_key = ''.join(scrambled)
timestamp = int(time.time()) % 1000
random_val = random.randint(1, 255)
entropy = chr(timestamp % 256) + chr(random_val)
temp_key = hashlib.sha256((raw_key + entropy).encode()).digest()
self._descramble_key(temp_key)

def _descramble_key(self, temp_key):
mixed_base = b''.join([bytes([b ^ 42]) for b in temp_key[:10]])
actual_key = 'SecureKey123456'
self.enhanced_key = self.enhance_key(actual_key)

def enhance_key(self, key):
round1 = self._add_salt(key)
round2 = self._ascii_transform(round1)
round3 = self._xor_transform(round2)
round4 = round3[::-1]
final_key = hashlib.md5(round4.encode()).digest()
return final_key

def _add_salt(self, key):
salt_components = ['salt', '_', 'value']
return key + ''.join(salt_components)

def _ascii_transform(self, text):
result = ''
for i in range(len(text)):
ascii_val = ord(text[i])
if i % 3 == 0:
result += chr((ascii_val + 7) % 256)
elif i % 3 == 1:
result += chr((ascii_val ^ 15) % 256)
else:
result += chr(ascii_val * 5 % 256)
return result

def _xor_transform(self, text):
xor_keys = ['XorKey123456789', 'AnotherKey987654']
result = text
for xor_key in xor_keys:
temp = ''
for i in range(len(result)):
temp += chr(ord(result[i]) ^ ord(xor_key[i % len(xor_key)]))
result = temp
return result

def pad_data(self, data):
block_size = AES.block_size
padding_length = block_size - len(data) % block_size
padding = bytes([padding_length]) * padding_length
return data + padding

def unpad_data(self, data):
padding_length = data[-1]
return data[:-padding_length]

def encrypt_file(self, input_file, output_file=None):
if not output_file:
output_file = input_file + '.enc'
try:
cipher = AES.new(self.enhanced_key, AES.MODE_CBC)
iv = cipher.iv
with open(input_file, 'rb') as f:
file_data = f.read()
padded_data = self.pad_data(file_data)
encrypted_data = cipher.encrypt(padded_data)
with open(output_file, 'wb') as f:
f.write(iv + encrypted_data)
return (True, output_file)
except Exception as e:
return (False, str(e))

class EncryptionGUI:

def __init__(self, root):
self.root = root
self.root.title('File Encryption Tool')
self.root.geometry('500x300')
self.root.resizable(False, False)
self.encryptor = EncryptionTool()
self.setup_ui()

def setup_ui(self):
file_frame = tk.Frame(self.root, pady=20)
file_frame.pack(fill='x')
tk.Label(file_frame, text='Select File to Encrypt:').pack(side='left', padx=10)
self.file_path = tk.StringVar()
tk.Entry(file_frame, textvariable=self.file_path, width=30).pack(side='left', padx=5)
tk.Button(file_frame, text='Browse', command=self.browse_file).pack(side='left', padx=5)
action_frame = tk.Frame(self.root, pady=20)
action_frame.pack()
tk.Button(action_frame, text='Encrypt File', command=self.encrypt_file, bg='#4CAF50', fg='white', width=15, height=2).pack(pady=10)
status_frame = tk.Frame(self.root, pady=10)
status_frame.pack(fill='x')
self.status_var = tk.StringVar()
self.status_var.set('Ready')
tk.Label(status_frame, textvariable=self.status_var, bd=1, relief=tk.SUNKEN, anchor=tk.W).pack(fill='x', padx=10)

def browse_file(self):
filename = filedialog.askopenfilename(title='Select File to Encrypt')
if filename:
self.file_path.set(filename)

def encrypt_file(self):
file_path = self.file_path.get()
if not file_path:
messagebox.showerror('Error', 'Please select a file first!')
return
self.status_var.set('Encrypting...')
self.root.update()
success, result = self.encryptor.encrypt_file(file_path)
if success:
self.status_var.set(f'Encryption complete! Output: {result}')
messagebox.showinfo('Success', f'File encrypted successfully!\nOutput: {result}')
else:
self.status_var.set(f'Encryption failed: {result}')
messagebox.showerror('Error', f'Encryption failed: {result}')

def main():
root = tk.Tk()
app = EncryptionGUI(root)
root.mainloop()
if __name__ == '__main__':
main()

完整了,很不错!

接下来我们主要关注的函数是encrypt_file

image-20250516003502242

1
iv_encrypted_data

T3

密钥派生过程中使用了几个算法步骤。其中一个函数使用了与其实际功能不符的名称。找出这个函数名并提交?[标准格式:函数名]

image-20250516182239493

这个函数是对密钥进行一些混淆,但是这个 mixed_base 变量根本就没用到,相当于直接把下面的 actual_key 当成了密钥,符合题目描述。

1
_descramble_key

T4

程序中实现了一个故意减慢加密过程的机制,延迟值是多少?[标准格式:1.1]

T5

程序中隐藏了一个版本标识符,请找出版本号?[标准格式:v1.1.1]

exe

T1

分析Windows木马,其控制端ip是?

image-20250510171728680

1
104.18.45.79

T2

软件会复制自身到哪个文件夹下?

image-20250516191134309

1
SubDir

T3

接上题,复制后软件名称是?

1
BwAcr.exe

T4

软件一共可以窃取多少种浏览器的信息?[标准格式:3]

image-20250516191825588

image-20250516192802166

全是乱码,找不到。

T5

软件查询安装的杀毒软件出错或异常会返回什么字符串?[标准格式:Apps]

image-20250516192827918

直接去github看源码

https://github.com/quasar/Quasar/blob/master/Quasar.Client/Helper/SystemHelper.cs

image-20250516192922240

IOT

T1

分析冰箱,请问智能冰箱的品牌?[标准格式:xiaomi]

image-20250516195931480

image-20250516201732332

1
Panasonic

T2

请问智能冰箱的型号?[标准格式:MiFridge2024]

image-20250516202126819

1
NR-E46CV1

T3

请找智能冰箱的uuid?[标准格式:34567890-12cd-efab-3456-789012cdefab]

image-20250516202329072

1
12345678-90AB-CDEF-1234-567890ABCDEF

T4

请问智能冰箱默认保存几张图片?[标准格式:1]

发现有明显的jpg文件头,直接搜即可

image-20250516202534128

T5

请问冰箱中已存的第一张图片上的内容是什么?[标准格式:满城尽带黄金甲]

我们在SmartFridge.bin中是有看到很多jpg文件头的特征的,尝试binwalk提取。

image-20250517143656943

以下为第一张照片

image

1
盘古石杯贾韦码

T6

请问冰箱中已存的第二张图片的名称是什么?[标准格式:123.jpg]

image-20250517144124116

1
face2.jpg

T7

请找冰箱中隐藏的内容?[标准格式:chuzixizipizi]

image-20250517144333093

我们在最后发现了一个特殊字符串

image-20250517144352228

1
pangushicup

T8

请找出冰箱中嫌疑人图片MD5值的后六位?[标准格式:1a2b3d]

嫌疑人是钟无声,那就是以下这张图片

image-20250517144544414

image-20250517144702487

1
882564

T9

请找出冰箱最后一次开门时间?[标准格式:10:11]

贾韦码资料.rar.enc,解压出来一个 face1.jpg 和 资料.docx,这个 face1.jpg 很明显和冰箱有关,就是冰箱保存的图片,这个文件的修改时间对应最后一次开门的时间。

image-20250517145109076

1
15:48

T10

默认图片的存储限制大小是多少?[标准格式:1KB]

两个图片之间的大小就是存储限制大小

image-20250517145231679

1
100KB

T11

分析video.E01,被修改的录像md5前5位是?[标准格式:1a2b3]

发现以下文件名格式比较鹤立鸡群,而且时间较短,我们看看。

image-20250517150258979

image-20250517150242991

发现最后几秒监控时间回退了3、4秒

1
ea7be