关于 Jektor
Jektor 是一款功能强大的 Windows 用户模式 Shellcode 执行测试工具, 该工具可以帮助广大研究人员了解和测试恶意软件所使用的各种不同技术.
该工具主要针对的是 Shellcode 注入技术, 可以演示恶意软件在目标系统上执行 Shellcode 时所使用的技术方法, 其中包括:
动态解析 API 函数以避免 IAT 包含
使用未记录的 NT Windows API 函数
通过 CreateThread 执行本地 Shellcode
通过 CreateRemoteThread 执行远程 Shellcode
通过 QueueUserAPC 支持本地 Shellcode 注入
通过 EnumTimeFormatsEx 支持本地 Shellcode 注入
通过 CreateFiber 进行本地 Shellcode 注入
反病毒检测
在使用动态函数地址解析时, 将一组 NOP 预挂起到 Msfvenom 异或加密 Shellcode Payload 后, 可以绕过 Windows Defender.
IAT 导入规避
Jektor 利用了动态函数地址解析, 并使用了 LoadLibrary 和 GetProcessAddress 来增加了静态分析的难度.
除此之外, 很多恶意软件也不会直接调用类似 VirtualAlloc 这样的重要函数, 这也会使得调试和通过断点转储 Shellcode 变得更加困难.
工具下载
广大研究人员可以使用下列命令将该项目源码克隆至本地:
Git clone https://github.com/FULLSHADE/Jektor.git
通过 CreateThread 实现本地 Shellcode 执行
在 Windows 上, 当你想要在当前进程中创建一个新的线程, 需要调用 CreateThread 函数, 这是在一个进程中执行恶意代码或 Shellcode 时会使用的一个最基本的技术了. 此时, 我们只需要为 Shellcode 分配一个内存区域, 然后将 Shellcode 移动到分配的内存区域中, 并使用指向该区域地址的指针来调用 CreateThread 即可. 调用 CreateThread 时, 需传递 lpStartAddress 参数, 而该参数是一个指向由新创建线程所执行的应用程序定义函数的指针.
通过 EnumTimeFormatsEx 实现本地 Shellcode 执行
EnumTimeFormatsEx 是一个 Windows API 函数, 可以枚举提供的时间格式, 能够用于执行 Shellcode, 因为第一个参数可以接收用户定义的指针:
- BOOL EnumTimeFormatsEx(
- [in] TIMEFMT_ENUMPROCEX lpTimeFmtEnumProcEx,
- [in, optional] LPCWSTR lpLocaleName,
- [in] DWORD dwFlags,
- [in] LPARAM lParam
- );
使用 VirtualAlloc 为 Shellcode Payload 分配本地内存.
使用 memcpy/RtlCopyMemory 将 Shellcode Payload 移动到新分配的内存区域.
将 Shellcode 作为 EnumTimeFormatsEx 的 lpTimeFmtEnumProcEx 参数来传递, 并触发 Shellcode.
通过 QueueUserAPC 实现本地 Shellcode 执行
使用 VirtualAlloc 为 Shellcode 分配内存缓冲区.
使用 GetCurrentProcess 获取当前进程的句柄.
使用 WriteProcessMemory 向新分配的内存区域写入 Shellcode Payload.
使用 GetCurrentThread 获取当前线程的句柄.
将分配的内存区域以 pfnAPC 参数的形式提供给 QueueUserAPC, 并将新创建的 APC 程序加入队列.
通过调用未记录的 NtTestAlert 函数触发 Shellcode Payload, 该函数将清除当前线程的 APC 队列.
通过关闭当前线程和当前进程的句柄来执行清理任务.
项目地址
Jektor:[GitHub 传送门 https://github.com/FULLSHADE/Jektor ]
鸿蒙官方战略合作共建 --HarmonyOS 技术社区
来源: http://netsecurity.51cto.com/art/202201/699255.htm