題:
混淆Python程序的技術和工具是什麼?
perror
2013-04-28 01:06:57 UTC
view on stackexchange narkive permalink

這個問題與另一個另一個問題有關。我只是想知道什麼是適用的技術,並且可以在現實世界中找到哪些技術來混淆Python程序(在stackoverflow here here上可以找到類似的問題)。

mikeazo提到,他的程序提供了自定義的Python解釋器,但其他技術還有哪些?效率如何?

五 答案:
mikeazo
2013-05-01 17:14:59 UTC
view on stackexchange narkive permalink

以下是使用自定義解釋器打包python應用程序時可以使用的技巧。

  1. 重新映射解釋器的操作碼
  2. 加密pyc文件(自定義解釋器)
  3. 取消對解釋器中co_code的訪問(刪除解釋器中的co_code的引用(在解釋器的codeobject.c中的code_memberlist數組聲明中刪除對co_code的引用)
  4. 混淆/保護python解釋器
  5. 請勿捆綁諸如 dis 之類的有助於逆向工程的模塊(基本上是對不模糊的python程序進行逆向工程,請注意您認為有用的所有模塊/技術,並將其從定制中刪除解釋器)
  6. 修改解釋器,使其只能導入pyc文件(可以通過刪除編譯器模塊或在解釋器中進行過濾來實現)
  7. pyREtic人們提供了一些用於輸入自定義解釋器的標準技術。在您的應用上測試它們並嘗試禁用那些訪問方法會使反向工程師更加困難。
  8. 從解釋器中刪除功能,RE可以調用這些功能來幫助他/她,例如 PyRunString()。否則,他們可以附加調試器並運行任意python代碼。
  9. ol>

    參考

只要您遵循這條路線,還可能使解釋器要求對所有代碼進行簽名。
另外,還可以查看“(下拉)框內的外觀”,因為它是商業包裝的Python應用程序。 https://www.usenix.org/system/files/conference/woot13/woot13-kholia.pdf
Antimony
2013-04-28 09:30:43 UTC
view on stackexchange narkive permalink

我不知道任何特定的Python混淆工具(可能是因為想要編寫混淆代碼的人不會在Python中這樣做,除了娛樂/教育之外)。

但是,如果確實需要混淆Python代碼,則可能會使用與任何語言的程序相同的技術。缺少工具意味著您需要編寫自己的混淆器,但這並不困難。

基本上,想想要對程序進行反向工程並將其轉換以使其變得更困難的任何操作。

  • 使不變量變得複雜。將程序不變式轉換為類似“(x ** y)%p == 457”或“此數據結構表示一個手形圖”之類的東西。靜態或動態分析工具很難猜出這種不變量,因此人類需要花費很多時間才能弄清楚。

  • 將不同方法的邏輯混合在一起。採取一切好的設計實踐,然後做相反的事情。將方法的各部分隨機內聯到其他方法中,然後重新排列代碼。 CFG的重複部分,並在兩個版本的相應點之間隨機插入跳轉,然後對其進行突變,以使它們顯然不是重複的。

  • 添加一個打包程序。如果僅在實際需要執行代碼時才解密部分代碼,並使結果取決於程序狀態,則可以使用額外的指針,因此很難預先確定密鑰。嘗試確保原始程序永遠不會一次出現在內存中。

混淆的主要挑戰在於,它需要理解程序,並且通常會損害性能。更極端的混淆僅適用於性能無關緊要且經受嚴格檢查很重要的情況(即惡意軟件)。

除了混淆代碼之外,問題還在於嘗試強制執行應用程序許可和到期。在這種情況下,我建議將應用程序的某些關鍵部分移至本機二進製文件(即用C編寫),然後在其中進行許可證檢查。當然,然後可以以“標準”方式保護該C共享庫/ dll。
7h3rAm
2013-09-04 10:18:30 UTC
view on stackexchange narkive permalink

我認為SO中的這些問題可能會有所幫助:

混淆Python代碼?

如何保護Python代碼?

Python代碼混淆[關閉]

Jacques de Hooge
2015-06-16 21:54:06 UTC
view on stackexchange narkive permalink

此免費工具將混淆多模塊Python源代碼,同時保留從第3方庫導入的標識符。另外,其他標識符也可以免於混淆。我將其用於多年項目中,但決定其他人也可以從中受益。

嘗試運行混淆後的代碼時出現“ SyntaxError:Unicode字符串中的編碼聲明”。還有它的“ import sys”,在某些環境下可能會被阻止。這樣的工具不應添加依賴項。
jbowss
2017-03-19 06:11:51 UTC
view on stackexchange narkive permalink

您有一些選擇。

您可以創建由現有加密工具組成的自己的混淆方法...即openssl。但是,請注意,完成此類項目可能需要花費大量時間。

這將要求您繪製出如何將混淆代碼中的“密碼/密碼”括起來的方式,除了您之外,沒有人可以使用它。如果您連它都做不到,那將是更好的選擇。

然後,您需要添加一些邏輯,該邏輯將導致腳本保護自己免受可能試圖撬開腳本的好奇用戶的攻擊。同樣重要的是,您想出的任何方法都不得顯著增加腳本的執行時間。

這聽起來似乎是不可能的,但我認為它是可行的。您只需要有動力,就可以擁有足夠的時間。

或者,如果您需要快捷方式,可以嘗試將基於unix的python腳本示例粘貼到此站點,看看是否可以破壞他們的代碼並公開您的“隱藏”代碼。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...