基于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*********
基于python内置方法进行代码混淆的更多相关文章
- 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程
目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...
- Python内置方法详解
1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名. 可以查看所有的字符串的内置方法,如: 1> count ...
- python 内置方法、数据序列化
abc(*args, **kwargs) 取绝对值 def add(a,b,f): return f(a)+f(b) res = add(3,-6,abs) print(res) all(*args, ...
- python内置方法
1. 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是 ...
- Python内置方法的时间复杂度(转)
原文:http://www.orangecube.net/python-time-complexity 本文翻译自Python Wiki本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了Pyt ...
- Python内置方法的时间复杂度
转载自:http://www.orangecube.NET/Python-time-complexity 本页面涵盖了Python中若干方法的时间复杂度(或者叫"大欧"," ...
- Python内置方法/函数
abs() 返回数字的绝对值. abs(x) all() 用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空. ...
- Python 内置方法
1. abs() 取绝对值函数 #!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke i = 100 print(abs(i)) i ...
- python内置方法大全
数学运算 abs:求数值的绝对值 >>> abs(-2) 2 divmod:返回两个数值的商和余数 >>> divmod(5,2) (2, 1) >> ...
随机推荐
- 结合k8s和pipeline的流水线,并通过k8s接口完成镜像升级
现在这家单位的CICD比较的混乱,然后突发奇想,想改造下,于是就用pipeline做了一个简单的流水线,下面是关于它的一些介绍 写一个简单的流水线 大概就是这么个流程简单来说就是:拉代码---> ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之准备安装-09
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之准备安装-09 欢迎加QQ群:1026880196 进行交流学习 准备安装 #controller1 ...
- 案例分析——Who is the king of handwriting notes?
案例分析--Who is the king of handwriting notes? 项目 内容 这个作业属于那个课程 2021春季学期软件工程(罗杰.任健) 这个作业的要求在哪里 案例分析 我在这 ...
- Co-prime(容斥原理)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- mysqli_fetch_array()、mysqli_fetch_assoc、mysqli_fetch_row()和mysqli_fetch_object()的区别
mysqli_fetch_array() 来使用或输出所有查询的数据. mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生 ...
- 技术面试问题汇总第005篇:猎豹移动反病毒工程师part5
这是我当初接受面试的最后两个问题,当时,那位面试官问我对漏洞了解多少时,我说一点都不懂,问我懂不懂系统内核时,我同样只能说不知道.后来他跟我说,面试的考查重点不在于我所掌握的知识的广度,而是深度.这也 ...
- 病毒木马查杀实战第011篇:QQ盗号木马之专杀工具的编写
前言 由于我已经在<病毒木马查杀第004篇:熊猫烧香之专杀工具的编写>中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的 ...
- Python脚本模拟登陆DVWA
目录 requests模拟登陆 Selenium自动化测试登陆 环境:python3.7 windows requests模拟登陆 我们登陆DVWA的时候,看似只有一步:访问网站,输入用户名和密码,登 ...
- 在进程空间使用虚拟内存(Windows 核心编程)
虚拟内存空间 如今的 Windows 操作系统不仅可以运行多个应用程序,还可以让每一个应用程序享受到约 4 GB 的虚拟内存空间(包括系统占用),假如内存为 4 GB 的话.那为什么 Window 可 ...
- CTFHub-技能树-SSRF
SSRF 目录 SSRF 1.内网访问 2.伪协议读取文件 3.端口扫描 4.POST请求 5.上传文件 6.FastCGI协议 7.Redis 8.URL Bypass 9.数字IP Bypass ...