2026第四届“盘古石杯“晋级赛 手机取证 手搓复盘(write up)
手机取证
1. 分析黄志远phone.E01检材,黄志远手机总共安装了多少款短视频应用?[答案格式:1]
apk 分析里面,4 个。当时把 b 站也算上了

2. 分析黄志远phone.E01检材,黄志远手机安装的龙虾应用的包名是什么?[答案格式:com.xxx.ui]
很明显就是这个gptos.intelligence.assistant

3. 接上题,首次打开应用的时间是?[答案格式:2021-01-11-01:11:44]
这个很熟悉了,直接搜索包名,选择 data 目录下的,shared_prefs 文件,里面可以找到

时间戳转化一下1776397998058
2026-04-17-11:53:18
但是我的 ai 跑错了,不该丢的分
4. 分析黄志远phone.E01检材,黄志远使用此应用攻击过多少台主机?[答案格式:1]
查看包名目录下的文件

挨个翻看并没有发现任何 ip 或者攻击记录等等,所以答案是 0
当时真没想到,ai 抽风了找了不知道从哪里来的俩 ip,交了个 2
5. 分析黄志远phone.E01检材,黄志远使用哪款应用控制了其PC的agent工具[答案格式:wechat]
火眼分析出来的这个 discord,查看一下,应该就是

6. 分析黄志远phone.E01检材,黄志远使用这款应用的版本是多少?[答案格式:111.1]
在 apk 分析里面找一下
311.2,我当时写的 311.20 错了,很可惜

7. 分析黄志远phone.E01检材,接上题,登录的用户名是什么?[答案格式:wwww1234]
test901234

8. 分析黄志远phone.E01检材,该应用与pc端agent的配对码是什么?[答案格式:ABC456]
依旧找到 data 目录下的文件,翻一翻

在这里找到了聊天记录

隐藏其他列,复制一下,内容太多。尝试搜索一下 code
第一个搜到的就是 here's your pairing 3EXEQ5R8

9. 分析黄志远phone.E01检材,该应用共对几个ip进行扫描?[答案格式:5]
这个继续在聊天记录里面,先搜索扫描二字,192.168.1.16 192.1681.10,找到了两个
但是bot 始终处于 未配对 / 未执行命令 的状态
后续 bot 只是在 枚举自身命令源码,没有真正跑 nmap或返回端口信息
因此目前还没有完成任何一次有效扫描
![]()
![]()
扫描的 IP 只有一个:192.168.61.135

从这行命令可以确认(标准的 Kali 渗透测试端口扫描行为)
terminal: "nmap -sS -sV -sC -O -p- -T4 192.168.6..."
10. 分析黄志远phone.E01检材,该应用总共调用了几个暴力破解工具?[答案格式:[1]
两个(都在终端执行的记录这里 )
hydra 爆破密码

Gobuster 目录暴力枚举

11. 分析黄志远phone.E01检材,黄志远使用其内部通联工具进行沟通,其账号的登陆密码是多少? [答案格式:123456]
内部通联工具应该是这个 social_chat_app,因为很多人手机上都有这个,名字也像是

这个题目,先去看了看相关的数据库文件,发现是加密的

shared_prefs 里面有类似数据库的密码,但是不对
Pgs-dbw1776839203359Good


看了其他人手机的检材,偶然看到了这个
仿照格式 s-dbw1776839203359Goo,拿这个试一试成功进去了,可能证明其他人的数据库密码也是这样的

可以看到信息是加密了

这里有用户 id :usr_heiked
密码 hash :fc29eb768c139c05c0bfcb697d9b26d194878a66451b3ab91b202e9710874a63
盐值:a3f8d9c2e1b4h7g6k9m2n5p8q1r4t7w
![]()
密码就需要爆破了。这里我看格式是纯数字,遵循着由简入难的原则,先试一试 6、7、8 位纯数字
让 ai 写一个脚本,尝试不同哈希拼接方式。
import hashlib
import sys
import time
TARGET_HASH = "fc29eb768c139c05c0bfcb697d9b26d194878a66451b3ab91b202e9710874a63"
SALT = "a3f8d9c2e1b4h7g6k9m2n5p8q1r4t7w"
def h(data: bytes) -> str:
return hashlib.sha256(data).hexdigest()
def d(data: bytes) -> bytes:
return hashlib.sha256(data).digest()
strategies = [
("SHA256(pwd+salt)", lambda p: h(p.encode() + SALT.encode())),
("SHA256(salt+pwd)", lambda p: h(SALT.encode() + p.encode())),
("SHA256(pwd)", lambda p: h(p.encode())),
("SHA256(hex SHA256(pwd+salt))", lambda p: h(h(p.encode()+SALT.encode()).encode())),
("SHA256(raw SHA256(pwd+salt))", lambda p: h(d(p.encode()+SALT.encode()))),
("SHA256(hex SHA256(salt+pwd))", lambda p: h(h(SALT.encode()+p.encode()).encode())),
("SHA256(raw SHA256(salt+pwd))", lambda p: h(d(SALT.encode()+p.encode()))),
("MD5(pwd+salt)", lambda p: hashlib.md5(p.encode()+SALT.encode()).hexdigest()),
("MD5(salt+pwd)", lambda p: hashlib.md5(SALT.encode()+p.encode()).hexdigest()),
]
total_checked = 0
start_time = time.time()
# 从1位到8位依次尝试
digit_lengths = [
(1, 10), # 0-9
(2, 100), # 00-99
(3, 1000), # 000-999
(4, 10000), # 0000-9999
(5, 100000), # 00000-99999
]
# 已尝试过6位,跳过
digit_lengths.extend([
(7, 10_000_000), # 0000000-9999999
])
for digits, total in digit_lengths:
print(f"\n[*] 正在尝试 {digits} 位数字密码 (0~{10**digits-1})...")
for pwd_int in range(total):
password = f"{pwd_int:0{digits}d}"
for name, hash_func in strategies:
if hash_func(password) == TARGET_HASH:
elapsed = time.time() - start_time
print(f"\n[+] 找到密码!")
print(f"[+] 策略: {name}")
print(f"[+] 密码: {password}")
print(f"[+] 耗时: {elapsed:.2f}秒")
sys.exit(0)
total_checked += 1
if total_checked % 500000 == 0:
elapsed = time.time() - start_time
rate = total_checked / elapsed
print(f" 进度: {total_checked:,} 次, 耗时 {elapsed:.0f}秒, 速度 {rate:.0f} 次/秒", end="\r")
sys.stdout.flush()
print(f"\n[-] 1-7位数字密码穷举完成,共 {total_checked:,} 次尝试,未找到匹配密码")
# 尝试8位数字
print(f"\n[*] 正在尝试 8 位数字密码...")
for pwd_int in range(100_000_000):
password = f"{pwd_int:08d}"
for name, hash_func in strategies:
if hash_func(password) == TARGET_HASH:
elapsed = time.time() - start_time
print(f"\n[+] 找到密码!")
print(f"[+] 策略: {name}")
print(f"[+] 密码: {password}")
print(f"[+] 耗时: {elapsed:.2f}秒")
sys.exit(0)
total_checked += 1
if total_checked % 500000 == 0:
elapsed = time.time() - start_time
rate = total_checked / elapsed
print(f" 进度: {total_checked:,} 次, 耗时 {elapsed:.0f}秒, 速度 {rate:.0f} 次/秒", end="\r")
sys.stdout.flush()
elapsed = time.time() - start_time
print(f"\n[-] 全部穷举完成,共 {total_checked:,} 次尝试,耗时 {elapsed:.0f}秒,未找到匹配密码")
08164085
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)