可以加密。 python 代碼加密甚至可以做到比用匯編手寫混淆,用 c 手寫混淆更加難以解密。具體做法略復雜僅簡單說個過程。
第一級別是源碼級別的混淆,用 ast 和 astor ,再自己手寫一個混淆器,三五百行的腳本直接混淆到幾萬行,整個文件面目全非,基本可以做到就算直接放腳本給你拿去逆,除非你再寫出來一個逆向前面的混淆演算法的腳本來逆(在熟悉 python 的情況下需要花幾天,且不說需要了解程序構造原理),手動去調試腳本幾乎達到不可行的地步(話費時間再乘以 2 )
第二級別是個性化定製 pyinstaller , pyinstaller 會打包所有需要的庫,將腳本也包含進打包的 exe ,但是, pyinstaller 有一個 stub ,相當於一個啟動器,需要由這個啟動器來解密腳本和導入模塊,外面有直接導出腳本的工具,但是那是針對 pyinstaller 自帶的啟動器做的,完全可以自己修改這個啟動器再編譯,這樣逆向者就必須手動調試找到 main 模塊。配合第一級別加密,呵呵,中國就算是最頂尖的逆向專家也要花個一兩周,來破解我們的程序邏輯了,就我所知,實際上國內對於 py 程序的逆向研究不多。
第三級別是再上一層,將 py 翻譯為 c 再直接編譯 c 為 dll ,配合第一階段先混淆再轉 c 再編譯,在第一步混淆之後,會產生非常多垃圾(中間層)函數,這些中間層函數在 c 這里會和 py 解釋器互相調用,腳本和二進制之間交叉運行,本身混淆之後的源碼就極難復原,再混合這一層,想逆向,難。
第四級別是利用 py 的動態特性,絕大多數逆向者都是 c ,匯編出身,對於程序的第一直覺就是,程序就是一條一條的指令,後一條指令必然在這一條指令後面,然而, py 的動態特性可以讓代碼邏輯根本就不在程序裡面,這一點不想多講,涉及到我一個項目里的深度加密。
第五級別,數學做牆。了解過比特幣原理的知道要想用挖比特幣就得提供大量算力去幫網路計算 hash ,這個成為 pow ,那麼既然已經採用 py 了估計已經不考慮太多 cpu 利用率了,那就可以採用 pow (還有其他的手段)確保程序運行時擁有大量算力,如果程序被單步調試,呵呵,一秒鍾你也跑不出來幾個 hash 直接拉黑這個 ip (這個說法可能比較難理解,因為我第四層的加密沒有說明,不過意思就是拒絕執行就對了)
B. 2023frida使用教程(1)
1.使用材料:
(Windous10)pc
Python3環境
雷電模擬器
frida16.0.9(hook框架)
vscode
Charles(抓包)
APP(駕培訓創業教練)未加固
jadx4.1
2.逆向目標:hook介面:逆向登錄參數sigin加密
3.詳細逆向過程:
3.1抓包
設置ssl代理,在雷電模擬器WIFI設置代理,下載證書並安裝證書,重啟雷電模擬器
打開 駕培訓創業教練 APP的登錄頁面
打開抓包工具
輸入手機號抓包,抓包結果如下:
vscode note記錄抓包結果,養成好習慣!
3.2反編譯app搜索逆向關鍵詞
APP未加殼,如果加殼需要先破殼,安卓逆向中最重要的就是:演算法分析和脫殼
打開jadx 導入APP後開始反編譯 搜索關鍵詞:getSmscode 雙擊轉到代碼區
代碼審計:
這段代碼就是構造請求體,包括了 類型 手機 時間 簽名 。其中簽名是用了stringMD5toUpperCase函數來生成,
其中stringMD5toUpperCase函數又使用了yyyyMMddHHmmss + i + str + str2這幾個參數生成,我們不知道str是什麼,所有可以使用frida進行hook!!!!!!
3.3編寫hook代碼
目錄如下:
我們直接使用模板frida
python模板
模板介紹:frida兩種模式,我們這里使第二種。他們的區別:
-spawn模式,Frida會自行啟動並注入進目標App,Hook的時機非常早 自動重啟 設置包名
-attach模式,Frida會附加到當前的目標進程中,即需要App處於啟動狀態,這也意味著只能從當前時機往後Hook 手動啟動 設置APP名
js模板:
結合反編譯java代碼編寫:
補充:java方法的重載
什麼是重載?
幾個相同的函數,參數不相同
該怎麼hook呢?
Java.use('包名.類名').方法.overload('java.lang.String')
例如:
Java.use('com.jx885.library.http.CommAction').getSmscode..overload('int')implementation=function(mi){}
完整代碼:
3.4 連接frida伺服器,對app進行hook
終端命令:
埠轉發
運行
結果如下:
補充:grpc直接調用
C. Python有什麼模塊來加密
對Python加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。
1、對python轉exe加殼
下載最新版VirboxProtector加殼工具,使用加殼工具直接對demo.exe進行加殼操作
2、對.py/.pyc加密
第一步,使用加殼工具對python安裝目錄下的python.exe進行加殼,將python.exe拖入到加殼工具VirboxProtector中,配置後直接點擊加殼。
第二步,對.py/.pyc進行加密,使用DSProtector對.py/.pyc進行保護。
安全技術:
l虛擬機外殼:精銳5的外殼保護工具,創新性的引入了預分析和自動優化引擎,有效的解決了虛擬化保護代碼時的安全性和性能平衡問題。
l碎片代碼執行:利用自身成熟的外殼中的代碼提取技術,抽取大量、大段代碼,加密混淆後在安全環境中執行,最大程度上減少加密鎖底層技術和功能的依賴,同時大量大段地移植又保證了更高的安全性。
lVirbox加密編譯引擎:集編譯、混淆等安全功能於一身,由於在編譯階段介入,可優化空間是普遍虛擬化技術無法比擬的,對代碼、變數的混淆程度也有了根本的提升。
l反黑引擎:內置R0級核心態反黑引擎,基於黑客行為特徵 的(反黑資料庫)反制手段。精準打擊調試、注入、內存修改等黑客行為,由被動挨打到主動防護。
加密效果:
加密之前
以pyinstall 的打包方式為例,使用pyinstxtractor.py文件對log_322.exe進行反編譯,執行後會生成log_322.exe_extracted文件夾,文件夾內會生成pyc文件。
成功之後會在同目錄下生成一個文件夾