找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1163

积分

0

好友

163

主题
发表于 3 天前 | 查看: 7| 回复: 0

本次实战通过逆向分析一款使用4位PIN码的文件加密工具,深入解析其Salsa20算法的加密逻辑,并最终编写Python脚本完成PIN码的暴力破解,成功恢复原始文件。

被加密的文件flag.png.enc是一个经加密的PNG图像文件,目标是通过逆向获取加密算法并爆破PIN码进行解密,还原出原始的flag.png

逆向分析思路

由于PIN码仅为4位数字(0000-9999),因此暴力破解是可行的。关键在于通过逆向分析,确定加密算法和密钥生成方式,从而编写有效的解密脚本。

逆向分析过程

首先尝试使用工具进行一次文件加密操作,观察其行为。随后使用逆向分析工具进行静态分析。

1. 定位关键函数

在反汇编代码中,根据字符串“encrypted”进行交叉引用,可以快速定位到与文件加密处理相关的核心函数区域。

2. 处理花指令

在分析关键函数时,遇到了花指令,导致代码流分析异常。通过IDA Pro手动识别并修复堆栈不平衡的问题。具体操作为:选中被混淆的代码块,按下C键将其重新定义为代码,并进行重新分析。对于简单的单指令花指令,通常使用nop指令填充即可。

分析后发现,程序由Rust语言编译而成,处理其他相关函数时也采用了相同的方法去除干扰。

3. 核心算法分析

经过清理后,可以对主逻辑函数进行分析。在主函数(main_func)附近,确认了其功能是获取用户输入的文件内容。
真正的加密逻辑位于另一个函数(sub_140039890)中。在该函数内部,发现了对Findcrypto函数的调用,并识别出核心加密算法为Salsa20

Salsa20是一种流密码,加密时需要32字节的密钥(key)和8字节的随机数(nonce)。算法使用密钥和随机数生成一个伪随机密钥流,然后与明文进行异或操作。
在加密函数的初始化部分,观察到了如0x617078650x3320646E等常量的加载,这些是Salsa20算法内部状态的固定常数,进一步确认了算法类型。

解密脚本编写

基于逆向分析结论:

  1. 加密算法:Salsa20。
  2. Key:由4位数字PIN码补齐至32字节(如“1234”补齐为1234\x00\x00...)。
  3. Nonce:分析内存或逻辑后确定为固定值b'\x24\x24\x24\x24\x24\x24\x24\x24'
  4. 原始文件为PNG格式,其固定文件头为\x89\x50\x4E\x47

可以编写Python脚本进行爆破。脚本遍历0000至9999的所有PIN码,用其生成密钥,尝试解密flag.png.enc文件,并用PNG文件头验证解密是否成功。

from Cryptodome.Cipher import Salsa20

cipher_data = open("flag.png.enc", "rb").read()

for i in range(10000):
    # 将PIN码格式化为4位字符串,并补齐为32字节作为Salsa20密钥
    key = str(i).rjust(4, '0').ljust(32, '\x00')
    nonce = b'\x24\x24\x24\x24\x24\x24\x24\x24'
    sal = Salsa20.new(key=key.encode(), nonce=nonce)
    plain_data = sal.decrypt(cipher_data)

    # 通过判断PNG文件头验证解密成功
    if plain_data.find(b"\x89\x50\x4E\x47") >= 0:
        open("flag.png", "wb").write(plain_data)
        print(f"[+] Success! PIN is: {str(i).rjust(4, '0')}")
        break

运行脚本后,即可成功爆破出正确的PIN码,并得到解密后的flag.png文件。本实战结合了静态逆向分析与脚本编写,完整展示了针对简单文件加密工具的破解流程。




上一篇:Ubuntu 24.04服务器PXE自动化部署实战:实现无人值守安装与运维
下一篇:NDK27无侵入集成LLVM Pass:Windows下插件编译与OLLVM混淆实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 18:48 , Processed in 0.174079 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表