利用Python反序列化运行加载器实现免杀1

preview
需积分: 0 7 下载量 175 浏览量 更新于2022-08-03 收藏 1.37MB PDF 举报
Python 反序列化是一种将序列化的数据恢复为原始对象的过程,通常用于持久化数据或在网络间传输对象。在本文中,我们将探讨如何利用 Python 的反序列化机制来规避安全软件的检测,从而实现免杀(避免杀毒软件的检测)。这种方法涉及到通过反序列化过程隐藏恶意代码的执行,使其看起来像是正常操作。 我们要理解 Python 中的 `__reduce__` 方法。这是一个特殊方法,当对象被序列化时会被调用。`__reduce__` 返回一个元组,该元组包含用于重建对象的信息,如一个可调用的对象和一些参数。在示例代码中,`__reduce__` 返回 `(subprocess.Popen, (('calc.exe',),))`,这意味着在反序列化时,`subprocess.Popen` 函数将会被调用,执行 `calc.exe` 命令,即打开计算器程序。 为了实现免杀,作者创建了多个类,每个类都有 `__reduce__` 方法,通过 `eval` 函数执行不同的系统命令。`eval` 可以执行字符串中的 Python 代码,因此可以用来执行恶意代码。然而,由于 `eval` 仅能执行单行代码,因此对于包含多行代码的加载器,作者采取了将每行代码分开执行的方法。加载器的代码被序列化,然后解码以执行。 在提供的代码中,`test1` 类使用 `eval` 和 `urllib2` 模块获取远程数据;`test2` 类分配内存空间;`test3` 类将内存中的数据移动到可执行区域;`test4` 类则可能用于执行分配内存的地址。这些类通过 `__reduce__` 返回的 `eval` 函数执行相应的操作,从而实现了免杀的加载器。 需要注意的是,这种利用反序列化执行恶意代码的方法可能会触发一些高级安全软件的动态行为分析,因为它们会检测到反序列化过程中异常的代码执行模式。因此,实际应用中,攻击者可能还需要结合其他混淆和免杀技术,如代码注入、多级包装等,来进一步降低被检测到的风险。 Python 反序列化可以作为一种隐藏恶意代码执行的手段,通过自定义类和 `__reduce__` 方法,可以在反序列化过程中执行任意代码。然而,这种方法也面临着被安全软件检测到的风险,因为反序列化本身就是一个潜在的高风险操作。因此,在实际的安全防御中,需要警惕此类利用,而开发者在编写代码时也应避免不必要的反序列化操作,以减少潜在的安全隐患。