基于python内置方法进行代码混淆
2021-04-01 15:27
471 查看
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*********
相关文章推荐
- 利用Python进行图片发送与接收的两种方法---包含客户端和服务器端代码
- python 代码 用 pycharm 进行验证代码的步骤和方法
- 在react-router4中进行代码拆分的方法(基于webpack)
- Python3常用内置方法代码实例
- 使用Dotfuscator 进行.Net代码混淆 代码加密的方法
- python3 面向对象__类的内置属性与方法的实例代码
- Python3列表内置方法大全及示例代码小结
- python时间处理方法datetime(),下面就举几个代码案例进行说明,代码如下:
- 【机器学习实战—第4章:基于概率论的分类方法:朴素贝叶斯】代码报错(python3)
- 《Flask Web开发——基于Python的Web应用开发实践》代码使用方法
- Python 利用内置set函数对字符串和列表进行去重的方法
- Python中基于imageio读取视频进行完美编解码的简易方法
- 基于python代码实现简易滤除数字的方法
- Python基于jieba库进行简单分词及词云功能实现方法
- Android 进行代码混淆原则与方法
- 在react-router4中进行代码拆分的方法(基于webpack)
- Python内置字符串操作处理方法详解
- Struts2基于XML配置方式实现对Action方法进行校验
- 复习struts2之基于XML配置方式实现对action的所有方法进行校验
- ProGuard -- java代码进行混淆