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内置方法进行代码混淆的更多相关文章

  1. 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...

  2. Python内置方法详解

    1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名. 可以查看所有的字符串的内置方法,如: 1> count ...

  3. python 内置方法、数据序列化

    abc(*args, **kwargs) 取绝对值 def add(a,b,f): return f(a)+f(b) res = add(3,-6,abs) print(res) all(*args, ...

  4. python内置方法

    1. 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是 ...

  5. Python内置方法的时间复杂度(转)

    原文:http://www.orangecube.net/python-time-complexity 本文翻译自Python Wiki本文基于GPL v2协议,转载请保留此协议. 本页面涵盖了Pyt ...

  6. Python内置方法的时间复杂度

    转载自:http://www.orangecube.NET/Python-time-complexity 本页面涵盖了Python中若干方法的时间复杂度(或者叫"大欧"," ...

  7. Python内置方法/函数

    abs() 返回数字的绝对值. abs(x) all() 用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空. ...

  8. Python 内置方法

    1. abs() 取绝对值函数 #!/usr/bin/env python # _*_ coding: UTF-8 _*_ # Author:taoke i = 100 print(abs(i)) i ...

  9. python内置方法大全

    数学运算 abs:求数值的绝对值 >>> abs(-2) 2 divmod:返回两个数值的商和余数 >>> divmod(5,2) (2, 1) >> ...

随机推荐

  1. HashSet、CopyOnWriteArraySet、ConcurrentSkipListSet源码解析(JDK1.8)

    目录 HashSet源码解析 HashSet简单使用的demo HashSet中的变量 HashSet的构造函数 HashSet的add方法 HashSet的iterator方法 HashSet的si ...

  2. 在Linux CentOS上搭建Jmeter压测环境

    本文的主要内容是介绍如何在Linux CentOS 服务器上面搭建Jmeter的压测环境整个详细的流程,来满足我们日常工作中对于压力测试环境搭建.压力测试执行过程的需求. 一.首先我们要准备四个东西, ...

  3. 一文完全掌握 Go math/rand

    Go 获取随机数是开发中经常会用到的功能, 不过这个里面还是有一些坑存在的, 本文将完全剖析 Go math/rand, 让你轻松使用 Go Rand. 开篇一问: 你觉得 rand 会 panic ...

  4. 使用defineProperty实现自定义setter, 简化前端Angular的重构工作

    一.问题场景 Angular的双向绑定给我们开发提供了很大的遍历,将父scope的引用变量作为参数传递给子指令,这样就可以方便的在父作用域内进行业务操作,数据变更会自动传递到子指令.但是如果你基于一个 ...

  5. OO Unit4总结 & 结课总结

    OO Unit4总结 & 结课总结 OO课Unit4 UML解析应用技术回顾 BUAA.1823.邓新宇 2020/6/19 总结本单元三次作业的架构设计 本单元的架构设计主要是两方面. 一方 ...

  6. python 爬取王者荣耀英雄皮肤代码

    import os, time, requests, json, re, sys from retrying import retry from urllib import parse "& ...

  7. 2.1.3- 体会css样式

    css初始 css样式规则 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  8. 微信小程序 icon组件详细介绍

    这些是提供的所支持的图标样式,根据需求在此基础上去修改大小和颜色. 主要属性: 使用方式: wxml <!--成功图标--> <icon type="success&quo ...

  9. 【JDK8】Java8 新增BASE64加解密API

    什么是Base64编码? Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 基于64个字符A-Z,a-z,0-9,+,/ ...

  10. 【SpringBoot】SpringBoot 处理后端返回的小数(全局配置 + 定制化配置)

    一.抛出问题: 现在的项目中,存在这样的几个问题: 问题一.数据库存的数据类型是BigDecimal,或者代码中计算需要返回BigDecimal的值,由于BigDecimal返回给前端可能存在精度丢失 ...