展开

关键词

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

系统在名为LoadLibrary或LoadLibraryEx的线程的上下文中调用入口点函数。 如果进程已经通过调用LoadLibrary或LoadLibraryEx调用了DLL,而没有相应地调用FreeLibrary函数,则不调用入口点函数。 如果系统找不到DLL或入口点函数返回FALSE,则LoadLibrary或LoadLibraryEx返回NULL。 如果LoadLibrary或LoadLibraryEx成功,它将向DLL模块返回一个句柄。 与LoadLibrary或LoadLibraryEx不同,GetModuleHandle不会增加模块引用计数。

24230

Windows平台LoadLibrary加载动态库搜索路径的问题

LoadLibrary在这个时候就产生作用了。LoadLibrary通过将指定路径的动态库加载到当前的调用进程,然后获取其导出的函数就可以正常使用了。 对于像第三方插件这样的应用场景,LoadLibrary可以说是个不错的实现方式。但是正因此也有个弊端,我们无法使用工具得知其的依赖库。 最后再调用LoadLibrary加载它。在最初开发及发布后,插件运行的很好。然而,在Adobe发布Premiere Pro CC 2020之后,插件就不工作了。这是为啥呢? 那么,LoadLibrary这种方法显然还是存在一些Bug了。我们的core.dll还依赖OpenCV、ffmpeg等第三方库。 看MSDN的解释是,LoadLibrary会先从调用进程的目录下搜索动态库的依赖。这样的行为显然不是我们想要的。这个时候,我们还有个选择:使用LoadLibraryEx。

1.1K40
  • 广告
    关闭

    腾讯云前端性能优化大赛

    首屏耗时优化比拼,赢千元大奖

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

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

    介绍 今天给大家推荐的这个代码库将允许原生Linux程序从一个WindowsDLL文件中加载或调用功能函数。下面是一个简单的演示示例,我将Windows Def...

    1.5K80

    深入分析Android加载so文件源码

    loadLibrary的参数是so的名称,这个so文件必须放在apk的lib目录下,而且so的名称必须去掉前面的lib和后边的“.so”。 ) { Runtime.getRuntime().load(pathName, VMStack.getCallingClassLoader()); } ** * See {@link Runtime#loadLibrary }. * public static void loadLibrary(String libName) { Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader public static Runtime getRuntime() { return mRuntime; }loadLibrary():public void loadLibrary(String nickname ) { loadLibrary(nickname, VMStack.getCallingClassLoader()); } void loadLibrary(String libraryName, ClassLoader

    17030

    ring3 x32挂起进程注入原理.

    的参数 3.重定位LoadLibrary的地址下面主要针对这几点讲解.二丶ShellCode核心讲解.2.1 保存Contex.EIP首先挂起进程注入. 直接当前 EIP + xxx偏移(偏移是你写DLL路径的位置的偏移) 就是我们的参数地址.2.3 LoadLibrary的重定位当你直接使用 Call的方式调用LoadLibrary的时候.你还需要计算偏移 因为Windows在启动后 kernel32的基址已经固定了.任何程序启动都会默认加载 kernel32的.所以直接使用LoadLibrary当地址即可. 但是你使用Call的方式 (call LoadLibrary) 你还需要计算你的ShellCode 与LoadLibrary的偏移.所以我们直接使用寄存器来做.mov reg,LoadLibrarycall 这样RET之后直接跳转回去. 2.要修复LoadLibrary的地址. 因为Kernel32是直接加载的都是属于内存映射.所以虚拟地址一样.直接获取填入即可. 不用修复DLLpath.

    29640

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

    但是存在一些特殊的文件,他不能放在x86文件夹,所以就需要使用下面的代码特别加载 private static extern IntPtr LoadLibrary(string dllToLoad); LoadLibrary(..SdarTfqzok.dll);如果使用了 LoadLibrary 相对是比较复杂的做法,因为需要手动创建委托的方式。 但是用 LoadLibrary 的好处是可以进行释放。 先创建一个类用来存在辅助的方法,请看代码 public static extern IntPtr LoadLibrary(string dllToLoad); public static extern 加载 dll 请看下面代码 var ptr = LoadLibrary(..SdarTfqzok.dll);这样就可以拿到 dll 的指针,通过 GetProcAddress 可以拿到方法的指针 这里

    95110

    LiteAVSDK集成,动态加载so库

    (newFilePath, image_filter_common);loadLibrary(newFilePath, image_filter_gpu);loadLibrary(newFilePath , algo_rithm_jni);loadLibrary(newFilePath, format_convert);loadLibrary(newFilePath, ParticleSystem); loadLibrary(newFilePath,nnpack);loadLibrary(newFilePath, YTHandDetector);loadLibrary(newFilePath, GestureDetectJni ); loadLibrary(newFilePath,YTIllumination);loadLibrary(newFilePath,YTFaceTrackPro);loadLibrary(newFilePath ,algo_youtu_jni); private static boolean loadLibrary(String path, String name) { boolean loadSucess =

    4.6K3510

    干货 | DLL劫持

    原理DLL劫持漏洞之所以被称为漏洞,还要从负责加载DLL的系统API LoadLibrary 来看。熟悉Windows代 码的同学都知道,调⽤ LoadLibrary 时可以使⽤DLL的相对路径。 根据MSDN⽂档的约定,在使⽤相对路径调⽤ LoadLibrary (同样适 ⽤于其他同类DLL LoadLibraryEx,ShellExecuteEx等)时,系统会依次从以下6个位置去查找所需要的 先双击uxtheme.dll(这里找一下,找一个有loadlibrary相关的API的dll,你的notepad++可能没有这个dll,因为notepad++版本有可能你的跟我的不一样),然后左键stack 找到loadlibrary相关的API? 可以看到这个dll⽂件是notepad++使⽤系统API LoadLibrary 调⽤的,所以可以利⽤该点对程序进⾏ dll劫持找到这个dll,就在notepad++相同目录下?

    16220

    实战中exe文件免杀

    0X02 远程线程注入:1.远程注入流程:  在进程A中创建远程线程,将线程函数指向为LoadLibrary();具体实现步骤:在进程A中分配空间,存储“A.DLL”获取LoadLibrary函数的地址创建远程线程 ,执行LoadLibrary();??

    1.5K31

    Windows下的代码注入

    我们知道加载DLL主要使用的是函数LoadLibrary,仔细分析线程的回调函数和LoadLibrary函数的原型,会发现,它们同样都是传入一个参数,而CreateRemoteThread函数正好需要一个函数的地址作为回调 还有一个很重要的问题,我们知道不同进程中,地址空间是隔离的,那么我在注入的进程中传入LoadLibrary函数的地址,这算是一个硬编码的地址,它在目标进程中是否是一样的呢? .dll)那么不同进程中的LoadLibrary函数的地址是一样的。 其实不光是LoadLibrary函数,只要是kernel32.dll中导出的函数,在不同进程中的地址都是一样的。 无dll的注入主要麻烦是在进行地址转化上,在调用API的时候,如果无法保证对应的dll的基地址不变的话,就得在目标进程中自行调用LoadLibrary来动态获取函数地址,并调用。

    59910

    C#如何加载嵌入到资源的非托管dll

    代码如下: static void Main(string static extern IntPtr LoadLibrary(string lpFileName);输出:Load library successful win32的下常见的kernel32dll和user32dll,我们可以通过nuget安装,我们可以在csproj加入以下代码(或者直接nuget搜索PInvoke.Kernel32): 那么之前的代码删除的LoadLibrary 方法删除,LoadDll方法则直接改为以下: 加载非托管DLL public static void LoadDll(string dllName) { var h =Kernel32.LoadLibrary

    14020

    ProcessInjection之概述

    Kernel32.dll会被加载到所有的windows进程中,其中有一个函数为LoadLibrary,当其被调用时,它会将一个dll映射到该进程中,LoadLibrary需要知道自己需要加载的dll,所以需要给它提供一个 LoadLibrary就会帮你把该dll加载到内存中。 我们可以在进程A中调用CreateRemoteThread,将句柄传递给CreateRemoteThread,从而在进程B中调用我们想要调用的任何函数,在该例子中,需要B的LoadLibrary函数地址 而LoadLibrary在所有的进程中的基地址都是一样的,所以我们便可以将Kernel32.dll传递给GetModuleHandle再使用GetProcAddress获取其地址。? 然后调用CreateRemoteThread在远程进程中创建一个线程,让新线程调用正确的LoadLibrary函数并在参数中传入第一步分配的内存地址,这个时候,DLL以及被注入到远程进程的地址空间中,DLL

    17020

    实战 | DLL劫持思路和研究

    这个api的dll,这里找有这个api的原因是因为如果该dll的调用栈中存在有 **LoadLibrary(Ex)**,说明这个DLL是被进程所动态加载的。 LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary(LDLL绝对路径)加载。 生成弹出一个计算器即可编译并复制到Notepad++的根目录下运行即可弹出计算器劫持应用中存在的dll这里改个条件,改为SUCCESS双击SciLexer.dll 然后看下stack,可以发现同样存在loadlibrary 在动态调用的时候,一般代码通过loadlibrary去加载dll 并作为参数传到到导出函数,这里看一下导入表,发现他这里有一个导出函数编写dll时,有个重要的问题需要解决,那就是函数重命名——Name-Mangling 这里主要是尝试一下之前判断的工具的流程,使用导出函数这里找一个不在Know DLLs里面的dll,而且这个dll必须要用LoadLibrary进行加载,这里我找的是CrashRpt.dll,可以看到有4

    12820

    C#访问非托管DLL

    下面就是代码: C#中要使用动态链接库中的导出函数,只能在程序中根据DllAtribute显示调用,无法在运行阶段动态加载,但是我们可以利用WIN32 API的LoadLibrary和FreeLibrary public extern static int LoadLibrary(string lpLibFileName); public extern static bool FreeLibrary(int , int wParam, int lParam); private void button1_Click(object sender, System.EventArgs e) { int hmod=LoadLibrary

    38460

    完美实现GetProcAddress

    (user32.dll), MessageBoxA); 系统函数返回的地址 DWORD dw2 = (DWORD)GetProcAddress(LoadLibrary(user32.dll), MessageBoxA 再试试序号查找 我们写的函数返回的地址 DWORD dw1 = MyGetProcAddress(LoadLibrary(user32.dll), (LPCSTR)0x110); 系统函数返回的地址 DWORD dw2 = (DWORD)GetProcAddress(LoadLibrary(user32.dll), (LPCSTR)0x110); 我们发现还是一样,成就感更大啦。。 (kernel32.dll), HeapFree); DWORD a2 = (DWORD)GetProcAddress(LoadLibrary(kernel32.dll), HeapFree); 于是 (kernel32.dll), (LPCSTR)HeapFree); DWORD a2 = (DWORD)GetProcAddress(LoadLibrary(kernel32.dll), (LPCSTR

    58240

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

    显示加载方式加载DLL 使用动态方式来加载动态链接库时,需要用到LoadLibrary函数。该函数的作用就是将指定的可执行模块映射到调用进程的地址空间。 调用原型为:HMODULE LoadLibrary(LPCTSTR lpFileName); LoadLibrary函数不仅可以加载DLL,还可以加载可执行模块(Exe)。 LoadLibrary函数有一个字符串类型(LPCTSTR)的参数,该参数指定了可执行模块的名称,既可以是一个dll文件,也可以是一个exe文件。 如果调用成功,LoadLibrary函数将返回所加载的那个模块的句柄。返回类型HMODULE和HINSTANCE可以通用(32位windows系统)。 需要说明的是,隐式链接方式访问DLL时,在程序启动时也是通过LoadLibrary函数加载该进程需要的动态链接库的。6.

    7420

    完美实现GetProcAddress

    (user32.dll), MessageBoxA); 系统函数返回的地址 DWORD dw2 = (DWORD)GetProcAddress(LoadLibrary(user32.dll), MessageBoxA 再试试序号查找 我们写的函数返回的地址 DWORD dw1 = MyGetProcAddress(LoadLibrary(user32.dll), (LPCSTR)0x110); 系统函数返回的地址 DWORD dw2 = (DWORD)GetProcAddress(LoadLibrary(user32.dll), (LPCSTR)0x110); 我们发现还是一样,成就感更大啦。。 (kernel32.dll), HeapFree); DWORD a2 = (DWORD)GetProcAddress(LoadLibrary(kernel32.dll), HeapFree); 于是 (kernel32.dll), (LPCSTR)HeapFree); DWORD a2 = (DWORD)GetProcAddress(LoadLibrary(kernel32.dll), (LPCSTR

    92910

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

    from the process address space. break; } return (TRUE); Used only for DLL_PROCESS_ATTACH}复制代码载入卸载库LoadLibrary 、LoadLibraryExA、LoadPackagedLibrary、FreeLibrary、FreeLibraryAndExitThread 函数声明 载入库HMODULE WINAPI LoadLibrary 如:DUMPBIN -exports D:mydll.dll复制代码LoadLibrary 与 FreeLibrary 流程图LoadLibrary 与 FreeLibrary 流程图LoadLibraryFreeLibraryDLL nRight; return g_nResult;}复制代码DLL 库的使用(运行时动态链接 DLL)DLL 库的使用(运行时动态链接 DLL) A simple program that uses LoadLibrary ProcAdd; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; Get a handle to the DLL module. hinstLib = LoadLibrary

    5700

    VC++在MFC程序中如何注册/注销ActiveX控件(.OCX)

    LPCTSTR pszDllName = OcxFileName ;         ActiveX控件的路径及文件名                  HINSTANCE hLib = LoadLibrary          LPCTSTR pszDllName = OcxFileName ;         ActiveX控件的路径及文件名                  HINSTANCE hLib = LoadLibrary

    38130

    VC下提前注入进程的一些方法1——远线程不带参数

    实现的相关原理就是使用远线程执行LoadLibrary函数,Load我们的注入DLL。DLL在载入过程或者其他会被执行到的地方执行相关逻辑(如Hook API)。 首先说LoadLibrary ,这个函数只有一个参数,需要传递Load的DLL路径。那么什么地方保存这个参数呢? 我们Load DLL文件的函数是LoadLibrary,这个函数是Kernel32.dll中的导出函数。 之后CreateRemoteThread将在被注入进程中创建一个线程会去调用LoadLibrary,我们的DLL就被载入了,可以为所欲为了。 我们远线程执行的函数是LoadLibrary,这个函数的返回值是我们加载的DLL的句柄,于是看到GetExitCodeThread这个函数的字面意思,应该就可以想到这个函数应该可以获得我们远线程加载的DLL

    26920

    相关产品

    • 云服务器

      云服务器

      腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券