免杀Packer框架开发
Arcueid 安全工具 190浏览 · 2025-02-21 06:12

成品https://github.com/Arcueld/EvasionPacker

前言

项目花了几天边玩边写整出来的 有很多没有抽出来的函数和合并函数 项目结构可能比较混乱 后面有时间可能会改(

大体架构分析

为了实现一个有效的Shellcode免杀框架,我们将框架拆解成以下几个核心模块,并对每个模块进行详细设计:

1shellcode处理

该模块负责处理Shellcode 我们可以通过不同的方式载入Shellcode 如写死在.data段 分离加载 远程拉取

1内存分配

该模块负责分配private属性或者mapped属性的内存 给RW权限 解密shellcode

1执行方式

该模块负责提供多种执行Shellcode的方式

1杂项

该模块包括一些辅助功能,如反调试、反虚拟化等技术

1配置与控制

由于该框架作为一个Packer工具,需要具备一定的灵活性来适应不同的需求。因此,框架将通过config.h文件来管理全局变量和配置项 struct.h 则配置一些结构,枚举 增加可读性

1GUI

让AI梭了一个出来 用的pyqt 用python的原因是shellcode处理部分好写

执行方式

我们先看执行方式部分

首先定义了一个结构 包含地址和长度两个成员

C++
复制代码
执行方式的枚举

通过ExecuteShellcode函数进行shellcode的执行



ExecuteShellcode的实现如下 通过判断枚举 进入具体的执行方法



后续有扩展需求只需添加枚举 创建对应的函数实现即可

函数内关键的封装是DynamicInvoker类 如配置了syscall 则走syscall的实现 否则动态获取nt函数调用

静态方法Invoke是模板方法 接收函数地址 hash 和对应参数

这里以NtProtectVirtualMemory为例

适用模板来指定返回值类型 在此是NTSTATUS

传递了NtProtectVirtualMemory的地址和hash后传入调用NtProtectVirtualMemory的具体参数

判断全局变量isSyscall的状态决定是否走syscall

如果syscall没有获取到ssn则动态调用函数

这里syscall的实现基于开源项目https://github.com/evilashz/PigSyscall

该项目是poc 多次调用在解密的时候会因为多次解密导致执行失败





加个判断 防止重复解密

内存分配

第一个NtAllocateVirtualMemoryStruct 对应private属性

第二个NtMapViewOfSection 对应mapped属性

第三个ModuleStomping 对应image属性 只能跑小的shellcode



shellcode处理

暂时只写了本地和分离 没写远程拉取

加密部分只提供了XOR RC4 AES 感觉意义不大就只提供了三种

SGN调用及加密部分在py实现

分离加载使用lsb隐写入随机生成的图片名称可自定义

杂项

defender的专项对抗使用https://github.com/hfiref0x/UACME/blob/master/Source/Shared/windefend.c

只是把里面的WindowsAPI全替换成了动态调用

还有一些常见的反沙箱技术

使用编译时加密 隐藏一些字符串





配置与控制

基于config.h的全局变量来判断

python直接模板替换

效果

用的calc的shellcode测试 静态还算看得过去吧







0 条评论
某人
表情
可输入 255