网络技术知识
木马免杀绝招以及常用的修改方法
木马免杀绝招以及常用的修改方法
概述
在当前网络安全形势下,许多杀毒软件都会对常见的木马进行识别和拦截,因此,黑客们会采用各种方式对木马样本进行修改,以实现免杀的目的。本文将介绍一些常用的木马免杀绝招以及修改方法,帮助读者更好地了解木马免杀技巧。
方法一:代码混淆
策略
代码混淆是指将程序代码进行加密、压缩、重写以及添加虚假代码等方式,使得病毒代码难以被查杀。通过混淆,可以使得病毒样本不易被杀软所识别,同时可以减小样本的大小。
示例
# 混淆前
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)
结论
针对木马免杀,可以采用多种方式进行修改,如代码混淆、反调试、虚拟化和反射等。通过这些技巧的使用,可以增加恶意代码的多样性,并增加杀软的检测难度,从而达到免杀的目的。当然,这些技巧也都有着各自的局限性,需要根据具体情况灵活运用。