python逆向-逆向pyinstaller打包的exe程序反編譯獲取源代碼

python逆向-逆向pyinstaller打包的exe程序反編譯獲取源代碼

Pyinstaller

pyinstaller 是一個用于將 Python 程序打包成獨立可執行文件的工具,能夠在沒有 Python 解釋器的情況下運行。 Python 腳本轉換為 Windows、macOS 和 Linux 操作系統上的可執行文件。

把Python項目打包成exe非常簡單。

#安裝pyinstaller
pip install pyinstaller#打包
pyinstaller your_script.py

有時候為了恢復一部分源碼,我們將以前前編譯好的exe反編譯成py文件。

在反編譯前,我們要確定是Python編譯的 exe項目。

Exeinfo PE

Exeinfo PE 是一款查看 PE 文件信息的工具,可以查看 EXE/dll 文件的編譯器信息、是否加殼、入口點地址、輸出表/輸入表等等 PE 信息,幫助開發人員對程序進行分析和逆向。Exeinfo PE 還可以提取PE文件中的資源,可以提取圖片、EXE、壓縮包、MSI、SWF等等資源

使用類似的查殼工具可以查看程序是不是 pyinstaller 打包,確定是 pyinstaller 打包后就可以使用下面的方法進行反編譯了
打開軟件后直接將需要逆向的程序拉到軟件上即可
在這里插入圖片描述

exe反編譯

拉取 pyinstxtractor.py
git clone https://github.com/countercept/python-exe-unpacker使用 Python 執行pyinstxtractor.py腳本,便可以對指定的 exe 程序進行反編譯。
python pyinstxtractor.py main.exe

編譯完成后同目錄下會出現一個xxx.exe_extracted的目錄,進入目錄后可以看到同 exe 程序名的一個文件。由于我們反編譯的 Python 版本與程序 Python 版本不同,導致反編譯出來的程序沒有攜帶 .pyc后綴,需要我們自己手動加上后綴,如下圖修改成main.pyc
在這里插入圖片描述
修改后綴
在這里插入圖片描述

給pyc文件添加文件頭

pyinstaller 打包后會去掉文件頭部的 magic number,此時反編譯出來的 pyc 文件都是缺少 magic number 值的,會導致后面我們將 pyc 文件反編譯為 py 文件時出現問題,需要我們手動補上缺失的部分。

這里使用WinHex20,WinHex20是一款非常知名的16進制編輯器軟件,使用該軟件能夠快速幫助用戶編輯二進制、十六進制、亂碼等文件,非常方便。

使用 WinHex20 打開 main.pyc文件。
在這里插入圖片描述

打開“main.exe_extracted"文件夾下的PYZ-00.pyz_extracted文件夾,使用 WinHex20 隨便打開其中一個pyc文件,將其頭部復制到main.pyc的頭部。可以看到上面修改的頭部就是下面這里復制過去的。修改后記得保存文件!

在這里插入圖片描述

使用pycdc反編譯pyc文件

在網上下載好pycdc之后,將修改后的main.pyc文件和pycdc.exe放在同目錄下

pycdc.exe main.pyc>main.py

在這里插入圖片描述

等待執行成功之后在文件夾內會出現main.py

在這里插入圖片描述
然后就可以使用編輯器閱讀了,但是可能會出現中文編碼錯誤的情況,如下:

在這里插入圖片描述

原因:反編譯工具在還原時,有時不會自動將這些字節解碼回原始的 Unicode 字符串,而是直接以十六進制轉義序列的形式顯示出來。
大數據量的情況下直接讓ai寫個腳本處理替換一下就行!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96343.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【SQL】-- sql having 和 where 的 區別

HAVING 和 WHERE 都是用來篩選數據的,但它們的應用場景有所不同。WHERE:用于篩選行數據,通常在 FROM 子句之后執行。它在分組操作 (GROUP BY) 之前應用,用來篩選出符合條件的記錄。示例:SELECT name, age FROM employe…

MySQL,SQL Server,PostgreSQL三種數據庫各自的優缺點,分別適用哪些場景

MySQL的優缺點及適用場景優點開源免費,社區版可商用,成本低。輕量級,安裝配置簡單,適合中小型項目。讀寫性能優異,尤其在OLTP(在線事務處理)場景下表現突出。支持主從復制、分片等擴展方案&…

Java 類加載機制雙親委派與自定義類加載器

我們來深入解析 Java 類加載機制。這是理解 Java 應用如何運行、如何實現插件化、以及解決一些依賴沖突問題的關鍵。一、核心概念:類加載過程一個類型(包括類和接口)從被加載到虛擬機內存開始,到卸載出內存為止,它的整…

Kaggle項目實踐——Titanic: Machine Learning from Disaster

泰坦尼克號沉船事件是機器學習領域最經典的入門項目之一。Kaggle 上的 Titanic: Machine Learning from Disaster 競賽,被無數人稱為“機器學習的 Hello World”。 一、數據導入與清洗:讓數據從 “雜亂” 變 “干凈” 機器學習模型就像 “挑食的孩子”…

Qt C++ 復雜界面處理:巧用覆蓋層突破復雜界面處理難題?之二

接上一篇,繼續探索“覆蓋層”的使用方法。 五、覆蓋層進階交互:從 “能繪制” 到 “好操作”? 基礎的繪制功能只能滿足 “看得見” 的需求,實際開發中還需要 “能操作”—— 比如選中線條修改顏色、按 Delete 鍵刪除線條、鼠標 hover 時高亮…

神經網絡構成框架-理論學習

一、神經網絡的基本組成與分類 1.1 神經網絡的核心組成部分 神經網絡是現代人工智能的基石,其設計靈感來源于生物神經系統的信息處理方式。作為工程師,了解神經網絡的基本組成部分對于構建和優化模型至關重要。一個典型的神經網絡主要由以下幾個關鍵部分…

從0開始開發app(AI助手版)-架構及環境搭建

架構選擇 前端React Native 后端Firebase 原因 環境準備 安裝node 安裝JDK 命令行工具:Node.js command prompt命令行查詢Javav版本:javac -version使用nrm工具切換淘寶源:npx nrm use taobao安裝yarn,替代npm下載工具&#x…

【性能測試】Jmeter工具快速上手-搭建壓力測試腳本

🔥個人主頁: 中草藥 🔥專欄:【Java】登神長階 史詩般的Java成神之路 概念 性能測試是軟件測試的重要分支,核心目標是通過模擬真實業務場景和負載壓力,評估系統在不同條件下的性能表現,發現系統性…

oracle里的int類型

oracle里的int類型 在 ANSI SQL 標準 中,INTEGER 和 SMALLINT 是定義好的精確數值類型,但它們的 “長度”或“大小”并不是通過 (N) 括號來指定的(如 INT(4)),這一點與 MySQL 等數據庫的非標準擴展完全不同。 SMALLI…

前端學習之后端java小白(二)-sql約束/建表

一、約束SQL約束(Constraints)是用于限制表中數據的規則,確保數據的完整性和準確性。以下是主要的SQL約束類型: 主要約束類型: 1. NOT NULL 約束: 確保列不能包含空值 CREATE TABLE users (id INT NOT NULL,name VARC…

OpenCV:圖像金字塔

文章目錄一、什么是圖像金字塔?二、圖像金字塔的核心操作:采樣與逆采樣1. 向下采樣(pyrDown):從高分辨率到低分辨率步驟1:高斯濾波步驟2:刪除偶數行與偶數列OpenCV實戰代碼效果特點2. 向上采樣&…

LVS與Keepalived詳解(一)負載均衡集群介紹

文章目錄前言一、什么是LVS?二、四層(L4)負載均衡的最佳解決方案是什么?2.1解決方案分類與對比(負載均衡的三種方式介紹)2.1.1 硬件負載均衡 (Hardware Load Balancer)2.1.2 軟件負載均衡 (Software Load B…

消息隊列-kafka完結

基本概念和操作 基本概念 簡單概念:::color4 Broker:如果將kafka比喻成數據倉庫網絡,那么Broker就是網絡中的倉庫節點,比如快遞站,在該節點內可以獨立運行,并且多個Broker可以連接起來,構建kafka集群Topic&…

Chromium 138 編譯指南 Windows篇:環境變量配置與構建優化(三)

引言配置,往往決定成敗。在軟件開發的世界里,環境變量就像是一位無聲的指揮家,默默地協調著各個組件的協同工作。對于Chromium 138這樣一個擁有數千萬行代碼的超大型項目而言,正確的環境變量配置更是編譯成功的關鍵所在。也許您曾…

LabVIEW加載 STL 模型至 3D 場景 源碼見附件

LabVIEW 中 STL 模型的導入與 3D 場景顯示,基于示例代碼邏輯,結合格式兼容性、功能實現步驟及多樣化顯示方式,適用于三維可視化溫控、機械零件模擬等場景。 1示例代碼 NI 社區案例 “Add an STL file to 3D scene using LabVIEW” 提供了經…

硅基計劃3.0 Map類Set類

文章目錄一、二叉搜索樹(排序樹)1. 概念初識2. 模擬實現1. 創建搜索樹節點2. 查找指定元素是否存在3. 插入4. 刪除二、Map類1. put——設置單詞以及其頻次2. get——獲取單詞頻次3. getOrDefault——獲取單詞頻次或返回默認值4. remove——刪除單詞頻次信…

LeetCode 刷題【73. 矩陣置零】

73. 矩陣置零 自己做 解&#xff1a;標記消除 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {vector<bool> x(matrix.size(), false); //要置0的行vector<bool> y(matrix[0].size(), false); //…

Unity學習----【進階】TextMeshPro學習(一)--基礎知識點

來源于唐老獅的視頻教學&#xff0c;僅作記錄和感悟記錄&#xff0c;方便日后復習或者查找 一.導入TextMeshPro 對于新創建的工程&#xff0c;可以直接在這里導入TMP必要的資源&#xff08;上面&#xff09;&#xff0c;以及TMP的實例和擴展&#xff08;下面&#xff09; 導入之…

BigDecimal(用于處理超出double范圍的浮點數)

BigDecimal 是 Java 中 java.math 包提供的高精度十進制浮點數類&#xff0c;專為解決基本類型&#xff08;float/double&#xff09;的精度缺陷而設計&#xff0c;廣泛用于金融、科學計算等對精度要求極高的場景。以下從核心特性、使用方法、常見問題對比、注意事項等方面詳細…

Nginx 優化

文章目錄1、隱藏版本號2、修改用戶與組3、緩存時間4、日志切割5、連接超時6、更改進程數7、配置網頁8、防盜鏈1、隱藏版本號 隱藏nginx的版本號&#xff0c;為了防止惡意用戶利用已知漏洞進行攻擊 ## 查看版本號 curl -I http://192.168.10.23方法一&#xff1a;修改配置文件…