IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    【实战】文件加密器进行逆向

    dingjiacan@antvsion.com发表于 2024-12-31 06:35:41
    love 0

    前言

    实战可以大大提高自己,学习技术的目的就是能够在实战中运用。

    本次实战与实际息息相关,该软件具有加密某文件的功能。

    界面还挺好看的,功能很简单,输入文件和PIN(4位)进加解密。

    这是被加密的文件

    需要将其进行解密,拿到flag

    思路

    因为PIN是4位,因此可以写一个python脚本,对其进行爆破。

    关键在于得出加密的算法,此时就需要我们进行逆向分析了

    分析

    先尝试进行加密

    根据关键词:encrypted 进行定位

    发现是我们需要的信息

    跟踪进去,发现了花指令

    去花指令

    发现堆栈不平衡,将所有代码选中,然后C键,重新分析

    发现了单指令花指令,无非nop掉即可

    从头选到下一个函数开始的位置

    按下C键

    analyze即可

    还是rust编译的

    此时就可以分析函数了。处理其他函数也是相同的道理



    初步分析

    使用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

      



沪ICP备19023445号-2号
友情链接