0


记录一次从exe到python源码

找到要解析源码的exe,用7zip解压出来,可以看到打包前的目录(这里并不是所有的exe都可以)。
如下图所示,由于这个是一个前后端打包的exe,这里的server是后端的服务,resources是前端,这里可以通过使用这个软件发现是一个前后端都在本地,通过网络鉴权的方式登录的。这里我是要绕过这个软件的登录
在这里插入图片描述

前端

asar是前端框架打包的,参考这里进行解压,解压后就得到前端的代码,当然打包后的一些文件名是经过重命名的。前期一直在尝试修改前端进行绕过,但是最终没成功。
在这里插入图片描述
app目录
在这里插入图片描述

后端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面是部分后端目录的文件,后端是python写的,这些文件都是一些开源的东西,我要修改的地方不在这里面,在这个最大的exe文件里面
在这里插入图片描述
通过这个进行解压python打包exe文件注意要用同一版本的python才行,不同版本的话,PYZ-00.pyz_extracted文件夹会为空,如果不知道使用什么版本的话,可以先用其他的版本解包,解完之后,在里面找到struct.pyc文件,用winhex打开,查看头部找到对应的版本,然后再用对应版本进行解开
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
PYZ-00.pyz_extracted目录是重点,但是上面这个图出现了probably encrypted ,说明并没有解压成功,说明是通过加密的。

但是我发现这个crypto_key.pyc文件,把这个pyc转成py,参考这里
在这里插入图片描述
得到key,然后参考、参考2
在这里插入图片描述
通过下面这个脚本进行解密,修改对应的路径和秘钥,就可以解出对应的pyc文件

import glob
import zlib
import tinyaes
from pathlib import Path

CRYPT_BLOCK_SIZE =16# key obtained from pyimod00_crypto_key
key =bytes('CYNLlJe5RycAPXED','utf-8')for p in Path("path").glob("**/*.pyc.encrypted"):
    inf =open(p,'rb')# encrypted file input
    outf =open(p.with_name(p.stem),'wb')# output file# Initialization vector
    iv = inf.read(CRYPT_BLOCK_SIZE)

    cipher = tinyaes.AES(key, iv)# Decrypt and decompress
    plaintext = zlib.decompress(cipher.CTR_xcrypt_buffer(inf.read()))# Write pyc header# The header below is for Python 3.8
    outf.write(b'\x55\x0d\x0d\x0a\0\0\0\0\0\0\0\0\0\0\0\0')# Write decrypted data
    outf.write(plaintext)

    inf.close()
    outf.close()# Delete .pyc.encrypted file
    p.unlink()

在这里插入图片描述
在这里插入图片描述

然后再用decompile3、pycdc、uncompyle6将pyc转成py文件,就可以得到对应的源码,进行修改了。

标签: 安全 python

本文转载自: https://blog.csdn.net/qq_40965177/article/details/130546904
版权归原作者 cmzz 所有, 如有侵权,请联系我们删除。

“记录一次从exe到python源码”的评论:

还没有评论