从exe程序反汇编得到py源码
背景
手上有个简单的小程序,用来识别公司应用的登录窗口,自动填写用户名密码,点击登录(要是有保存用户名密码功能多好啊)
今天忽然想看一下实现原理是啥,源码是啥
主要工具及环境
DIE pyinstxtractor uncompyle6 pycdc 编译好的pycdc vs2019 win10x64 python3.9.6
分析exe
下载Detect It Easy 软件,并打开我们的小程序
上面的PyInstaller表明这是一个python程序,使用pyinstaller打包成exe
首先解包这个exe
既然是python打包的,先解包看看里面有啥
- 下载pyinstxtractor ,随后使用python pyinstxtractor xxx.exe解包,输出如下
E:\xxxx>python pyinstxtractor.py xxxx.exe
[+] Processing xxxx.exe
[+] Pyinstaller version: 2.1+
[+] Python version: 309
[+] Length of package: 59527603 bytes
[+] Found 1053 files in CArchive
[+] Beginning extraction…please standby
will make file struct.pyc
will make file pyimod01_os_path.pyc
will make file pyimod02_archive.pyc
will make file pyimod03_importers.pyc
will make file pyimod04_ctypes.pyc
[+] Possible entry point: pyiboot01_bootstrap.pyc
[+] Possible entry point: pyi_rth_subprocess.pyc
[+] Possible entry point: pyi_rth_pkgutil.pyc
[+] Possible entry point: pyi_rth_multiprocessing.pyc
[+] Possible entry point: pyi_rth_inspect.pyc
[+] Possible entry point: pyi_rth__tkinter.pyc
[+] Possible entry point: xxxx.pyc
…
will make file tk\xmfbox.tcl
will make file PYZ-00.pyz
[+] Found 536 files in PYZ archive
[+] Successfully extracted pyinstaller archive: xxxx.exe
You can now use a python decompiler on the pyc files within the extracted directory
- 由此我们得到了所有的pyc文件存放于xxxx_extracted目录下,pyc文件是python编译后产生的文件,还需将其反编译成py文件才能得到源码
反编译pyc文件
解出来了一堆pyc文件,pyc是py文件编译后生成的,需要反编译一下
- 首先安装
pip install uncompyle6
,也可从网站下载源码 - 运行命令
uncompyle6 xxxx_extracted\xxxx.pyc
- 如果pyc是python3.8及以下版本,则可直接得到源码文件,否则将得到如下提示
换个方式反编译pyc文件
由于这个exe是python3.9生成的,uncompyle6不支持。只能另觅他法,我们换pycdc再试一下
- 下载pycdc 这是一个c++写的反编译pyc的工具
- 使用cmake配置好pycdc工程,编译得到pycdas.exe pycdc.exe两个程序,拷贝到我们的e:\xxxx目录下,编译好的pycdc
- 运行命令
pycdc xxxx_extracted\xxxx.pyc > xxxx.py
- 如果幸运则直接得到完整python文件,如果pyc内有pycdc不支持的指令,则只能得到部分py代码,并报错
打开xxxx.py看一下
中间代码略
可以看出由于有不支持的指令JUMP_IF_NOT_EXC_MATCH,反编译工作只执行了一部分
到底少了点什么呢?
大杀器–反编译字节码看看
既然不能直接得到py文件,我们使用大杀器吧
执行命令
pycdas.exe xxxx.exe_extracted\xxxx.pyc > xxxx.txt
打开xxxx.txt
我们看到已经得到了完整的字节码,LOAD_GLOBAL 读取一个全局变量,类似java字节码的感觉,对照一下左右的代码很容易读懂。随后就需要我们耐心的读xxxx.txt中的字节码,将pycdc生成的xxxx.py中缺少的部分自行补上,
最后由于生成的xxxx.py部分语句并不符合语法,需要自己修改一下,再通读一下代码进行修正。
总结
- 我们首先使用DIE 工具探测出exe文件 是pyinstaller生成的
- 随后使用了uncompyle6 尝试反编译,由于uncompyle6不支持python3.9生成的pyc,这一步没有成功
- 随后使用了pycdc尝试反编译,由于碰到了不支持的JUMP_IF_NOT_EXC_MATCH指令,成功了一部分
- 最后使用了大杀器pycdas,得到了字节码,补全了代码(照着字节码看我们自己也能翻译出来python源码)
从exe程序反汇编得到py源码相关推荐
- Ubuntu 16.04下Caffe-SSD的应用(四)——ssd_pascal.py源码解读
前言 caffe-ssd所有的训练时的参数,全部由ssd_pascal.py来定义,之后再去调用相关的脚本和函数,所以想要训练自己的数据,首先要明白ssd_pascal.py各个定义参数的大体意思. ...
- 【python】又拍云采集工具助手exe带python图片采集源码
[python]又拍云采集工具助手exe带python图片采集源码 论坛的老哥要的东西!练手试了一下! 技术比较渣,见谅! 拿去玩! 适合想要获取 又拍云 相册图片的需求! 自己测试了一下,没有用多线 ...
- 机器狗写入到userinit.exe文件的下载者源码(c及汇编)
机器狗源码(C语言的),将病毒体从资源中提取出来写入到第一个分区的指定文件中 // Test.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- 基于java的rsa加密程序_RSA rsa加密程序,rsa java源码和 rsa的jsp Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
文件名称: RSA下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 169 KB 上传时间: 2014-04-23 下载次数: 0 提 供 者: 姚双奇 详细说明: ...
- tinkphp1.0贺岁版小程序应用平台系统源码
介绍: tinkphp1.0贺岁版小程序应用平台系统源码 安装说明:直接放入服务器或者空间,访问域名根据安装向导进行安装. 程序魅力:此程序是类似微信小程序一样的机制系统,但不是微信小程序,跟微信不搭 ...
- 微信程序短视频去水印源码 开源产品未加密未授权相关文章
微信程序短视频去水印源码 开源产品未加密未授权相关文章 看到咸鱼上还有人卖这套源码,所以就把这套源码 免费分享出来 开源产品,未加密未授权,可调用别人的接口和自己的接口. PS:源码仅供技术学习参考, ...
- emlog程序音乐歌曲网源码
简介: emlog程序音乐歌曲网源码 使用方法: 首先需要安装好emlog6.0.1系统,登录后台直接上传模板应用即可! 内附模板使用修改说明! 网盘下载地址: http://kekewangLuo. ...
- 初识exe程序反汇编小感
[原创]初识exe程序反汇编小感 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&qu ...
- 详解:Spark程序的开始 SparkContext 源码走一走
Spark程序的开始 SparkContext 源码走一走 什么是SparkContext IDEA中看看源码 ** Main entry point for Spark functionality. ...
- 新版WIFI小程序分销系统微信源码序WiFi大师版流量主搭建独立源码WiFi分销源码
网传版本,未测试,新版WIFI大师v4.47小程序源码,WIFI分销系统带流量主和独立运行版. 更新内容: 1.后台更多板块列表新增分页 2.平台管理端图标优化 3.平台管理端新增平台统计 4.优化后 ...
最新文章
- python开发环境和运行环境的区别_Django 开发环境与生产环境的区分详解
- RYU控制器的学习笔记(三) 利用观察者模式通知app处理报文
- python中print用法
- 找出1-100中缺失的两个数
- HDU - 4027 Can you answer these queries?(线段树)
- vue项目使用大华摄像头怎样初始化_Vue接入监控视频技术总结
- java伪代码生成器_JAVA单例模式的实现伪代码
- net 开发 【要学习】
- SQLSERVER数据库设置varchar类型主键自增方法
- 语义分割之原图与mask的可视化
- php方便,两个方便测试PHP特性的小程序
- 【ROS学习笔记】(一)常用命令的解释与举例
- httpsecurity 类方法介绍_java知识学习25-内部类 - 那种意境
- Elasticsearch自动补全(拼音查询自动补全)
- 电阻器颜色代码在线计算机,色环电阻计算器
- 五子棋人机交互c语言代码,Windows人机交互程序设计教学课件-第10课 五子棋程序.ppt...
- 技术美术知识学习4200:SSAO算法
- 用VS2008制作主题和皮肤
- cab文件介绍及制作方法 1
- 阿里研究院副院长:数字化转型的十个本质