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

LoadLibrary:一款能够允许Linux程序DLL文件中加载或调用函数工具

介绍 今天给大家推荐这个代码库将允许原生Linux程序从一个WindowsDLL文件中加载或调用功能函数。下面是一个简单演示示例,我将Windows Defender“移植”到了Linux平台。...工作机制 项目源码peloader目录包含一个来自ndiswrapper自定义PE/COFF加载器,这个库可以完成重定位和导入操作,并提供了一个API(dlopen)。...-C++异常扫描和处理; -IDA加载额外符号链接; -使用GDB进行调试、设置断点和栈追踪; -设置运行时函数钩子; -扫描内存崩溃问题; 如果你需要从外部添加功能,你可以自行编写stubs,实现起来也非常简单方便...构建 我们可以输入make命令来构建测试客户端: $ make 依赖 请注意,后缀.i686和:i386是非常重要,我们需要32位代码库来使用32位dll。...,你可以使用hb或hbreak命令来代替原本break命令。

3.9K80

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

使用静态库情况下,在编译链接可执行文件时,链接器复制这些函数和数据并把它们和应用程序其他模块组合起来创建最终可执行文件(.Exe文件).当发布产品时,只需要发布这个可执行文件,并不需要发布被使用静态库...显示加载方式加载DLL 使用动态方式来加载动态链接库时,需要用到LoadLibrary函数。该函数作用就是将指定可执行模块映射到调用进程地址空间。...调用原型为: HMODULE LoadLibrary(LPCTSTR lpFileName); LoadLibrary函数不仅可以加载DLL,还可以加载可执行模块(Exe)。...LoadLibrary函数有一个字符串类型(LPCTSTR)参数,该参数指定了可执行模块名称,既可以是一个dll文件,也可以是一个exe文件。...加载DLL两种方式优缺点: 采用动态加载方式,那么可以在需要时才加载DLL,而隐式链接方式实现起来比较简单,在编写客户端代码时就可以把链接工作做好,在程序可以随时调用DLL导出函数

72920
您找到你想要的搜索结果了吗?
是的
没有找到

DLL劫持详解

、路径以及结果 image-20211002164529087 然后这里找一个需要用到loadlibrary这个apidll,这里找有这个api原因是因为如果该dll调用存在有 **LoadLibrary...image-20211002164621431 LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用同一目录下,就可以使用LoadLibrary(L"DLL...即原来dll文件写入缓冲区,使用LoadLibrary展开后通过wsprintf与原dll进行判断,如果LoadLibrary成功则继续调用InitializeAddresses()函数,继续跟过去看看...但是即时调用实际上是调用了劫持dll某个函数,只不过那个函数会jmp到原本dll相应函数地址。达到效果相同,但是实现原理不同。...这里主要是尝试一下之前判断工具流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找是CrashRpt.dll可以看到有

1.9K20

实战 | DLL劫持思路和研究

api原因是因为如果该dll调用存在有 **LoadLibrary(Ex)**,说明这个DLL是被进程所动态加载。...LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用同一目录下,就可以使用LoadLibrary(L"DLL绝对路径")加载。...那就说明这个dll是动态加载,并且不需要什么导出函数可以成功被加载。并且是在程序在运行过程完成 这时候我们就需要找这个dll导出函数,导出函数可以被外部访问。...函数,这里跟过去看看 Load函数首先把libuvOrg.dll即原来dll文件写入缓冲区,使用LoadLibrary展开后通过wsprintf与原dll进行判断,如果LoadLibrary成功则继续调用...这里主要是尝试一下之前判断工具流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找是CrashRpt.dll可以看到有

1.7K20

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

Dll不能直接运行,应用在从DLL调用函数方法之一是通过运行时动态链接,即将DLL加载到程序进程空间中以便可以调用其导出函数时。...进程可以使用该句柄在对GetProcAddress,FreeLibrary或FreeLibraryAndExitThread函数调用识别DLLGetModuleHandle函数返回使用手柄GetProcAddress...请注意,只有在进程加载DLL之后创建线程才使用此值调用DLL入口点函数使用LoadLibrary加载DLL时,现有线程不会调用新加载DLL入口点函数。...构造注入程序 LoadLibrary是Windows API一个函数,它可以将一个DLL加载到调用进程和调用内存DLLMain(将指定模块加载到调用进程地址空间中) 使用语法 C ++ HMODULE...在TEXT()可以确保我们使用是正确编码。 然后使用VirtualAllocEx 函数在指定进程中提交内存区域。

2.2K30

1.12 进程注入ShellCode套接字

; 而在主函数,首先声明了一个结构体变量Param,然后调用LoadLibrary函数加载kernel32.dll库,将得到句柄存储到Param.KernelHandle。...GETPROCADDRESS:GetProcAddress函数函数指针类型,用于DLL检索导出函数或变量地址。...这些函数指针类型通常用于动态加载DLL和运行时链接导出函数。通过使用这些函数指针,程序可以在运行时获取函数地址并动态调用它们。...MyShell(ShellParametros* ptr)以供其使用,当然读者也可以使用普通变量形式,只是普通变量在参数传递时没有传递结构方便快捷,如下结构可看出,我们分别传递kernel32.dll...2.使用LoadLibrary和GetProcAddress函数获取Kernel32库LoadLibrary和GetProcAddress函数地址,并将其保存到Param结构体相应字段

23640

最新dll劫持详解

[image-20211002164621431.png] LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用同一目录下,就可以使用LoadLibrary...并且是在程序在运行过程完成 [image-20211002191903464.png] 这时候我们就需要找这个dll导出函数,导出函数可以被外部访问。...image-20211002231122423.png] 程序要调用uv_async_init这个函数,就可以直接获取原始dlluv_async_init函数地址 #pragma comment(linker...但是即时调用实际上是调用了劫持dll某个函数,只不过那个函数会jmp到原本dll相应函数地址。达到效果相同,但是实现原理不同。...这里主要是尝试一下之前判断工具流程,使用导出函数 这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找是CrashRpt.dll可以看到有

2.7K30

白加黑免杀制作(详细)

使用DLL文件好处是程序不需要在运行之初加载所有代码,只有在程序需要某个函数时候才 DLL 取出。dll 文件和 exe 文件一样都是 PE 文件。 1....当 dll 使用 LoadLibrary(Ex) 加载和使用 FreeLibrary 函数卸载 dll 时,系统还会调用函数入口点函数。...(lib, "Dll3.lib") 这样在开发时就可以直接使用 Dll3.dll 导出函数了,不需要使用 LoadLibrary 导入 dll,程序执行后会自动寻找相应 dll 并导入。...: (2)dll 动态调用特点 dll 动态调用使用 LoadLibrary(Ex) 函数加载 dll 了。...此外微软还列举了 DllMain 不能使用一些函数如直接或间接使用 LoadLibrary(Ex)、GetStringTypeA 等,CreateProcess 和 CreateThread 可以调用但存在风险

3.8K51

C++基础语法梳理:Windows 动态链接库

(5)促进了本地化 (6)有助于解决平台间差异 (7)可以用于特殊目的 注意 (1)创建 DLL,事实上是在创建可供一个可执行模块调用函数 (2)当一个模块提供一个内存分配函数(malloc、new...)时候,它必须同时提供另一个内存释放函数(free、delete) (3)在使用 C 和 C++ 混编时候,要使用 extern "C" 修饰符 (4)一个 DLL 可以导出函数、变量(避免导出)、...C++ 类(导出导入需要同编译器,否则避免导出) (5)DLL 模块:cpp 文件 __declspec(dllexport) 写在 include 头文件之前 (6)调用 DLL 可执行模块:cpp...得到 3、16 位系统目录,即 Windows 目录 System 子目录 4、Windows 目录,可以通过 GetWindowsDirectory 得到 5、进程的当前目录 6、PATH 环境变量中所列出目录...break; case DLL_PROCESS_DETACH: // 将一个DLL进程地址空间时调用 // The DLL is being unmapped

1.1K00

1.12 进程注入ShellCode套接字

GETPROCADDRESS:GetProcAddress函数函数指针类型,用于DLL检索导出函数或变量地址。...这些函数指针类型通常用于动态加载DLL和运行时链接导出函数。通过使用这些函数指针,程序可以在运行时获取函数地址并动态调用它们。...MyShell(ShellParametros* ptr)以供其使用,当然读者也可以使用普通变量形式,只是普通变量在参数传递时没有传递结构方便快捷,如下结构可看出,我们分别传递kernel32.dll...2.使用LoadLibrary和GetProcAddress函数获取Kernel32库LoadLibrary和GetProcAddress函数地址,并将其保存到Param结构体相应字段。...首先,通过调用 LoadLibrary 和 GetProcAddress 函数,获取到 ws2.dll 和 kernel32.dll 函数地址,分别是 WSAStartup、WSASocket、WsaConnect

28840

C# 如何在项目引用x86 x64非托管代码

使用宏 最简单方法是编译两个版本,编译多个版本可以点击配置管理器,然后创建x86和x64,然后版本添加宏,这样就可以判断宏来使用不同dll ? 点击活动解决方案平台,然后点击新建 ?...dll 那么需要写很多路径 多个函数 实际上如果已经有两个dll ,那么可以使用两个不同函数 [DllImport("SvkiqauhKvdhrureh32.dll", EntryPoint...,但是如果dll多了,一个dll都需要写三次,看起来代码还是很烂 设置查找文件 实际上好多人都觉得,应用程序首先是运行目录开始查找dll,如果找不到,就去GAC查找,如果还是找不到,就去System.../SdarTfqzok.dll"); 如果使用LoadLibrary 相对是比较复杂做法,因为需要手动创建委托方式。但是用 LoadLibrary 好处是可以进行释放。...C++ 方法了,使用下面的代码调用 var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回 ptr 是 0 那么需要调用下面代码 var ptr

2K10

C# 如何在项目引用x86 x64非托管代码

使用宏 最简单方法是编译两个版本,编译多个版本可以点击配置管理器,然后创建x86和x64,然后版本添加宏,这样就可以判断宏来使用不同dll 点击活动解决方案平台,然后点击新建 选择项目属性,点击生成...dll ,那么可以使用两个不同函数 [DllImport("SvkiqauhKvdhrureh32.dll", EntryPoint = "HfwzsnHzhpbbzbn",...,但是如果dll多了,一个dll都需要写三次,看起来代码还是很烂 设置查找文件 实际上好多人都觉得,应用程序首先是运行目录开始查找dll,如果找不到,就去GAC查找,如果还是找不到,就去System.../SdarTfqzok.dll"); 如果使用LoadLibrary 相对是比较复杂做法,因为需要手动创建委托方式。但是用 LoadLibrary 好处是可以进行释放。...C++ 方法了,使用下面的代码调用 var n = hfwzsnHzhpbbzbn(1, 2); 遇过遇到了 LoadLibrary 返回 ptr 是 0 那么需要调用下面代码 var ptr

68820

DLL 注入

LoadLibraryA使我们能够将 dll 磁盘加载到内存。这个函数为我们完成了所有的工作,只需要我们将路径传递给 dll可以了。...LoadLibrary 会将我们指定模块(dll)加载到任何调用地址空间中,这就是为什么我们不能单独使用它,因为这只会将 dll 加载到我们程序,而不是我们想要程序中将我们代码注入。...如果函数成功,我们将获得线程句柄,否则,函数将返回 NULL。 与 LoadLibrary 一样,如果您想对线程创建进行更多控制,也可以使用函数扩展版本。...这是必要,因为我们需要调用 LoadLibrary 路径,并且我们需要字符串在我们调用函数进程。...由于代码将在另一个进程运行,我们需要注意不要在我们函数包含任何函数调用,因为这些不会指向我们在新进程可以到达地址。

4.9K00

多种DLL注入技术原理介绍

不同于使用LoadLibrary()”,反射DLL注入技术将整个DLL文件载入内存,然后通过确定DLL模块入口点偏移来将其加载;这样可以按照需求更隐蔽对其进行调用。...()函数创建一个新线程,新线程以DLL文件路径名称作为参数来调用LoadLibrary()函数 如果你看过MSDN关于“CreateRemoteThread()”函数文档,那么你应该知道,我们需要一个指针...我们可以使用一个真实APC回调函数,而不使用LoadLibrary()”。事实上参数可以是指向我们想要注入DLL文件名称指针,具体代码如下所示。...我们断点被成功断下,如下图所示;现在我们可以步过代码,并分析这段代码功能。 当我们调用LoadLibrary()”函数时,我们DLL文件成功加载。...还可以参阅“MemoryModule”项目的作者Joachim Bauch所写内存中加载DLL文件”,以及一篇好文章“不调用LoadLibrary()函数‘手动’加载32位/64位DLL文件”。

1.3K30

DLL远程线程注入

CreateRemoteThread需要传递参数可知,我们需要目标进程空间多线程函数地址,以及多线程参数。...也就是说我们可以LoadLibrary函数地址给作为多线程函数地址(LoadLibrary函数是用来动态加载DLL),然后将一个DLL地址作为多线程参数。...不过,像(kernel32,ntdll)加载基地址在系统启动后是固定不变,也就是说在任何一个程序调用它们地址都一样,导出函数地址也一致,所以自己程序LoadLibrary函数与其他程序LoadLibrary...函数地址也一致,所以我们可以直接用GetProcAddress函数去获取LoadLibrary地址。...所以说,我们可以先用VirtualAllocEx函数在对方进程申请一块内存,然后用WriteProcessMemory函数将指定DLL写入到目标的进程空间中,然后利用GetProcAddress函数去获取

67240

sRDI – Shellcode 反射 DLL 注入

Windows 操作系统已经知道如何加载 PE 文件,所以人们很好地询问和 DLL Injection 出生于。这涉及在远程进程启动一个线程以 WinAPI 调用LoadLibrary()”。...通过用 C 实现 LoadLibrary 粗略副本,现在可以将这段代码包含到任何 DLL 项目中。该进程将从(恶意)DLL 中导出一个名为“ReflectiveLoader”函数。...RDI 现在功能越来越像合法 LoadLibrary。我们现在可以加载一个 DLL调用入口点,然后将用户数据传递给 另一个 导出函数。...完成后,blob 看起来像这样: image.png 当引导程序顶部开始执行时,一般流程如下所示: 获取内存的当前位置(引导程序) 计算和设置寄存器(引导程序) 使用目标 DLL 函数哈希、...用例 #3 – 依赖项 磁盘读取现有的合法 API DLLDLL 转换为 shellcode(使用 sRDI)并将其加载到内存 使用 GetProcAddress 查找所需函数 优点: 避免使用检测

1.7K00

DLL劫持之IAT类型

DLL映射到调用进程地址空间中,但是不调用DllMain并且不加载依赖Dll(只映射自己本身)。...LOAD_LIBRARY_SEARCH_USER_DIRS : 搜索路径使用使用AddDllDirectory和SetDllDirectory设置路径(保护Dll自己和依赖Dll)。...而是IAT表导入函数程序,不能用导出函数方法 导入表调用在程序执行开头,那么可以在解析PE头时候调用 DLL­MAIN MODULEINFO moduleInfoe; SIZE_T bytesWritten...,其用方法是IAT表中导入函数,直接运行会显示缺dll 这里使用脚本获取所有的导出函数 得到a1.c源文件,可以看到已经将导出函数声明到了源文件里面 然后将shellcode填充到相应位置...再使用gcc编译成dll 双击即可完成IAT类型dll劫持

60910

LoadLibrary加载动态库失败

这里LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字符串(宽字符串),而非窄字符串。...UNICODE 在C/C++代码,直接使用””定义字符串为窄字节串,而windows头文件中提供TEXT宏可以根据是否定义了UNICODE宏来自动选择字符串类型。...因此,利用TEXT宏使其自动选择了正确字符集,dll调用成功。 (2)dll里有全局变量初始化失败或dllmain函数返回false。这种情况需要根据自己业务代码具体分析排除与定位。...如果您真都没有源码,只能如此“尴尬”想正常运行,可以参见资料《64位进程调用32位dll解决方法 / 程序64位化带来问题和思考》 (4)其他原因 4.1 LoadLibrary函数跟LoadLibraryEx...函数装载dll机制不一样,前者在装载dll遇到与该dll依赖其他dll时会自动装载,而后者不会。

2.5K10

Windows下代码注入

这样就有思路了,我们让LoadLibrary作为线程回调函数,将对应dll文件名和路径作为参数传入,这样就可以在对应进程中加载dll了,进一步也就可以执行dllmain对应代码了。...最后总结一下DLL注入步骤: 获取LoadLibrary函数地址 调用VirtualAllocEx 函数在远程进程申请一段虚拟内存 调用WriteProcessMemory 函数将参数写入对应虚拟内存...调用CreateRemoteThread 函数创建远程线程,线程回调函数LoadLibrary,参数为对应字符串地址 按照这个思路可以编写如下代码: typedef HMODULE(WINAPI...无dll注入主要麻烦是在进行地址转化上,在调用API时候,如果无法保证对应dll基地址不变的话,就得在目标进程自行调用LoadLibrary来动态获取函数地址,并调用。...DLL注入另一个区别是,不使用DLL注入时候需要自己加载目标代码到对应进程,这个操作可以借由WriteProcessMemory 将函数代码写到对应虚拟内存

1.4K20

12、动态链接库,dll

它们是一些独立文件,其中包含能被可执行程序或其它DLL调用来完成某项工作函数。只有在其它模块调用动态链接库函数时,它才发挥作用。...1、我们可以把完成某种功能函数放在一个动态链接库,提供给其它函数调用。...在使用静态库情况下,在编译链接可执行文件时,链接器复制这些函数和数据并把它们和应用程序其它模块组合起来创建最终可执行文件。产品发布时不需要发布被使用静态库。...3、Dumpbin命令 应用程序如果想要访问某个DLL函数,那么该函数必须是已经被导出函数可以用Dumpbin查看。在使用之前可能需要通过VCVARS32.bat来建立VC使用环境变量。...使用完后,通过FreeLibrary 来减少被加载dll引用计数,当减到0时,该DLL模块调用进程地址空间卸载。

78320
领券