Linux 免杀

embedded/2025/1/12 7:59:09/

Linux 免杀概念

在网络安全领域,“免杀” 主要是指让恶意软件(如病毒、木马、后门程序等)躲避杀毒软件(Antivirus,AV)的检测。在 Linux 环境下,杀毒软件会通过多种方式来检测恶意程序,例如基于特征码匹配、行为分析、启发式检测等。免杀技术就是要对恶意软件进行处理,使其能够在不被检测到的情况下在目标系统中运行。

代码混淆

变量名和函数名混淆:

目的:改变程序中的变量名和函数名,使杀毒软件难以通过简单的字符串匹配(如特征码检测)来识别恶意代码。

步骤:如果是用高级编程语言(如 C、Python 等)编写的恶意软件,可以使用脚本或手动修改代码来重命名变量和函数。例如,对于一个简单的 Python 恶意脚本,原始代码如下:

def malicious_function():malicious_variable = "敏感信息"print(malicious_variable)
malicious_function()

混淆后的代码可以是:

def f1():v1 = "敏感信息"print(v1)
f1()

代码结构调整:

目的:打乱代码的逻辑结构,让杀毒软件难以分析代码的真实意图。

步骤:可以将一个函数拆分成多个小函数,或者改变函数的调用顺序。例如,对于一个简单的 C 语言恶意程序:

#include <stdio.h>void malicious_function() {printf("恶意操作开始\n");// 这里可能是一些恶意操作,如文件窃取等printf("恶意操作结束\n");
}int main() {malicious_function();return 0;
}

调整后的代码可以是:

#include <stdio.h>void helper1() {printf("恶意操作开始\n");
}void helper2() {// 这里可能是一些恶意操作,如文件窃取等
}void helper3() {printf("恶意操作结束\n");
}int main() {helper1();helper2();helper3();return 0;
}

加密与解密

加密恶意代码部分:

目的:对恶意软件中的关键部分(如执行恶意操作的代码块、包含敏感信息的变量等)进行加密,使杀毒软件无法直接识别其内容。

步骤:以一个简单的 Python 脚本为例,假设要加密一个包含恶意命令的字符串。可以使用简单的加密算法,如异或(XOR)加密。

def xor_encrypt(data, key):encrypted_data = ""for char in data:encrypted_char = chr(ord(char) ^ key)encrypted_data += encrypted_charreturn encrypted_datamalicious_command = "rm -rf /important_files"
encryption_key = 123
encrypted_command = xor_encrypt(malicious_command, encryption_key)
print(encrypted_command)

在运行时解密并执行:

目的:在恶意软件运行时,对加密的部分进行解密并执行恶意操作。

步骤:继续上面的 Python 例子,在运行时解密并执行恶意命令(在实际恶意软件中,可能会通过更复杂的方式触发解密后的操作)。

def xor_decrypt(encrypted_data, key):return xor_encrypt(encrypted_data, key)decrypted_command = xor_decrypt(encrypted_command, encryption_key)
# 注意:以下代码仅为示例,实际执行恶意命令是非法的
# 在合法的安全测试场景下,可以替换为无害的模拟操作
import subprocess
subprocess.call(decrypted_command, shell=True)

行为伪装

模拟正常软件行为:

目的:让恶意软件的行为看起来像正常的软件活动,避免被杀毒软件通过行为分析检测到。

步骤:例如,如果恶意软件需要进行网络连接,先进行一些正常的网络请求,如查询公共的 DNS 服务器信息。在 Python 中,可以使用socket模块来模拟正常的网络查询。

import socket# 模拟正常的DNS查询
def normal_dns_query():try:s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.sendto(b"\x09\x3a\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\x77\x77\x77\x06\x67\x6f\x6f\x67\x6c\x65\x03\x63\x6f\x6d\x00\x00\x01\x00\x01", ("8.8.8.8", 53))data, addr = s.recvfrom(1024)print(data)except Exception as e:print(e)finally:s.close()normal_dns_query()

然后再在适当的时候执行恶意的网络连接行为,并且尽量使恶意网络连接的参数(如端口、协议等)看起来不那么可疑。

利用系统调用混淆

动态加载系统调用:

目的:通过动态加载系统调用的方式,使杀毒软件难以通过静态分析来确定程序的真实意图。

步骤:在 Linux 下的 C 语言程序中,可以使用dlopen和dlsym函数来动态加载系统调用相关的函数。例如,要动态加载open函数用于文件操作。

#include <stdio.h>
#include <dlfcn.h>int main() {void *handle;int (*open_func)(const char *, int);char *error;handle = dlopen("libc.so.6", RTLD_LAZY);if (!handle) {fprintf(stderr, "%s\n", dlerror());return 1;}open_func = (int (*)(const char *, int))dlsym(handle, "open");if ((error = dlerror())!= NULL) {fprintf(stderr, "%s\n", error);return 1;}// 这里可以使用open_func进行文件操作,模拟正常或恶意行为// 注意:以下只是示例,避免进行恶意文件操作int fd = open_func("/tmp/test.txt", O_RDONLY);if (fd == -1) {perror("open");} else {printf("文件已打开\n");}dlclose(handle);return 0;
}

http://www.ppmy.cn/embedded/153239.html

相关文章

centos systemd方式配置jar开机自启

将后端服务&#xff08;一个 Java 应用程序&#xff09;注册为 CentOS 上的 systemd 服务&#xff0c;可以让你方便地管理其启动、停止和重启。以下是详细步骤&#xff1a; 创建 systemd 服务单元文件 创建一个 systemd 服务单元文件&#xff0c;例如 /etc/systemd/system/de…

如何设置通过Visual Studio(VS)打开的C#项目工具集?

在Visual Studio&#xff08;VS&#xff09;中&#xff0c;C#项目通常不直接涉及“工具集”的设置&#xff0c;因为C#编译器&#xff08;csc.exe&#xff09;是.NET Framework或.NET SDK的一部分&#xff0c;而不是像C项目那样依赖于特定的编译器版本或工具集。然而&#xff0c…

矩阵和向量点乘叉乘元素乘

Date: 2025.01.07 Author: Xin Pan 回顾下矩阵和向量的各种乘法。 向量 点乘 又叫做点积、内积、数量积、标量积。 a [ a 1 , a 2 , . . . , a n ] a[a_1,a_2,...,a_n] a[a1​,a2​,...,an​]和 b [ b 1 , b 2 , . . . , b n ] b[b_1,b_2,...,b_n] b[b1​,b2​,...,bn​…

玄机-第一章 应急响应-webshell查杀的测试报告

目录 一、测试环境 二、测试目的 三、操作过程 Flag1 Flag2 Flag3 Flag4 四、结论 一、测试环境 靶场介绍&#xff1a;国内厂商设置的玄机靶场&#xff0c;以应急响应题目著名。 地址&#xff1a;https://xj.edisec.net/challenges/25 靶机IP&#xff1a;161.189.92.25…

国产编辑器EverEdit - 打印与打印预览

1 打印与打印预览 1.1 应用场景 如果需要打印代码或打印编辑的文字&#xff0c;而又不想使用Word/WPS等软件&#xff0c; EverEdit自己也提供了一个不错的打印功能。 注&#xff1a;业界没有几个编辑器还在“打印预览”上下功夫&#xff0c;EverEdit的“打印预览”功能算是文…

kvm虚拟机网络桥接和读取ip

操作步骤和桥接模式配置总结&#xff1a; 操作步骤总结 1. 配置桥接网络 br0 在主机上创建桥接网络 br0&#xff0c;并绑定物理网卡 enp1s0&#xff1a; sudo brctl addif br0 enp1s0 sudo ip addr flush dev enp1s0 sudo ip link set enp1s0 up sudo ip link set br0 up为桥接…

基于php的web系统漏洞攻击靶场设计与实践

web系统漏洞攻击靶场 摘 要 互联网极速发展的同时&#xff0c;也会带来一些安全性的风险&#xff0c;一些不为人知的安全问题也逐渐暴露出来。近年来&#xff0c;媒体不断披露了许多网络安全事故&#xff0c;许多网络应用程序被黑客攻击&#xff0c;导致内部数据外泄&#xf…

高级 SQL 技巧:提升数据查询与分析能力

一、窗口函数(Window Functions) 窗口函数是一种特殊的 SQL 函数,它能够对一组行进行计算,而不需要将这些行聚合为单个输出行。窗口函数通常与 OVER 子句一起使用,定义一个窗口,即一组行的集合。 1. 排名函数 ROW_NUMBER():为每一行分配一个唯一的序号,序号在窗口内是…