這是在這種情況下的處理方法。
步驟1 :在可執行程序中加載可執行文件,例如Ollydbg。
步驟2 :在內存轉儲窗口中,通過按 Ctrl kbd> + G kbd>
導航到 PyImport_FrozenModules
>步驟3 : PyImport_FrozenModules
是一個指針,該指針已初始化為指向 struct _frozen
記錄的數組。在 dump
中跟隨此指針。
第4步:現在,您位於存在 _frozen
數組的位置結構。此結構定義為
struct _frozen {char * name;無符號字符* code; int size;};
上面的數組由其所有成員均為null的結構終止。
步驟5 :在在上述結構中,第一個成員是指向凍結模塊名稱的指針, 第二個成員是指向模塊字節碼的指針。 (這就是您要找的東西) 。最後一個成員將為您提供字節碼的大小(以字節為單位)。使用大小將字節碼轉儲到文件中。 (對於python 2.7,它是03 F3 0D 0A,後跟4個字節的時間戳)添加標頭,現在文件應該是可反編譯的。
要使上述過程自動化,您還可以編寫腳本。
UPDATE
這裡是一個PyCommand(抗擾度調試程序腳本)以轉儲凍結的模塊。加載所有凍結的模塊後,需要運行腳本。為此,您可以在函數 PyImport_ImportFrozenModule()
上設置一個斷點,以便可以在每個凍結的模塊加載時對其進行跟踪。如果您不熟悉Immunity Debugger,請參閱 此 和 此
import immlib
DESC ='PyCommand轉儲凍結的python模塊'PYTHONMAGIC ='\ x03 \ xF3 \ x0D \ x0A \ x00 \ x00 \ x00 \ x00'#根據使用的python版本更改此值。此處給出的值適用於Python 2.7''',當所有凍結的模塊都加載後運行此py命令,這會將每個凍結的模塊轉儲到抗擾調試器安裝目錄中的.pyc文件中''''def main(args):imm = immlib。 Debugger()addr = imm.getAddress('PyImport_FrozenModules')structAddr = imm.readLong(addr)而True:ptrToName = imm.readLong(structAddr)ptrToCode = imm.readLong(structAddr + 4)sizeOfCode = imm.readLong(structAddr + 8)structAddr + = 12#如果ptrToName == 0且ptrToCode == 0且sizeOfCode == 0,則該數組以其成員為null的結構終止:如果sizeOfCode > 0和sizeOfCode < 2147483647:模塊名= imm.readString( ptrToName)moduleCode = imm.readMemory(ptrToCode,sizeOfCode)#您可以在此處更改輸出路徑open(moduleName +'.pyc','wb')。write(PYTHONMAGIC + moduleCode)return'[*] Frozen m odules'
轉儲凍結的模塊後,對生成的 pyc 文件使用反編譯器。您可以為此使用 Easy Python Decompiler 。