木马免杀绝招以及常用的修改方法

木马免杀绝招以及常用的修改方法

概述

在当前网络安全形势下,许多杀毒软件都会对常见的木马进行识别和拦截,因此,黑客们会采用各种方式对木马样本进行修改,以实现免杀的目的。本文将介绍一些常用的木马免杀绝招以及修改方法,帮助读者更好地了解木马免杀技巧。

方法一:代码混淆

策略

代码混淆是指将程序代码进行加密、压缩、重写以及添加虚假代码等方式,使得病毒代码难以被查杀。通过混淆,可以使得病毒样本不易被杀软所识别,同时可以减小样本的大小。

示例

# 混淆前
def func():
    print("Hello,world.")

# 混淆后
a = ord('H') << 6
b = ord('e') << 6
c = ord('l') << 6
d = ord('l') << 6
e = ord('o') << 6
f = ord(',') << 6
g = ord('w') << 6
h = ord('o') << 6
i = ord('r') << 6
j = ord('l') << 6
k = ord('d') << 6
l = ord('.') << 6
m = a + b + c + d + e + f + g + h + i + j + k + l
exec(chr(m >> 6) + chr(m & 0x3f))

方法二:反调试

策略

通过反调试技术,可以检测代码是否在调试器中运行,并在检测到调试器时停止运行。在常见的反调试技术中,可以使用IsDebuggerPresent函数进行检测调试器是否存在,以及使用PEB结构体中的BeingDebugged字段检测是否正在被调试等。

示例

// 反调试前
int main()
{
    printf("Hello,world.\n");
    return 0;
}

// 反调试后
int main()
{
    if (IsDebuggerPresent()) {
        printf("Debugger detected.\n");
        return 0;
    }
    printf("Hello,world.\n");
    return 0;
}

方法三:虚拟化

策略

虚拟化技术可以将恶意代码嵌入到虚拟机中运行,并使用加密等方式难以被杀软所识别。通过虚拟化,可以隐藏程序的真实行为,增加杀软的检测难度。

示例

# 虚拟化前
def func():
    print("Hello,world.")

# 虚拟化后
import base64
import marshal

data = base64.b64decode("YwAAAAXzAAAADwAAAGwAAABlAAAAcQEAAEAAAEiAAAAQQAAAHgAAAAAAAAAAABxAgAAbAAAAA==")
code = marshal.loads(data)
exec(code)

方法四:反射

策略

通过反射技术,可以动态地生成代码并执行,增加恶意代码的多样性,从而增加杀软的检测难度。通过反射,可以动态地生成函数、类等,并且可以加入各种混淆、加密等措施来尽可能的隐藏恶意代码。

示例

# 反射前
import os
os.system("calc.exe")

# 反射后
import os

function_name = "".join([chr(ord(i) - 1) for i in ['d', 'p', 'n', 't', 'z', 't', '(']])
function = getattr(os, function_name)

parameter = "".join([chr(ord(i) - 1) for i in ['dbmd', '.gf', 'f']])
function(parameter)

结论

针对木马免杀,可以采用多种方式进行修改,如代码混淆、反调试、虚拟化和反射等。通过这些技巧的使用,可以增加恶意代码的多样性,并增加杀软的检测难度,从而达到免杀的目的。当然,这些技巧也都有着各自的局限性,需要根据具体情况灵活运用。

营销型网站