以下是使用自定義解釋器打包python應用程序時可以使用的技巧。
dis
之類的有助於逆向工程的模塊(基本上是對不模糊的python程序進行逆向工程,請注意您認為有用的所有模塊/技術,並將其從定制中刪除解釋器) PyRunString()
。否則,他們可以附加調試器並運行任意python代碼。我不知道任何特定的Python混淆工具(可能是因為想要編寫混淆代碼的人不會在Python中這樣做,除了娛樂/教育之外)。
但是,如果確實需要混淆Python代碼,則可能會使用與任何語言的程序相同的技術。缺少工具意味著您需要編寫自己的混淆器,但這並不困難。
基本上,想想要對程序進行反向工程並將其轉換以使其變得更困難的任何操作。
使不變量變得複雜。將程序不變式轉換為類似“(x ** y)%p == 457”或“此數據結構表示一個手形圖”之類的東西。靜態或動態分析工具很難猜出這種不變量,因此人類需要花費很多時間才能弄清楚。
將不同方法的邏輯混合在一起。採取一切好的設計實踐,然後做相反的事情。將方法的各部分隨機內聯到其他方法中,然後重新排列代碼。 CFG的重複部分,並在兩個版本的相應點之間隨機插入跳轉,然後對其進行突變,以使它們顯然不是重複的。
添加一個打包程序。如果僅在實際需要執行代碼時才解密部分代碼,並使結果取決於程序狀態,則可以使用額外的指針,因此很難預先確定密鑰。嘗試確保原始程序永遠不會一次出現在內存中。
混淆的主要挑戰在於,它需要理解程序,並且通常會損害性能。更極端的混淆僅適用於性能無關緊要且經受嚴格檢查很重要的情況(即惡意軟件)。
我認為SO中的這些問題可能會有所幫助:
此免費工具將混淆多模塊Python源代碼,同時保留從第3方庫導入的標識符。另外,其他標識符也可以免於混淆。我將其用於多年項目中,但決定其他人也可以從中受益。
您有一些選擇。
您可以創建由現有加密工具組成的自己的混淆方法...即openssl。但是,請注意,完成此類項目可能需要花費大量時間。
這將要求您繪製出如何將混淆代碼中的“密碼/密碼”括起來的方式,除了您之外,沒有人可以使用它。如果您連它都做不到,那將是更好的選擇。
然後,您需要添加一些邏輯,該邏輯將導致腳本保護自己免受可能試圖撬開腳本的好奇用戶的攻擊。同樣重要的是,您想出的任何方法都不得顯著增加腳本的執行時間。
這聽起來似乎是不可能的,但我認為它是可行的。您只需要有動力,就可以擁有足夠的時間。
或者,如果您需要快捷方式,可以嘗試將基於unix的python腳本示例粘貼到此站點,看看是否可以破壞他們的代碼並公開您的“隱藏”代碼。