关于JektorJektor是一个强大的Windows用户态shellcode执行测试工具,可以帮助研究人员了解和测试各种恶意软件使用不同的技术。该工具主要针对Shellcode注入技术,可以演示恶意软件在目标系统上执行Shellcode所使用的技术方法,包括:动态解析API函数以避免IAT包含使用未记录的NTWindowsAPI函数通过CreateThread本机执行ShellcodeExecute通过CreateRemoteThread远程shellcode支持通过QueueUserAPC进行本地shellcode注入支持通过EnumTimeFormatsEx进行本地shellcode注入通过CreateFiber进行本地shellcode注入防病毒检测使用动态函数地址解析时,预先挂起一组NOP到Msfvenom异或加密的ShellcodePayload,可以绕过Windows后卫。IATimportevasionJektor利用动态函数地址解析,使用LoadLibrary和GetProcessAddress增加静态分析难度。此外,很多恶意软件并没有像VirtualAlloc这样直接调用重要的函数,这也使得通过断点调试和转储shellcode变得更加困难。工具下载研究人员可以使用如下命令将项目源码克隆到本地:gitclonehttps://github.com/FULLSHADE/Jektor.git通过CreateThread实现本地Shellcode执行在Windows上,当你想在当前进程A中创建一个线程新线程需要调用CreateThread函数,这是在进程中执行恶意代码或Shellcode时最基本的技术。此时,我们只需要为Shellcode分配一块内存区域,然后将Shellcode移动到分配的内存区域,并使用指向该区域地址的指针来调用CreateThread。调用CreateThread时,需要传递lpStartAddress参数,它是指向新创建线程执行的应用程序定义函数的指针。EnumTimeFormatsEx是一个WindowsAPI函数,可以枚举提供的时间格式,可以用来执行Shellcode,因为第一个参数可以接收用户定义的指针:BOOLEnumTimeFormatsEx([in]TIMEFMT_ENUMPROCEXlpTimeFmtEnumProcEx,[in,optional]LPCWSTRlpLocaleName,[in]DWORDdwFlags,[in]LPARAMlParam);使用VirtualAlloc为ShellcodePayload分配本地内存。使用memcpy/RtlCopyMemory将shellcode负载移动到新分配的内存区域。将Shellcode作为EnumTimeFormatsEx的lpTimeFmtEnumProcEx参数传递并触发Shellcode。通过QueueUserAPC实现本地Shellcode执行使用VirtualAlloc为Shellcode分配内存缓冲区。使用GetCurrentProcess获取当前进程的句柄。使用WriteProcessMemory将ShellcodePayload写入新分配的内存区域。使用GetCurrentThread获取当前线程的句柄。将分配的内存区域以pfnAPC参数的形式提供给QueueUserAPC,将新建的APC程序入队。shellcodepayload是通过调用未记录的NtTestAlert函数触发的,该函数会清除当前线程的APC队列。通过关闭当前线程和当前进程的句柄来执行清理任务。项目地址Jektor:[GitHub传送门]
