zoukankan      html  css  js  c++  java
  • 基于python内置方法进行代码混淆

    0x00 动态加载模块

    在python脚本中,直接使用import os、import subprocess或from os import system这种方法很容易被规则检测,即使使用其它执行命令的函数,依然容易被检测。所幸python中可以动态加载模块,而python的内置魔数方法_import_,可以直接根据字符串导入模块

    >>> a = __import__('o'+'s')
    >>> a
    <module 'os' from 'C:Python27libos.pyc'>
    >>> a.system('whoami')
    desktop-9*****8h*********
    // 从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:Python27libos.pyc'>
    >>> s = getattr(a,'sys'+'tem')
    >>> s
    <built-in function system>
    >>> s('who'+'ami')
    desktop-9*****8h*********
    

    类似于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*****8h*********
    

    这种方法下,调用eval函数但不出现eval字眼,且对e函数内的字符串进行加密或编码后,可以逃逸静态检测

    0x03 tips

    python中函数名和括号间可以添加一个或多个空格,这种情况下也许可以逃逸一些检测方法

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

    作者:bitterz
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!
  • 相关阅读:
    深入剖析ASP.NET的编译原理之二:预编译(Precompilation)
    六个建议防止SQL注入式攻击
    微软IIS的ISAPI筛选器权限法则
    IIS属性没有ASP.NET选项
    让我们的服务器更安全Win03 防木马权限设置,IIS服务器安全配置
    IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法
    深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)
    c#操作xml
    C# 容易出现insert into语句的语法错误的原因
    兼容ie/火狐的全能日历代码含农历
  • 原文地址:https://www.cnblogs.com/bitterz/p/14606550.html
Copyright © 2011-2022 走看看