回覆列表
  • 1 # 使用者7364316064609

    可以加密。 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 (這個說法可能比較難理解,因為我第四層的加密沒有說明,不過意思就是拒絕執行就對了)

  • 中秋節和大豐收的關聯?
  • 組合語言,統計16位二進位制數中的1的個數並顯示?