基於python內置方法進行代碼混淆


0x00 動態加載模塊

在python腳本中,直接使用import os、import subprocess或from os import system這種方法很容易被規則檢測,即使使用其它執行命令的函數,依然容易被檢測。所幸python中可以動態加載模塊,而python的內置魔數方法_import_,可以直接根據字符串導入模塊

>>> a = __import__('o'+'s')
>>> a
<module 'os' from 'C:\Python27\lib\os.pyc'>
>>> a.system('whoami')
desktop-9*****8\h*********
// 從os.system()變成了a.system()

通過這種方法,對os字符進行加密或編碼,可以進一步避免被檢測,且這里替換變量名,將"os"替換為"a"可以執行命令了,但system函數依然存在,還是有被檢測到的風險。

0x01 獲取模塊中的方法

hasattr(模塊, "成員"):在某個模塊中檢查是否含有某個成員
getattr(模塊, "成員"):在某個模塊中獲取成員
setattr(模塊, "成員", "value"):在某個某個模塊中設置成員
delattr(模塊, "成員"):刪除某個模塊中的成員

到這里,就可以用python完成類似於java的反射機制,可以使用getattr方法直接獲取某個模塊的方法或屬性,而使用setattr和delattr方法可以對模塊的成員進行修改和刪除。

>>> a = __import__("o"+"s")
>>> a
<module 'os' from 'C:\Python27\lib\os.pyc'>
>>> s = getattr(a,'sys'+'tem')
>>> s
<built-in function system>
>>> s('who'+'ami')
desktop-9*****8\h*********

類似於java的的反射機制,使用字符串導入模塊和方法,可以逃逸靜態檢測

0x02 eval函數的調用示例

python中一些內置函數和方法歸納在_builtins__模塊中,使用dir(__builtins_)即可查看,eval函數便在其中

>>> e = getattr(__builtins__, 'ev'+'al')
>>> e
<built-in function eval>
>>> e('__import__("os").system("whoami")')
desktop-9*****8\h*********

這種方法下,調用eval函數但不出現eval字眼,且對e函數內的字符串進行加密或編碼后,可以逃逸靜態檢測

0x03 tips

python中函數名和括號間可以添加一個或多個空格,這種情況下也許可以逃逸一些檢測方法

>>> e        ('__import__("os").system  ("whoami")')
desktop-9*****8\h*********


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM