题目名称:VN_Lang

我真是受够了往misc里塞异形文字了,所以我决定自创VN文字,你能读懂吗?

本题所给的附件中,main.rs为源代码,请下载exe文件进行解题,flag在exe中。

两个附件,既然说flag在exe中,那么试试exe拖进010搜索vnctf,找到flag。

image-20250209113842529

VNCTF{VtF0s2jyjuuQtIy2uHhCxqAz8zH1usuhZ0e5CuinCEoI1}

题目名称:Echo Flowers

英语不好的114也想要学习区块链,于是通过自己编写的地址生成器生成了一个0x114514开头的地址助记词(默认路径m/44’/60’/0’/0/0),并将助记词导入首次搭载四曲柔边直屏,采用居中对称式的圆环镜头+金属质感小银边设计,并辅以拉丝工艺打造的金属质感中框,主打“超防水,超抗摔,超耐用”,号称“耐用战神”的OPPO A5 Pro上作为数字钱包。不幸的是,114忘记了这部手机上数字钱包的密码,同时丢失了助记词。你能帮助114找回他的数字钱包吗?

附件下载后文件夹里有一个ovf,用VMware打开(不出意外的话)就可以进入手机页面。

进入手机后可以看见主页面有一个软件即数字钱包。上拉可以看见便签,但是便签内没有存储密码or助记词的相关信息。由于是通过助记词导入的钱包,于是猜测或许输入法会有线索。

image-20250209114805933

贴一个助记词。

image-20250209124516018

在便签尝试了a-z的首字母之后发现只能得到一部分而且不确定顺序。

image-20250209115525988

这时候想到去数据里面掏一掏,于是对输入法进行取证。

用DiskGenius挂载vmdk:

image-20250209125856784

一路走到/data/data/com.sohu.inputmethod.sogouoem

image-20250209130244484

然后开始对这个文件夹里的文件暴风查看,发现什么都找不到,不是乱码就是没用的东西(x)

重新看这些文件,注意到/file里面有两个dict文件夹,复制下来到桌面,重新开始一个个查看,试图利用转换编码解密。在/file/dict内有一个sgim_gd_usr.bin,用Notepad打开它并将它转换成utf-16编码,就可以看到所有的助记词及顺序。

image-20250209131234842

然后让gpt生成一个用助记词搓密钥的脚本即可。

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
import bip32utils
from mnemonic import Mnemonic
from ecdsa import SigningKey, SECP256k1
from Crypto.Hash import SHA3_256

# 假设你的助记词是
mnemonic_phrase = "ranch only space define laundry carpet muscle ramp high twenty couch fashion"

# 1. 使用 mnemonic 库从助记词生成种子
mnemo = Mnemonic("english")
seed = mnemo.to_seed(mnemonic_phrase, passphrase="")

# 2. 使用种子生成根私钥
root_private_key = bip32utils.BIP32Key.fromEntropy(seed)

# 3. 使用路径 'm/44'/60'/0'/0/0' 派生出特定私钥
# 注意:硬化路径是通过加上 0x80000000 来实现的
hardened = 0x80000000

private_key = root_private_key.ChildKey(44 + hardened).ChildKey(60 + hardened).ChildKey(0 + hardened).ChildKey(0).ChildKey(0).PrivateKey()

# 4. 使用私钥生成公钥
sk = SigningKey.from_string(private_key, curve=SECP256k1)
public_key = sk.get_verifying_key().to_string()

# 5. 使用 pycryptodome 的 SHA3_256 来计算 Keccak-256 哈希
keccak = SHA3_256.new()
keccak.update(public_key)
address = keccak.digest()[-20:] # 取最后 20 字节
eth_address = '0x' + address.hex()

# 输出私钥和以太坊地址
print("Private Key:", private_key.hex())
print("Ethereum Address:", eth_address)


image-20250209131510073

VNCTF{6433c196bb66b0d8ce3aa072d794822fd87edfbc3a30e2f2335a3fb437eb3cda}

题目名称:ezSignal

你也热爱信号吗?

下载得到附件后用7zip解压可以解压出另一个文件。

image-20250209132237164

png下面藏了一个压缩包,用binwalk提取得到flag1.txt和flag2.txt。

没有后缀名的文件拖到010里,复制一部分内容喂给chatgpt可以得知是grc文件。于是用gnuradio打开。

image-20250209132412217

打开得到如下的流程图:

image-20250209132608499

可以看出我们应该要逆回flag.wav,exp如下:

image-20250209132714971

打开得到的wav,可以猜出是sstv,于是用RX-SSTV得到一个二维码。

2025-02-09_05.13.07

不知道为什么有点扭曲,修一下。

2025-02-09_05.13.07

扫码即可得到flag。

VNCTF{W0w_Y0u_Ar3_G0od_4t_R4di0_S1gn4L}