前言
实战可以大大提高自己,学习技术的目的就是能够在实战中运用。
本次实战与实际息息相关,该软件具有加密某文件的功能。
界面还挺好看的,功能很简单,输入文件和PIN(4位)进加解密。
这是被加密的文件
需要将其进行解密,拿到flag
思路
因为PIN是4位,因此可以写一个python脚本,对其进行爆破。
关键在于得出加密的算法,此时就需要我们进行逆向分析了
分析
先尝试进行加密
根据关键词:encrypted 进行定位
发现是我们需要的信息
跟踪进去,发现了花指令
去花指令
发现堆栈不平衡,将所有代码选中,然后C键,重新分析
发现了单指令花指令,无非nop掉即可
从头选到下一个函数开始的位置
按下C键
analyze即可
还是rust编译的
此时就可以分析函数了。处理其他函数也是相同的道理
【---- 帮助网安学习,以下所有学习资料免费领!领取资料加 we~@x:dctintin,备注 “开源中国” 获取!】
① 网安学习成长路径思维导图
② 60 + 网安经典常用工具包
③ 100+SRC 漏洞分析报告
④ 150 + 网安攻防实战技术电子书
⑤ 最权威 CISSP 认证考试指南 + 题库
⑥ 超 1800 页 CTF 实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP 客户端安全检测指南(安卓 + IOS)
初步分析
使用Fincrypto发现了salsa20加密
salsa20:32位字符构成的key,二是随机生成的8位nonce。算法使用key和nonce生成一个2^70长度的序列,并与明文进行异或加密
sub_140073A70
发现main_func就是获取我们的输入的文件内容
sub_140039890
而函数sub_140039890才是关键的加密函数
0x61707865、0x3320646E均为Salsa20算法的固定参数
解密
由于密码只有0000~9999这10000种可能
加密后文件名又是flag.png.enc,所以原文件是个png文件
使用png固有文件头89504E47来判断解密是否成功
Python from Cryptodome.Cipher import Salsa20 cipher = open("flag.png.enc", "rb").read() for i in range(10000): key = str(i).rjust(4, '0').ljust(32, 'x00') nonce = b'x24x24x24x24x24x24x24x24' sal = Salsa20.new(key=key, nonce=nonce) plain = sal.decrypt(cipher) if plain.find(b"x89x50x4Ex47")>=0: open("flag.png", "wb").write(plain) break