百木园-与人分享,
就是让自己快乐。

基于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*********

来源:https://www.cnblogs.com/bitterz/p/14606550.html
图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 基于python内置方法进行代码混淆

相关推荐

  • 暂无文章