注入DLL之主线程方式

目前对于APC注入方式依然还没有了解内幕, QueueUserAPC((PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)param);

但看其调用方式可以猜出一二。,基本也是插入到线程再装载DLL。

以前在黑客防线里看到过主线程注入方式装载DLL,研究了一下,发现很像是手工实现了QueueUserApc的功能。。。不过这种比直接调用API更自由灵活。

另不知怎么回事,WIN7下与黑客防线所载文章实例中的细节有些出入。

首先黑客防线里的找主线程的方式有些绕,他比较了线程时间,我也没细看,观察了一阵,发现一般第一个线程就是主线程,姑且就这么着吧

 

分析一下:【主要用于备忘,别人能不能看懂我就不知道了】

一,读取线程的等待状态下的数据,线程一般分等待与激活状态,如果没有任务就会处于等待状态,当有操作就会处于激活状态。

二,写注入代码到注入进程

     1,保存并改写线程RET时的ESP值,里面放的是调用该函数处存放的下一条指令地址。。。指向注入代码

     2,在注入的代码中,实现装载DLL,再将保存的ESP值取出,跳转到ESP指向的地址

三,激活线程。

__declspec(naked) void RemoteSub()
{
    _asm
    {
        push ebx
            push eax
            pushfd
            mov ecx, 00000000
            push ecx
            add ecx, 8
            push ecx
            sub ecx, 4
            call[ecx]
            pop ecx
            popfd
            pop eax
            pop ebx
            jmp dword ptr[ecx]
    }
}

 

posted @ 2015-06-10 18:06  笔直的一道弯  阅读(1209)  评论(0编辑  收藏  举报