首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

注入时未调用DllMain(),但使用LoadLibrary()调用

注入时未调用DllMain(),但使用LoadLibrary()调用。

在Windows操作系统中,DllMain()是一个特殊的函数,用于在动态链接库(DLL)加载或卸载时执行一些初始化或清理操作。然而,有时候在进行DLL注入时,并不会直接调用DllMain()函数,而是使用LoadLibrary()函数来加载DLL。

LoadLibrary()函数是Windows API提供的一个函数,用于加载指定的DLL文件并返回一个句柄。它可以在运行时动态加载DLL,并将其链接到当前进程中。通过LoadLibrary()函数加载DLL,可以绕过DllMain()函数的调用,从而实现DLL注入。

注入时未调用DllMain(),但使用LoadLibrary()调用的情况下,可能会导致一些问题和限制。首先,由于没有调用DllMain()函数,DLL中的一些初始化操作可能无法执行,可能会影响DLL的正常功能。其次,由于没有调用DllMain()函数,DLL中的一些全局变量可能无法正确初始化,可能会导致未定义的行为或错误。

然而,有些情况下,注入时未调用DllMain(),但使用LoadLibrary()调用也是有一定优势和应用场景的。例如,某些情况下需要在运行时动态加载DLL,并且不需要执行DLL的初始化操作,或者已经通过其他方式进行了初始化。此时,可以使用LoadLibrary()函数来加载DLL,避免不必要的初始化开销。

对于这种情况,腾讯云提供了一些相关产品和服务,如云函数(Cloud Function)和容器服务(Container Service)。云函数是一种无服务器计算服务,可以在云端运行代码片段,可以通过LoadLibrary()函数加载DLL,并执行相应的功能。容器服务则提供了一种轻量级的容器化解决方案,可以在容器中运行应用程序,同样可以通过LoadLibrary()函数加载DLL。

总结起来,注入时未调用DllMain(),但使用LoadLibrary()调用是一种特殊的DLL加载方式,适用于某些特定的场景和需求。在使用时需要注意可能带来的问题和限制,并根据具体情况选择合适的解决方案和腾讯云产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 进程注入1:通过LoadLibrary注入DLL

    如果DLL使用DllMain函数对进程的每个线程执行初始化,则运行时动态链接可能会导致问题,因为对于调用LoadLibrary或LoadLibraryEx之前存在的线程,不会调用入口点。...请注意,只有在进程加载DLL之后创建的线程才使用此值调用DLL的入口点函数。使用LoadLibrary加载DLL时,现有线程不会调用新加载的DLL的入口点函数。...我们可以依次使用上面的4种情况调用MessageBox,然后观察。 // dllmain.cpp : 定义 DLL 应用程序的入口点。...//:我们也可以在这里执行代码 return TRUE; } 构建项目(ctrl+b)后,我们可以使用rundll32.exe进行测试。...构造注入程序 LoadLibrary是Windows API中的一个函数,它可以将一个DLL加载到调用进程和调用的内存中DLLMain(将指定的模块加载到调用进程的地址空间中) 使用语法 C ++ HMODULE

    2.4K30

    白加黑免杀制作(详细)

    (3)DllMain 是否会执行 静态调用及动态调用使用 LoadLibrary 函数时 DllMain 如果存在的话默认会被执行,如果动态调用使用的是 LoadLibraryEx 函数加载 dll,...函数,也就同样无法利用 DllMain 上线: 使用 LoadLibrary 将 DLL 追加到进程中,没有相应地调用 FreeLibrary 函数,则值为 DLL_PROCESS_DETACH 的入口点函数将不会被调用...DllMain 上线与在导出函数中上线有很大不同,在导出函数中上线直接使用普通的 shellcode 加载器就行了, DllMain 中上线则不同。...此外微软还列举了 DllMain 中不能使用的一些函数如直接或间接使用 LoadLibrary(Ex)、GetStringTypeA 等,CreateProcess 和 CreateThread 可以调用存在风险...: 如果还使用之前的加载器上线,在调试时你会发现程序一直在运行迟迟没有上线,一般这种情况是造成死锁了,由于 shellcode 中调用了 Sleep 和 LoadLibrary 等函数。

    5.9K71

    sRDI – Shellcode 反射 DLL 注入

    这涉及在远程进程中启动一个线程以从 WinAPI 调用LoadLibrary()”。这将从磁盘读取(恶意)DLL 并将其加载到目标进程中。...完成后,会调用DLLMain”,并且您的恶意软件会在内存中运行。 几年过去了,更新这些技术的工作很少。内存注入远远领先于时代,并允许所有 APT 等轻而易举地通过 AV。...这旨在允许在“DLLMain”之后调用附加函数,并支持将用户参数传递给所述附加函数。在调用 ReflectiveLoader 之前放置了一些 shellcode 技巧和引导程序来实现这一点。...用户数据和位置(引导程序)将执行传递给 RDI 解压 DLL 并重新映射部分 (RDI) 调用 DLLMain (RDI) 通过散列名称 (RDI) 调用导出函数 - 可选 将用户数据传递给导出函数 (...LoadLibrary 调用的监控工具。

    1.9K00

    使用 Cobalt Strike 的 Beacon 对象文件自定义 DLL 注入

    BOF 的缺点 BOF 是调用 Win32 API 和有限 Beacon API 的单文件 C 程序。不能用来构建大型项目。 Cobalt Strike 不会将 BOF 链接到 libc。...最后,我们在远程进程中创建一个线程,它以 dll 路径作为参数调用 LoadLibrary。...2.LoadLibrary 可以挂在远程进程中,阻止我们的注入。 3.注入时会创建新线程。...调用 DLL 入口点 (DllMain)。 这种技术非常有效并且相当安全。...为了创建这个注入器,我将使用一种稍微不同的技术,称为手动映射,它执行与反射 dll 注入相同的步骤,处理重定位和动态加载依赖项(等),所有这些都来自注入器,因此 dll不必包含任何额外的代码。

    2.1K20

    DLL劫持详解

    这个api的dll,这里找有这个api的原因是因为如果该dll的调用栈中存在有 **LoadLibrary(Ex)**,说明这个DLL是被进程所动态加载的。...image-20211002164621431 LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary(L"DLL...vs2019编译一个dll image-20211002165327811 这里使用到库调用system()生成弹出一个计算器即可 image-20211002165427446...,函数执行完成过后return到Load函数,这里跟过去看看 image-20211002230640279 Load函数首先把libuvOrg.dll即原来的dll文件写入缓冲区,使用LoadLibrary...这里主要是尝试一下之前判断的工具的流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找的是CrashRpt.dll,可以看到有

    2K20

    实战 | DLL劫持思路和研究

    、路径以及结果 然后这里找一个需要用到loadlibrary这个api的dll,这里找有这个api的原因是因为如果该dll的调用栈中存在有 **LoadLibrary(Ex)**,说明这个DLL是被进程所动态加载的...LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary(L"DLL绝对路径")加载。...,如果LoadLibrary成功则继续调用InitializeAddresses()函数,继续跟过去看看 这里可以发现InitializeAddresses这个函数的作用都是调用GetAddress去...这里主要是尝试一下之前判断的工具的流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找的是CrashRpt.dll,可以看到有...4个导出函数 那么这里用vs新建一个dll,把这4个导出函数由我们自己来写,这里尝试不转发即时调用,如果不成功在尝试转发 完整代码如下 // dllmain.cpp : 定义 DLL 应用程序的入口点

    2K20

    最新dll劫持详解

    这个api的dll,这里找有这个api的原因是因为如果该dll的调用栈中存在有 LoadLibrary(Ex),说明这个DLL是被进程所动态加载的。...[image-20211002164621431.png] LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary...在动态调用的时候,一般代码通过loadlibrary去加载dll 并作为参数传到到导出函数,这里看一下导入表,发现他这里有一个导出函数 [image-20211002192257020.png] 编写dll...,函数执行完成过后return到Load函数,这里跟过去看看 [image-20211002230640279.png] Load函数首先把libuvOrg.dll即原来的dll文件写入缓冲区,使用LoadLibrary...这里主要是尝试一下之前判断的工具的流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找的是CrashRpt.dll,可以看到有

    3K30

    从原理解析如何防御DLL劫持

    每个DLL都有一个入口函数(DLLMain),系统在特定环境下会调用DLLMain。在下面的事件发生时就会调用dll的入口函数: 1.进程装载DLL。 2.进程卸载DLL。...隐式链接方式一般用于开发和调试,而显式链接方式就是我们常见的使用LoadLibary或者LoadLibraryEx函数(:涉及到模块加载的函数有很多)来加载DLL去调用相应的导出函数。...调用LoadLibrary或者LoadLibraryEx函数时可以使用DLL的相对路径也可以使用绝对路径, dll路径搜索规则 但是很多情况下,开发人员都是使用了相对路径来进行DLL的加载。...根据MSDN文档的约定,在使用了DLL的相对路径 调用LoadLibrary函数时,系统会依次从下面几个位置去查找所需要调用的DLL文件。 1.程序所在目录。 2.加载 DLL 时所在的当前目录。...这里我们制作一个弹窗的dll来进行测试, 1.首先使用VS2019新建一个DLL项目 2.在生成的dllmain.cpp下添加 Bash void msg() { MessageBox(0

    2.6K10

    CC++ 远程线程DLL注入

    编译方式再试试 //我编译了64位的DLL,然后还是崩溃的,之后我发现了应该是我函数地址传的有问题 //因为32位的LoadLibraryA地址是DWORD,64...所以仅仅改变编译方式还不够 //必须用一个足够容纳8个字节地址的类型来保存,这样就够了 //另外一个需要注意的问题就是,为什么我在我这个进程中得到的LoadLibrary...#include #include /* 链接 */ #pragma comment (lib, "Psapi.lib") /* 函数声明 */ // 使用...DWORD fdwReason, // 调用的情况 LPVOID lpReserved) // reserved { // 在不同的情况下都会调用DllMain函数,分别处理...这样可行的原因: 线程的函数原型DWORD ThreadProc(LPVOID lpParam) LoadLibrary的函数原型HMODULE LoadLibrary(LPCTSTR lpFileName

    58520

    Cobaltstrike4.0——记一次上头的powershell上线分析

    ,来加载我们的dll,然后触发dll里面的dllmain方法,在其中实现我们要执行的恶意代码,这里就比较随意了,不用使用shellcode,可以直接使用api之类的,因为这个dll是被加载到了目标进程里面...,这也是为什么我们在之前要将dll路径写到宿主程序里面的原因)) 6、Loadlibrary触发dllmain里面第二个参数为DLL_PROCESS_ATTACH的场景 (dll里面的DllMain调用的场景...的最后调用Dllmain方法(dll中ep所在的点就是Dllmain函数的起始地址)。...LoadLibrary,自己使用c实现LoadLibrary要干的活: 这个开源项目有两部分代码: 1、inject是“注射器”进程的实现。...2、动态调试下,去追追dllmain调用过程,但是这里有一个问题,笔者的思路就是将dll丢到od里面,我们强制修改eip,使其执行dllmain方法,然后去分析,那么问题就出现了,dllmain方法里面如果使用了一些变量是在重定向表里面的话就不太行

    1.3K10

    Windows注入与拦截(1) — DLL注入的基本原理「建议收藏」

    很多时候我们还是需要跨越进程的边界来访问另一个进程地址空间,比如: 我们要从另一个进程创建的窗口来派生子类窗口。比如附着在windows资源管理器上的一些小插件等。...干一些羞羞的事情… 为了满足上面的这些需求,我们可以使用DLL注入的技术,将我们自己开发的dll注入到另一个进程的地址空间中,让dll中的代码在该进程的地址空间中执行,那么我们就可以在那个中进程为所欲为了...理论上任何DLL都可以被注入到其他进程之中,但是大多数情况下,我们注入到其他进程之中是为了实现某些功能、做某些事情的,所以我们需要在我们的DLL被注入之后,DLL中的功能代码能够被调用执行。...我们知道DLL被首次载入到进程中时,会收到DLL_PROCESS_ATTACH的通知,即调用DllMain函数,并且参数fdwReason的值被设为DLL_PROCESS_ATTACH。...(Ex)函数一直无法返回(dll都是通过LoadLibrary(Ex)函数来加载的),所以我们一般会在DLL_PROCESS_ATTACH通知处理过程中创建一个子线程,将业务逻辑放置到该子线程中执行,代码如下

    1.5K20

    LoadLibrary加载动态库失败

    某程序员经过一番周折后通过以下语句调用成功 hDll = LoadLibrary(TEXT(“user32.dll”)); 再经过一番百度google后发现,原来是字符格式惹的祸。...这里的LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字符串(宽字符串),而非窄字符串。...因此,利用TEXT宏使其自动选择了正确的字符集,dll调用成功。 (2)dll里有全局变量初始化失败或dllmain函数返回false。这种情况需要根据自己的业务代码具体分析排除与定位。...(3)64位进程调用了32位dll动态库的问题。...如果您真都没有源码,只能如此“尴尬”的想正常运行,可以参见资料《64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考》 (4)其他原因 4.1 LoadLibrary函数跟LoadLibraryEx

    2.7K10

    c++DLL编程详解

    非MFC动态库:不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用; MFC规则DLL :包含一个继承自CWinApp的类,其无消息循环 MFC扩展DLL:采用MFC...DLL的调用方式: 动态调用:由“LoadLibrary-GetProcAddress-FreeLibrary”系统Api提供DLL加载-DLL函数地址获取-DLL释放方式。正如上面那个例子。...当调用某DLL的应用程序结束时,若系统中还有其它程序使用该DLL,则Windows对DLL的应用记录减1,直到所有使用该DLL的程序都结束时才释放它。静态调用方式简单实用,但不如动态调用方式灵活。...这意味着不能直接在应用工程中引用DllMain函数,DllMain是自动被调用的。...函数在DLL被加载和卸载时被调用,在单线程启动和终止时,DLLMain函数也被调用,ul_reason_for_call指明了被调用的原因。

    2.3K60

    绝大部分测试和开发人员都不知道的DLL

    显示加载方式加载DLL 使用动态方式来加载动态链接库时,需要用到LoadLibrary函数。该函数的作用就是将指定的可执行模块映射到调用进程的地址空间。...调用原型为: HMODULE LoadLibrary(LPCTSTR lpFileName); LoadLibrary函数不仅可以加载DLL,还可以加载可执行模块(Exe)。...如果调用成功,LoadLibrary函数将返回所加载的那个模块的句柄。返回类型HMODULE和HINSTANCE可以通用(32位windows系统)。...也就是说在需要时才被加载到内存中,并被映射到调用进程的地址控件中。需要说明的是,隐式链接方式访问DLL时,在程序启动时也是通过LoadLibrary函数加载该进程需要的动态链接库的。 6....DllMain函数 如果提供了DllMain函数(该函数是可以选择存在的),那么在此函数中不要进行太复杂的调用。因为在加载该动态链接库时,可能还有一些核心动态链接库没有被加载。

    75720
    领券