精华内容
下载资源
问答
  • python反编译exe

    2019-11-26 17:11:03
    2.下载完成后将pyinstxtractor.py和将要反编译exe放在同一文件夹下。直接cmd进去该路径,然后输入 python pyinstxtractor.py XX.exe 执行完成后,在该文件夹里会出现XX.exe_extracted文件夹。 3.打开XX.exe_...

    将python打包的.exe文件还原成.py

    1.首先下载  pyinstxtractor.py

    2.下载完成后将pyinstxtractor.py和将要反编译的exe放在同一文件夹下。直接cmd进去该路径,然后输入 python pyinstxtractor.py XX.exe  执行完成后,在该文件夹里会出现XX.exe_extracted文件夹。

    3.打开XX.exe_extracted文件夹,找到PYZ-00.pyz_extracted(有可能是其他名字,但是后缀也是.pyz_extracted)打开问价夹,你会发现该文件夹中都是.pyc文件。

    4.pip install uncompyle(如果下载失败,执行pip install uncompyle6)。注意:如果你执行pip install uncompyle 可以下载成功,当你下载完成后,要看一下你下载的版本号,因为我们下一步会用到。

    5.cmd进入PYZ-00.pyz_extracted,这里需要你第四步下载的ubcompyle版本。如果你和博主下载的版本号一致,那么直接输入

    uncompyle6 XX.pyc > XX.py ,这里如果你下载的版本不是uncompyle6的话,执行是失败的。 如果成功你会发现当前文件夹中已经有生成XX.py了。

    展开全文
  • 主要介绍了python 反编译exe文件为py文件的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 之前记录了一个打包pythonexe的文章。现在根据实例将打包后的exe还原为python文件前提是打包的文件没有加密,还没有碰到过加密的exe的例子。0x01 解开exe使用pyinstxtractor.py从网上找下文件放到与exe同级目录下...

    webchat.jpg

    之前记录了一个打包python为exe的文章。现在根据实例将打包后的exe还原为python文件

    前提是打包的文件没有加密,还没有碰到过加密的exe的例子。

    0x01 解开exe

    使用pyinstxtractor.py从网上找下文件

    放到与exe同级目录下,方便使用。

    1python pyinstxtractor.py xxx.exe

    得到一个依照exe_extracted结尾的文件夹

    这里面会吧当时打包exe的python环境全部都显示出来。打包exe也是个技术活,若打包前python不是一个新的环境,可能会吧用不到的库也打包进去,打包一小文件几十兆那就不足为奇了。相对应的解压出来可能会有神马mysql numpy flask django等等用不到的内容。

    文件夹中存在PYZ-00.pyz_extracted文件夹,这个文件夹为真正python程序加载时候需要到python包,但是python程序与内置包一起编程了pyc格式的文件,同时存在上千个这这样的文件。

    0x02 解pyc文件

    一款在线查看pyc工具

    将pyc文件上传到网站就能出啦结果。但这是一件麻烦的事情。

    可以使用pythonuncompyle进行批量解

    1pip install uncompyle

    安装好后,注意执行的命令为uncompyle6,而不是uncompyle。

    查看帮助命令:uncompyle6 –help、uncompyle6 -h

    反编译单个文件 :uncompyle6 foo.pyc > foo.py

    反编译多个文件:uncompyle6 -o . *.pyc

    像一般的人开发的文件,一个文件很少有20Kb以上的文件,所以文件夹中像600Kb的文件基本上可以断定为内置文件包了。不必解。

    或者写一个例子 。在我没看到文档之前写的。垃圾!

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21import os

    import sys

    def main(path):

    for root ,dirs,files in os.walk(path):

    print(root)

    for file in files:

    fileName,oldflag = os.path.splitext(file)

    if oldflag==".pyc":

    old_file = os.path.join(root,file)

    new_file =os.path.join(root,'new',fileName+'.py')

    command = "D://virenv//35python35//Scripts//uncompyle6.exe "+ old_file + " > " + new_file

    os.system(command)

    print(old_file)

    print(new_file)

    if __name__ == '__main__':

    path =r'E:PYZ-00.pyz_extracted'

    main(path)

    然后将pyc转成py文件之后还有成千上百的文件该怎么办?就要进行过滤

    0x03 过滤

    分析解出的py文件的格式,发现内置文件为site-page第四行 ,程序员写的文件不存在这个标志。写个脚本过滤

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17import os

    import linecache

    root = "E:\new"

    for dirpath, dirnames, filenames in os.walk(root):

    for filepath in filenames:

    file_name = os.path.join(dirpath, filepath)

    try:

    content=linecache.getline(file_name,4,module_globals='gbk').strip()

    if 'site-page'in content:

    os.remove(file_name)

    except Exception as e:

    print('出错',file_name)

    过滤的过程中会提示我说有些文档不能gbk?后来想了想大概是程序员在程序中写了中文注释才不会编码错误吧。

    第一遍过滤之后文件数减少了不少。但是还没有得到源文件。我们再过滤一遍。查看剩下的文件的内容。这里有个技巧。

    一般程序员会在使用pycharm的过程加上自己的标志如

    1

    2

    3

    4

    5

    6

    7"""

    Created on 201xxx10:59 PM

    ---------

    @summary:

    ---------

    @author:

    """

    这种方式又提供了更好的过滤标志

    继续改上面的过滤脚本。找到对应行中对应的关键字清洗。

    这样的话文件差不多了。

    0x04 还原

    如果程序员写的不是单个文件,而是写成自己的包。如

    1

    2

    3定义一个db文件中的mysqldb的py文件

    from db import mysqldb

    这种情况解出来的文件格式便为db.mysqldb.py

    现在所有的文件都在同一级目录下,不能将程序正常运行。

    所以继续写脚本。分割文件名,得到目录。还原文件的路径格式。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14E:.

    config.py

    core.capture_packet.py

    core.data_pipeline.py

    core.deal_data.py

    core.task_manager.py

    create_tables.py

    db.mysqldb.py

    db.redisdb.py

    utils.log.py

    utils.prpcrypt.py

    utils.selector.py

    utils.tools.py

    verify.py

    还原程序为

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25E:.

    │ config.py

    │ config.yaml

    │ create_tables.py

    │ verify.py

    ├─core

    │ capture_packet.py

    │ data_pipeline.py

    │ deal_data.py

    │ task_manager.py

    │ __init__.py

    ├─db

    │ │ mysqldb.py

    │ │ redisdb.py

    │ │ __init__.py

    ├─utils

    │ │ log.py

    │ │ prpcrypt.py

    │ │ selector.py

    │ │ tools.py

    │ │ __init__.py

    0x05 后续

    一般一些python被打包的exe程序,会有三种情况,

    一、程序的质量比较好,不想被广泛传播,带有少量性质的商业化。同时里面包含一些加密、认证的函数或与服务器有交互。但拿到源码验证的部分可以做一些事情,如:域名服务器的就修改本地host,自己写个接口。加解密的就看能不能反向。一般会与用户的mac地址有关。

    二、程序中有见不得人的东西。向后台服务器发送一些奇奇怪怪的东西,如窃取运行电脑本地某些程序的文档发送给服务器。

    三、菜鸟练手,我就想打包个程序玩玩,里面没东西。

    打完收工

    展开全文
  • python 反编译exe

    2020-06-05 15:13:45
    https://blog.csdn.net/weixin_44156816/article/details/100984442
    展开全文
  • 环境python 3.6 准备工具 uncompyle6 pip pyinstaller 1、下载 pyinstxtractor.py ...________________________________________ ...python2 pyinstxtractor.py xx.exe • 1 运行后生成xx.exe_extracted文件夹。
  • 我们用pyinstaller把朋友文件打包成exe文件,但有时候我们需要还原,我们可以用pyinstxtractor.py用法:python pyinstxtractor.py xxx.exe之后得到一个这样结构的文件夹--- xxx.exe_extracted-- out00-PYZ.pyz_...

    我们用pyinstaller把朋友文件打包成exe文件,但有时候我们需要还原,我们可以用pyinstxtractor.py

    用法:

    python pyinstxtractor.py xxx.exe

    之后得到一个这样结构的文件夹

    --- xxx.exe_extracted

    -- out00-PYZ.pyz_extracted

    - 各种.pyc文件

    -- out00-PYZ.pyz

    -- some

    -- others

    -- xxx(注意这些都是没后缀的)

    然后再终端pip install uncompyle安装uncompyle,

    然后就可以使用啦

    uncompyle6 input.pyc > output.py

    把pyc文件转换为py文件,希望对大家有帮助

    最后贴上pyinstxtractor.py的代码

    """

    PyInstaller Extractor v1.9 (Supports pyinstaller 3.3, 3.2, 3.1, 3.0, 2.1, 2.0)

    Author : Extreme Coders

    E-mail : extremecoders(at)hotmail(dot)com

    Web : https://0xec.blogspot.com

    Date : 29-November-2017

    Url : https://sourceforge.net/projects/pyinstallerextractor/

    For any suggestions, leave a comment on

    https://forum.tuts4you.com/topic/34455-pyinstaller-extractor/

    This script extracts a pyinstaller generated executable file.

    Pyinstaller installation is not needed. The script has it all.

    For best results, it is recommended to run this script in the

    same version of python as was used to create the executable.

    This is just to prevent unmarshalling errors(if any) while

    extracting the PYZ archive.

    Usage : Just copy this script to the directory where your exe resides

    and run the script with the exe file name as a parameter

    C:\path\to\exe\>python pyinstxtractor.py

    $ /path/to/exe/python pyinstxtractor.py

    Licensed under GNU General Public License (GPL) v3.

    You are free to modify this source.

    CHANGELOG

    ================================================

    Version 1.1 (Jan 28, 2014)

    -------------------------------------------------

    - First Release

    - Supports only pyinstaller 2.0

    Version 1.2 (Sept 12, 2015)

    -------------------------------------------------

    - Added support for pyinstaller 2.1 and 3.0 dev

    - Cleaned up code

    - Script is now more verbose

    - Executable extracted within a dedicated sub-directory

    (Support for pyinstaller 3.0 dev is experimental)

    Version 1.3 (Dec 12, 2015)

    -------------------------------------------------

    - Added support for pyinstaller 3.0 final

    - Script is compatible with both python 2.x & 3.x (Thanks to Moritz Kroll @ Avira Operations GmbH & Co. KG)

    Version 1.4 (Jan 19, 2016)

    -------------------------------------------------

    - Fixed a bug when writing pyc files >= version 3.3 (Thanks to Daniello Alto: https://github.com/Djamana)

    Version 1.5 (March 1, 2016)

    -------------------------------------------------

    - Added support for pyinstaller 3.1 (Thanks to Berwyn Hoyt for reporting)

    Version 1.6 (Sept 5, 2016)

    -------------------------------------------------

    - Added support for pyinstaller 3.2

    - Extractor will use a random name while extracting unnamed files.

    - For encrypted pyz archives it will dump the contents as is. Previously, the tool would fail.

    Version 1.7 (March 13, 2017)

    -------------------------------------------------

    - Made the script compatible with python 2.6 (Thanks to Ross for reporting)

    Version 1.8 (April 28, 2017)

    -------------------------------------------------

    - Support for sub-directories in .pyz files (Thanks to Moritz Kroll @ Avira Operations GmbH & Co. KG)

    Version 1.9 (November 29, 2017)

    -------------------------------------------------

    - Added support for pyinstaller 3.3

    - Display the scripts which are run at entry (Thanks to Michael Gillespie @ malwarehunterteam for the feature request)

    """

    from __future__ import print_function

    import os

    import struct

    import marshal

    import zlib

    import sys

    import imp

    import types

    from uuid import uuid4 as uniquename

    class CTOCEntry:

    def __init__(self, position, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData, name):

    self.position = position

    self.cmprsdDataSize = cmprsdDataSize

    self.uncmprsdDataSize = uncmprsdDataSize

    self.cmprsFlag = cmprsFlag

    self.typeCmprsData = typeCmprsData

    self.name = name

    class PyInstArchive:

    PYINST20_COOKIE_SIZE = 24 # For pyinstaller 2.0

    PYINST21_COOKIE_SIZE = 24 + 64 # For pyinstaller 2.1+

    MAGIC = b'MEI\014\013\012\013\016' # Magic number which identifies pyinstaller

    def __init__(self, path):

    self.filePath = path

    def open(self):

    try:

    self.fPtr = open(self.filePath, 'rb')

    self.fileSize = os.stat(self.filePath).st_size

    except:

    print('[*] Error: Could not open {0}'.format(self.filePath))

    return False

    return True

    def close(self):

    try:

    self.fPtr.close()

    except:

    pass

    def checkFile(self):

    print('[*] Processing {0}'.format(self.filePath))

    # Check if it is a 2.0 archive

    self.fPtr.seek(self.fileSize - self.PYINST20_COOKIE_SIZE, os.SEEK_SET)

    magicFromFile = self.fPtr.read(len(self.MAGIC))

    if magicFromFile == self.MAGIC:

    self.pyinstVer = 20 # pyinstaller 2.0

    print('[*] Pyinstaller version: 2.0')

    return True

    # Check for pyinstaller 2.1+ before bailing out

    self.fPtr.seek(self.fileSize - self.PYINST21_COOKIE_SIZE, os.SEEK_SET)

    magicFromFile = self.fPtr.read(len(self.MAGIC))

    if magicFromFile == self.MAGIC:

    print('[*] Pyinstaller version: 2.1+')

    self.pyinstVer = 21 # pyinstaller 2.1+

    return True

    print('[*] Error : Unsupported pyinstaller version or not a pyinstaller archive')

    return False

    def getCArchiveInfo(self):

    try:

    if self.pyinstVer == 20:

    self.fPtr.seek(self.fileSize - self.PYINST20_COOKIE_SIZE, os.SEEK_SET)

    # Read CArchive cookie

    (magic, lengthofPackage, toc, tocLen, self.pyver) = \

    struct.unpack('!8siiii', self.fPtr.read(self.PYINST20_COOKIE_SIZE))

    elif self.pyinstVer == 21:

    self.fPtr.seek(self.fileSize - self.PYINST21_COOKIE_SIZE, os.SEEK_SET)

    # Read CArchive cookie

    (magic, lengthofPackage, toc, tocLen, self.pyver, pylibname) = \

    struct.unpack('!8siiii64s', self.fPtr.read(self.PYINST21_COOKIE_SIZE))

    except:

    print('[*] Error : The file is not a pyinstaller archive')

    return False

    print('[*] Python version: {0}'.format(self.pyver))

    # Overlay is the data appended at the end of the PE

    self.overlaySize = lengthofPackage

    self.overlayPos = self.fileSize - self.overlaySize

    self.tableOfContentsPos = self.overlayPos + toc

    self.tableOfContentsSize = tocLen

    print('[*] Length of package: {0} bytes'.format(self.overlaySize))

    return True

    def parseTOC(self):

    # Go to the table of contents

    self.fPtr.seek(self.tableOfContentsPos, os.SEEK_SET)

    self.tocList = []

    parsedLen = 0

    # Parse table of contents

    while parsedLen < self.tableOfContentsSize:

    (entrySize, ) = struct.unpack('!i', self.fPtr.read(4))

    nameLen = struct.calcsize('!iiiiBc')

    (entryPos, cmprsdDataSize, uncmprsdDataSize, cmprsFlag, typeCmprsData, name) = \

    struct.unpack( \

    '!iiiBc{0}s'.format(entrySize - nameLen), \

    self.fPtr.read(entrySize - 4))

    name = name.decode('utf-8').rstrip('\0')

    if len(name) == 0:

    name = str(uniquename())

    print('[!] Warning: Found an unamed file in CArchive. Using random name {0}'.format(name))

    self.tocList.append( \

    CTOCEntry( \

    self.overlayPos + entryPos, \

    cmprsdDataSize, \

    uncmprsdDataSize, \

    cmprsFlag, \

    typeCmprsData, \

    name \

    ))

    parsedLen += entrySize

    print('[*] Found {0} files in CArchive'.format(len(self.tocList)))

    def extractFiles(self):

    print('[*] Beginning extraction...please standby')

    extractionDir = os.path.join(os.getcwd(), os.path.basename(self.filePath) + '_extracted')

    if not os.path.exists(extractionDir):

    os.mkdir(extractionDir)

    os.chdir(extractionDir)

    for entry in self.tocList:

    basePath = os.path.dirname(entry.name)

    if basePath != '':

    # Check if path exists, create if not

    if not os.path.exists(basePath):

    os.makedirs(basePath)

    self.fPtr.seek(entry.position, os.SEEK_SET)

    data = self.fPtr.read(entry.cmprsdDataSize)

    if entry.cmprsFlag == 1:

    data = zlib.decompress(data)

    # Malware may tamper with the uncompressed size

    # Comment out the assertion in such a case

    assert len(data) == entry.uncmprsdDataSize # Sanity Check

    with open(entry.name, 'wb') as f:

    f.write(data)

    if entry.typeCmprsData == b's':

    print('[+] Possible entry point: {0}'.format(entry.name))

    elif entry.typeCmprsData == b'z' or entry.typeCmprsData == b'Z':

    self._extractPyz(entry.name)

    def _extractPyz(self, name):

    dirName = name + '_extracted'

    # Create a directory for the contents of the pyz

    if not os.path.exists(dirName):

    os.mkdir(dirName)

    with open(name, 'rb') as f:

    pyzMagic = f.read(4)

    assert pyzMagic == b'PYZ\0' # Sanity Check

    pycHeader = f.read(4) # Python magic value

    if imp.get_magic() != pycHeader:

    print('[!] Warning: The script is running in a different python version than the one used to build the executable')

    print(' Run this script in Python{0} to prevent extraction errors(if any) during unmarshalling'.format(self.pyver))

    (tocPosition, ) = struct.unpack('!i', f.read(4))

    f.seek(tocPosition, os.SEEK_SET)

    try:

    toc = marshal.load(f)

    except:

    print('[!] Unmarshalling FAILED. Cannot extract {0}. Extracting remaining files.'.format(name))

    return

    print('[*] Found {0} files in PYZ archive'.format(len(toc)))

    # From pyinstaller 3.1+ toc is a list of tuples

    if type(toc) == list:

    toc = dict(toc)

    for key in toc.keys():

    (ispkg, pos, length) = toc[key]

    f.seek(pos, os.SEEK_SET)

    fileName = key

    try:

    # for Python > 3.3 some keys are bytes object some are str object

    fileName = key.decode('utf-8')

    except:

    pass

    # Make sure destination directory exists, ensuring we keep inside dirName

    destName = os.path.join(dirName, fileName.replace("..", "__"))

    destDirName = os.path.dirname(destName)

    if not os.path.exists(destDirName):

    os.makedirs(destDirName)

    try:

    data = f.read(length)

    data = zlib.decompress(data)

    except:

    print('[!] Error: Failed to decompress {0}, probably encrypted. Extracting as is.'.format(fileName))

    open(destName + '.pyc.encrypted', 'wb').write(data)

    continue

    with open(destName + '.pyc', 'wb') as pycFile:

    pycFile.write(pycHeader) # Write pyc magic

    pycFile.write(b'\0' * 4) # Write timestamp

    if self.pyver >= 33:

    pycFile.write(b'\0' * 4) # Size parameter added in Python 3.3

    pycFile.write(data)

    def main():

    if len(sys.argv) < 2:

    print('[*] Usage: pyinstxtractor.py ')

    else:

    arch = PyInstArchive(sys.argv[1])

    if arch.open():

    if arch.checkFile():

    if arch.getCArchiveInfo():

    arch.parseTOC()

    arch.extractFiles()

    arch.close()

    print('[*] Successfully extracted pyinstaller archive: {0}'.format(sys.argv[1]))

    print('')

    print('You can now use a python decompiler on the pyc files within the extracted directory')

    return

    arch.close()

    if __name__ == '__main__':

    main()

    总结

    以上所述是小编给大家介绍的python 反编译exe文件为py文件的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

    展开全文
  • python 反编译exe文件为py文件

    万次阅读 热门讨论 2018-11-17 00:53:01
    我们用pyinstaller把朋友文件打包成exe文件,但有时候我们...python pyinstxtractor.py xxx.exe 之后得到一个这样结构的文件夹   --- xxx.exe_extracted -- out00-PYZ.pyz_extracted - 各种.pyc文件 -- out00...
  • python反编译成.py获得源码所需要的文件
  • 目录pythonexe反编译驱动人生样本为python打包的exe文件,尝试反编译为py文件。使用pyinstxtractor.py生成pyc文件。实际尝试发现,直接反编译会报错看到前面利用pyinstxtractor.py反编译的错误里有个提示“not a ...
  • python编写程序可以编译exe文件吗Windows下怎么把python脚本编译exe没找到py2exe 也不知道怎么用了 希望知道的能告诉下我目前至少有三种东西,可以把python封装成exe: py2exe PyInstaller cx_Freeze 建议你用...
  • python写的程序,转成了exe文件,怎么进行反编译为用pyinstaller,很容易就能实现,步骤如下:下载pyinstaller包,(小编可以安装包发给你),把pyinstaller解压到任意路径后1.开始->运行->cmd->回车2.把路径改为...
  • Usage : Just copy this script to the directory where your exe resides and run the script with the exe file name as a parameter C:\path\to\exe\>python pyinstxtractor.py $ /path/to/exe/python ...
  • 前言简单了解反编译,为保证自己python工程有一定的安全性,尝试反编译文件。目标Python exe -> pyc -> py环境windows 7python 3.7PyInstaller 3.5工具uncompyle6 3.6.4 ( 注:安装命令 pip install uncompyle)...
  • 先上个链接,基于python3的反编译python打包的exe文件的教程?https://blog.csdn.net/weixin_46847476/article/details/105358131故事开始于pyinstxtractor.py?反编译query.exe文件后不会直接生成query.py文件,是...
  • 序 ...二、反编译exe文件 三、防止反编译 正文 一、python如何打包成exe (常规打包方法) 1.1首先你要先把自己的程序写好,在pycharm中运行正常。我的程序文件目录结构如下图所示: 1....
  • 前言如果你曾经写过或者用过 Python,你可能已经习惯了看到 Python 源代码文件;它们的名称以.Py 结尾。你可能还见过另一种类型的文件是 .pyc 结尾的,它们就是 Python “字节码”文件。(在 Python3 的时候这个 .pyc...
  • Python3 如何反编译EXE

    2021-05-21 09:36:42
    公司内部使用Python编写的代码,最终需要在发布前编译成windows执行的.EXE文件,所以今天在网上看到有相关牛人,github开源写了一个反编译代码程序,可以将Windows EXE文件反编译处pyc文件,最终再将pyc文件转换成...
  • 该脚本可帮助研究人员解压和反编译python编写的可执行文件。 但是,现在这仅支持使用py2exe和pyinstaller创建的可执行文件。 该脚本将社区可用的几种工具粘合在一起。 希望这可以对人们的日常工作有所帮助。 有几...
  • python反编译.zip

    2019-05-30 19:36:22
    python pyinstaller exe反编译工具:pyinstxtractor.py pyc反编译工具:Easy Python Decompiler
  • python反编译工具Easy Python Decompiler,参考网址http://blog.csdn.net/qq_32808253/article/details/78518204
  • python编译exe及防止被反编译

    万次阅读 2019-06-20 21:12:53
    https://blog.csdn.net/ZhaDeNianQu/article/details/87717293
  • python exe反编译脚本

    2019-06-03 13:26:04
    python exe反编译脚本 用于逆向python打包exe的程序。
  • python生成的EXE文件 进行反编译

    千次阅读 2020-04-19 16:14:20
    源代码误删?小问题,只要没有经过加壳操作,反编译一下吧我使用的python版本 Python 3.8.2第一步 准备需要的软件第二步 进行反编译...下载Ming Loh的python反编译项目 链接: https://github.com/countercept/pytho...
  • 1、先准备一个pyinstxtractor.py文件,用来把exe解析成pyd源码如下:2、把它放到要反编译exe所在位置3、在命令窗口输入:python pyinstxtractor.py xxx.exe4、在目录下生成反编译后的文件:xx.exe_extracted生成...
  • python打包的.exe文件还原成.py文件1、下载 pyinstxtractor.py地址:https://sourceforge.net/projects/pyinstallerextractor/2、把pyinstxtractor.py和exe文件放在同个目录下打开cmd,进入该目录,输入:python2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,011
精华内容 3,204
关键字:

python反编译exe

python 订阅