首页
学习
活动
专区
工具
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.5K30

    白加黑免杀制作(详细)

    (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 等函数。

    7.4K71

    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.2K20

    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 应用程序的入口点

    2.3K20

    最新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,可以看到有

    3.1K30

    从原理解析如何防御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.8K10

    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.4K10

    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

    59920

    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.6K20

    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

    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.8K10

    红队提权 - 可写系统路径权限提升

    当这些服务之一加载攻击者提供的 DLL 时,Windows 加载程序将调用 DllMain 函数,而不管目标服务调用了哪些导出的函数。执行 DllMain 后,攻击者可以将自己添加到本地管理员组中。...操作员犯的一个常见错误是在 DllMain 中的被劫持进程的上下文中调用反射加载程序。...因为 Windows 加载程序在 DllMain 执行期间持有加载程序锁,所以当反射加载程序还调用 LoadLibrary 并等待加载程序锁被释放时,从 DllMain 调用反射加载程序会导致进程死锁。...Gregory 发现此服务通过调用 LoadLibrary 函数在启动时尝试加载 WptsExtensions.dll 文件。...使用 NetMan 服务进行开发 通过使用公开的 COM 接口枚举连接属性,Labro 可以触发对 LoadLibrary 的调用以加载“wlanapi.dll”文件 。

    99940
    领券