當前位置:首頁 » 編程軟體 » python防反編譯

python防反編譯

發布時間: 2023-01-09 01:03:28

1. 使用Cython、pyinstaller防止反編譯

本例在centos7測試通過

1、首先安裝pyinstaller 及Cython

pip install pyinstaller

pip installer Cython

2、本例中文件結構:

.其中config.cfg為配置文件,datacheck.py為入口文件,file_config.py、method.py為需要引入文件。

├── config.cfg

├── datacheck.py

├── file_config.py

├── method.py

3、編輯build_pyd.py文件,內容如下:

from distutils.core import setup

from Cython.Build import cythonize

setup(

    name='datacheck',

    ext_moles=cythonize(["method.py", "file_config.py"])

    )

注意 ext_moles只填寫引入文件,主運行文件不能寫。

編輯後文件結構如下:

├── build_pyd.py

├── config.cfg

├── datacheck.py

├── file_config.py

├── method.py

4、生成so鏈接文件(如在windows則為pyd文件,未測試)

# python3 build_pyd.py build_ext --inplace

正常情況下會引入文件會生成so文件,文件結構如下:

.

├── build

│   └── temp.linux-x86_64-3.7

│      ├── file_config.o

│      └── method.o

├── build_pyd.py

├── datacheck.py

├── file_config.c

├── file_config.cpython-37m-x86_64-linux-gnu.so

├── file_config.py

├── method.c

├── method.cpython-37m-x86_64-linux-gnu.so

└── method.py

可以新建tmp目錄,將datacheck.py及新生成的兩個so文件拷貝,並針兩個so文件 cpython-gnu去掉。tmp下文件結構如下:

├── datacheck.py

├── file_config.so

└── method.so

5、運行pyinstaller,生成二進制文件

# pythinsatller -F datacheck.py

加-F指生成單個文件。

6、修改datacheck.spec文件

在hiddenimports=加入引入的文件,如不加入,運行程序的時候會有如下提示:

Traceback (most recent call last):

  File "datacheck.py", line 7, in <mole>

  File "file_config.py", line 1, in init file_config

MoleNotFoundError: No mole named 'method'

7、再次運行pyinstaller,生成新的二進制文件

# pyinstaller datacheck.spec

8、拷貝dist目錄下的二進制文件,使用原來的cfg文件,即可單獨運行。

2. python生成的exe,反編譯成py的工具,大神提供下,感謝

你解開執行文件。如果是單個的文件,則執行它的時候在臨時目錄里可以找到解開的包。

在解開後的目錄中找到pyc文件,然後利用反編譯工具就可以將pyc反編譯成py文件。

但是有些程序是做了加密的。它們的pyc是它們重新寫python編譯器後自定義的加密格式,用通常的辦法無法解開。 需要在內存里反編譯。
-------------
pyc反編譯工具有很多
你搜索uncompyle2, decompyle2, DePython, unpyc, uncompyle, pycdc 等
聽說python2.7而言, uncompyler是最好用的工具。

3. python源碼編程成pyc後,怎麼防止反編譯

無法防止反編譯,但可以混淆,讓你即使反編譯了,也看不懂語法
下面一段源碼

sd=1

defseed(s):
globalsd
sd=s

defrandn(n):
globalsd
sd=(sd*1103515245+12345)&0x7fffffff
returnsd%n

defmain():
seed(11)
foriinxrange(4):
printrandn(313)

if__name__=='__main__':
main()

混淆後

oo000=1
if9-9:Ii.o0o00Oo0O-iI11I1II1I1I
defoooo(s):
globaloo000
oo000=s
if11-11:ii1I-ooO0OO000o
defii11i(n):
globaloo000
oo000=(oo000*1103515245+12345)&0x7fffffff
returnoo000%n
if66-66:iIiI*iIiiiI1IiI1I1*o0OoOoOO00
defI11i():
oooo(11)
forO0Oinxrange(4):
printii11i(313)
if78-78:i11ii11iIi11i.oOoO0oo0OOOo+IiiI/Iii1ii1II11i
if__name__=='__main__':
I11i()#

4. 用Python2.7.1寫的小程序可以反編譯得到它的源代碼嗎

可以,網上有很多在線的反編譯工具,給你發幾個鏈接:
1、http://depython.com/index.php
2、https://github.com/eble/pyc2py
3、http://tool.lu/pyc/
不過好像第一個只適用於Python2.0-2.6,第二個適用於Python2.6,第三個應該可以反編譯2.7,你可以都試一下。

5. 使用python語言如何保密源代碼以防止逆向工程

大家都很忙,誰有時間看你的的爛代碼!

如果真的怕泄露,別用python.

我以前做過這類事情,而且當時更嚴格,需要打包部署到客戶的服務只在有效期內有效,超過有效期必須更新證書才行。

Python代碼用任何方法都沒法保證保密性,這個時候你可以考慮用一個工具「nuitka」,這個工具會把你的python源代碼映射為c++然後編譯為二進制,因此對方是無論如何得不到你的源代碼的。

代價就是nuitka這個工具並不完美,有一些限制並不能100%完美的轉換所有python代碼。

1.用Cython編譯python成 Windows的pyd文件或Linux的so文件,二進制文件相對安全性較高。

2.用源碼混淆器把代碼搞的又臭又長。。。混淆完了再用Cython編譯為二進制。。。這樣靜態反編譯逆向難度也不小。

3.同其他語言程序一樣,可以對調試狀態進行檢測,當處於調試狀態時退出程序或進入混亂代碼耗費逆向工程人員心神。

4.分享一個跨平台反調試手段,檢測函數運行時間,加斷點會導致函數運行時間變長,也可感知正在被調試。

Python是提倡開源的,既然選擇Python還是擁抱開源才好~ 都開源還擔心逆向工程嘛

沒有不能逆的軟體。

只要匯編語言過關,逆向工程都是可以實現的,不要有其它想法。

你唯一可以做的,就是不讓別人用python讀取源代碼而已。那樣實現起來比較簡單。

python 適合開發伺服器程序,或者自己科研使用的程序,如果是 作為用戶程序,安裝到 pc 或手機上,還是 其它 c++ 或java 比較合適

1)可以把需要保護的部分用c語言實現,從而編譯成so等文件,這樣逆向的成本會比較高,可以防止直接打開python文件看到代碼邏輯。

2)so文件通過ida等工具也是可以反匯編的,可以通過對c語言進行代碼混淆,花指令等操作,提高通過ida等反匯編工具的分析難度。

3)不存在絕對無法逆向的技術手段,因此只能是看具體需求,選擇具體的防逆向的技術手段。

有工具類似py2exe轉成可執行程序,隱藏全部源代碼,雖然bytecode還是可以反編譯,但是難度大多了

1. 最穩的就是你改cpython載入代碼的過程,改zip包讀取最穩。

2. 藉助一些加密工具在編譯pyc之前進行一定的混淆,可以防君子,自我安慰一下。

商用一般都是用第一種辦法,小打小鬧用第二種。

可以考慮使用pymod工具,使用pymod pack 將模塊加密打包,發布的時候一個模塊就一個文件。

先睹為快,看看一個項目發布的時候,只有幾個文件,

main.py 項目程序入口

setting.py 項目配置

apps 項目模塊

plusins 項目插件目錄

創建項目 pymod create demo1

cd demo1

創建模塊 pymod add mod1

啟動pycharm 開始編寫功能模塊

一個模塊默認由三個文件組成

__init__.py 、 handlers.py 、param_schemas.py

業務邏輯主要在handlers.py中編寫

__init__.py

from pymod.blueprint import Blueprint api = Blueprint("/mod1") from .handlers import *

param_schemas.py

schema_sfz = { "type": "object", "required": ["sfz", "nl"], "properties": { "sfz": { "type": "string", "minLength": 18, "maxLength": 18, "description": "身份證明號碼" }, "nl": { "type": "integer", "minimum": 0, "maximum": 150, "description": "年齡" } } }

handlers.py

from . import api from pymod.ext import RequestHandler, params_validate,TrueResponse,FalseResponse from .param_schemas import schema_sfz from pymod.plugins import sfz_check @api.add_route('/hello') class Hello(RequestHandler): def get(self): self.write('Hello World') @params_validate(schema_sfz) def post(self): sfz = self.get_json_arg("sfz") nl =self.get_json_arg("nl") # self.write(TrueResponse(sfz=sfz, nl=nl)) if sfz_check.check_sfzmhm(sfz): self.write(TrueResponse(hint="身份證明號碼驗證通過")) else: self.write(FalseResponse(hint="身份證明號碼驗證失敗"))

三、項目部署

程序調試 修改setting.py

# 開發模式下 運行的模塊名稱必須填寫

moles = ["mod1"] moles_config ={ "mod1": { "deny_ip": "", "allow_ip": "*" } }

啟動程序 python main.py

調試沒有問題,進入發布模式

在項目目錄下

pymod pack mod1

在target目錄下生成mod1.mod文件,將其復制到apps目錄中

修改setting.py

# 開發模式下 運行的模塊名稱必須填寫

moles = []

再次運行 python main.py 測試

一切OK,系統就可以發布了。

說不能保密的,是沒有研究過python的機制的。我做個一個項目,所有源代碼自定義加密,運行時解密。

6. 用Python2.7.1寫的小程序可以反編譯得到它的源代碼嗎

python是不能反編譯的,因為得到了一個python的程序,就是得到了它的源代碼。
python是解釋性語言,沒有編譯這一步驟,和c語言和java語言是不一樣的

7. python寫的程序,轉成了exe文件,怎麼進行反編譯為python源碼

1、電腦桌面,輸入「win+R」組合鍵,在彈出窗口中輸入「cmd」,點擊確定。

8. python-uncompyle反編譯

python的編譯後文件pyc,可以將pyc文件反編譯為py文件。

相應的工具: uncompyle

github地址: https://github.com/rocky/python-uncompyle6/

安裝: pip install uncompyle

安裝好後,注意執行的命令為 uncompyle6 ,而不是 uncompyle 。

查看幫助命令: uncompyle6 --help 、 uncompyle6 -h

反編譯單個文件 : uncompyle6 foo.pyc > foo.py

反編譯多個文件: uncompyle6 -o . *.pyc

例子:

9. python寫的軟體都可以被逆向嗎

理論上任何語言寫人軟體都可以被逆向。
python 寫的可以編譯為位元組碼,可以一定程度上對源代碼進行保護
相對java的class文件來說,python的位元組碼反編譯工具相對較少,而且要收費。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1013
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:114
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:713