如何避免DLL Main?

时间:2014-10-08 21:31:28

标签: c++ multithreading dll reverse-engineering dllmain

我以前曾问过这个问题,尽管人们忽略了它。然后,这是一个冗长的话题,因此我会尝试将其缩短。

当您将DLL注入您不拥有的程序时,如何避免使用DLL Main?很多人可能知道,当你在DLL main中使用一个线程时,它只会导致程序暂停(在大多数情况下)。

我真的想知道实际从一个Injected DLL运行一个线程而不把它放在DLL Main中的最佳方法......对我来说这似乎是不可能的,因为我不知道如何。

我知道你可以把程序必须加载的编译后的.dll加载到文件夹中,但它不是真正的DLL,例如DirectX,并加载那里所需的DLL但是我现在正在这样做它意味着通过DirectX hack控制我的程序。有人已经注入另一个程序(根据MySQL调试日志)。我知道无论如何这可以通过注射器完成,但它会更难。

有没有人知道某种方式,因为我现在可以杀死一种方式?

编辑:对于这个重复的帖子,我不会使用这个注入我的DLL。

int InjectDLL(HANDLE Handle, const char* Path)
{
    void *Lib, *String;
    Lib = (void*)(LoadLibraryA);
    String = (void*)VirtualAllocEx(Handle, NULL, strlen(Path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(Handle, (void*)String, Path, strlen(Path), NULL);
    CreateRemoteThread(Handle, NULL, NULL, (LPTHREAD_START_ROUTINE)Lib, (void*)String, NULL, NULL);
    return true;
}

然而,在Injected DLL中使用DllMain会导致系统停止,因为我已达到它太多的程度。

我需要一种方法来阻止系统暂停,并可能在DLLMain之外创建线程,例如,可能是一种启动DLL线程的方法,而不必在我注入的DLL中使用DLLMain。

0 个答案:

没有答案