展开

关键词

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

这样就不需要在使用的时候判断当前使用的是哪个,但是如果dll多了,一个dll都需要写三次,看起来代码还是很烂设置查找的文件实际上好多人都觉得,应用程序首先是从运行的目录开始查找dll,如果找不到,就去GAC查找,如果还是找不到,就去System 但是存在一些特殊的文件,他不能放在x86文件夹,所以就需要使用下面的代码特别加载 private static extern IntPtr LoadLibrary(string dllToLoad); LoadLibrary(..SdarTfqzok.dll);如果使用了 LoadLibrary 相对是比较复杂的做法,因为需要手动创建委托的方式。 但是用 LoadLibrary 的好处是可以进行释放。 Marshal.GetLastWin32Error().ToString(); }通过 foo 的值在 System Error Codes (0-499) 就可以找到原因需要注意,使用 GetLastWin32Error

94310

实战 | DLL劫持思路和研究

DLL路径搜索目录顺序1.程序所在目录2.程序加载目录(SetCurrentDirectory)3.系统目录即 SYSTEM32 目录4.16位系统目录即 SYSTEM 目录5.Windows目录6.PATH LoadLibrary和LoadLibraryEx一个是本地加载,一个是远程加载,如果DLL不在调用的同一目录下,就可以使用LoadLibrary(LDLL绝对路径)加载。 ;LoadLibraryEx的最后一个参数设置为LOAD_WITH_ALTERED_SEARCH_PATH即可让系统dll搜索顺序从我们设置的目录开始这里使用vs2019编译一个dll这里使用到库调用system DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}void Scintilla_DirectFunction(){ system DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: system

11020
  • 广告
    关闭

    云加社区有奖调研

    参与社区用户调研,赢腾讯定制礼

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

    干货 | DLL劫持

    原理DLL劫持漏洞之所以被称为漏洞,还要从负责加载DLL的系统API LoadLibrary 来看。熟悉Windows代 码的同学都知道,调⽤ LoadLibrary 时可以使⽤DLL的相对路径。 根据MSDN⽂档的约定,在使⽤相对路径调⽤ LoadLibrary (同样适 ⽤于其他同类DLL LoadLibraryEx,ShellExecuteEx等)时,系统会依次从以下6个位置去查找所需要的 16位系统⽬录即 SYSTEM ⽬录。Windows⽬录。PATH环境变量中列出的⽬录dll劫持就发⽣在系统按照顺序搜索这些特定⽬录时。 找到loadlibrary相关的API? 可以看到这个dll⽂件是notepad++使⽤系统API LoadLibrary 调⽤的,所以可以利⽤该点对程序进⾏ dll劫持找到这个dll,就在notepad++相同目录下?

    14720

    服务进程里面去创建带窗口的进程(备忘)

    DWORD WINAPI GetActiveSessionId(){ HMODULE hInstKernel32 = LoadLibrary (LKernel32.dll ); if (! hInstKernel32 ) { return 0; } HMODULE hInstWtsapi32 = LoadLibrary (LWtsapi32.dll ); if (! pfnWTSFreeMemory(pSessionInfo); return dwActive;} DWORD CreateXPProcessInSession0( LPCWSTR lpCommand ){ system DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS); if (hdesk == NULL){ return FALSE ; } SetThreadDesktop(hdesk ); end of system

    8130

    Android 的 so 文件加载机制提问源码总结参考资料

    那么下面就开始来过下源码吧,分析的入口就是跟着 System.loadlibrary() 走 :System#loadlibrary()public static void loadLibrary(String libName) { Runtime.getRuntime().loadLibrary(libName, VMStack.getCallingClassLoader());} Runtime#loadLibrary ()void loadLibrary(String libraryName, ClassLoader loader) { 1. Job done. } lastError = error; } } ...省略}所以,其实 Systemloadlibrary() 是调用的 Runtime 的 loadLibrary(),不同系统版本 当应用调用了 Systemloadlibrary() 时,这个 so 文件的加载流程如下:先到 nativeLibraryDir 指向的目录地址中寻找这个 so 文件是否存在、可用;如果没找到,那么根据应用进程是

    64550

    android 视频录制 混淆打包 之native层 异常的解决

    javacpp.loader.loadLibrary  、 nativeLibraryDirectories=] ,它们告诉了我三点, 这个问题是加载 linux 下的动态库失败,找不到了,由jar包里面的loader类中的loadLibrary 函数触发,最终找不到的位置是手机系统的的lib库,system、vendor。   再回到问题的根源, 它是加载由jar包里面的loader类中的loadLibrary函数触发,最终找不到的位置是手机系统的的lib库,system、vendor 下的jniPointer.so,我们怎么办啊 ,看到loadLibrary了->?  最终getRunTime,整条线索对应 异常信息,到了这里,这里是系统的 system 类,当 libName = “libjnipointer” 的时候,找不到了。

    33750

    C#调用C++ Dll

    1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 ByValue = 0x0001, 14 ByRef = 0x0002 15 } 16 public class FaultFunc 17 { 18 19 static extern IntPtr LoadLibrary 25 private IntPtr farProc = IntPtr.Zero; 26 public void LoadDll(string lpFileName) 27 { 28 hModule = LoadLibrary 这个函数的入口点)); 52 } 53 } 54 public void LoadFun(string lpFileName, string lpProcName) 55 { 56 hModule = LoadLibrary

    1.2K20

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

    MYLIBAPI加载 Windows 程序的搜索顺序1、包含可执行文件的目录2、Windows 的系统目录,可以通过 GetSystemDirectory 得到3、16 位的系统目录,即 Windows 目录中的 System 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

    5500

    CVE-2016-0095从PoC到Exploit

    W32KAPI DECLSPEC_ADDRSAFE获取KiFastSystemCall的地址:PVOID addr_kifastsystemcall = (PVOID)GetProcAddress(LoadLibrary ;修改后的源代码如下:*** Author: bee13oy of CloverSec Labs* BSoD on Windows 7 SP1 x86 Windows 10 x86* EoP to SYSTEM NtGdiSetBitmapAttributes( HBITMAP argv0, DWORD argv1 ){ PVOID addr_kifastsystemcall = (PVOID)GetProcAddress(LoadLibrary _EPROCESS.UniqueProcessId jne SearchSystemPID mov edx, ; Get SYSTEM process nt! NtGdiSetBitmapAttributes( HBITMAP argv0, DWORD argv1 ){ PVOID addr_kifastsystemcall = (PVOID)GetProcAddress(LoadLibrary

    61020

    默认的 DLL 搜索路径优先级

    16 位的系统目录,即 Windows 目录中的 System 目录。Windows 目录,该目录可以通过 GetWindowsDirectory 得到。进程的当前目录。 如果调用 LoadLibrary 时传入的是绝对路径,那么加载程序将只尝试从该绝对路径搜索 DLL。 -o lib.dll加载 lib.dll 的程序:#include int main(){ SetCurrentDirectory(D:test); HMODULE hDll = (HMODULE)LoadLibrary

    62310

    Android跨进程通信IPC之3——关于JNI的那些事

    接下来以loadLibrary为起点展开JNI注册流程的过程分析。 (一) loadLibrary() 流程1、loadLibrary()方法libcorelunisrcmainjavajavalangSystem.java 1075行 ** * Loads the system The manner in which a library name is mapped to the * actual system library is system dependent. * * ,我们知道了,loadLibrary(String)其本质是调用了 Runtime.getRuntime().loadLibrary(String,ClassLoader) 那我们就来跟踪一下2、Runtime.getRuntime 是因为ClassClassLoader不一定使用System, 但是默认设置又是这样的,所以会有一定的误导性 throw new UnsatisfiedLinkError(loader + couldnt

    68550

    OffenSive Csharp Development Part1

    然后放入我们的代码并调用它:using System;using System.Timers;using System.Windows.Forms;using System.IO;using System.Runtime.InteropServices Marshal.GetDelegateForFunctionPointer(AddressOfFunction, typeof(DMyUserCallFunction));那我们这里便是:IntPtr createPtr = GetProcAddress(LoadLibrary MiniDumpWriteDump)Marshal.GetDelegateForFunctionPointer(createPtr, typeof(MiniDumpWriteDump));GetProcAddress、LoadLibrary 可以这样导入:import Win32API public static extern IntPtr LoadLibrary(string dll); public static extern IntPtr

    20340

    系统权限远程线程注入到Explorer.exe

    目录提升为系统权限,注入到explorer中一丶简介二丶注入效果图提升为系统权限,注入到explorer中一丶简介我们上一面说了系统服务拥有系统权限.并且拥有system权限.还尝试启动了一个进程. 答案是可以的.我也试过提权的方式注入.可惜都是拒绝访问.所以我提升为system权限(系统服务,创建的我们进程就是system权限) 然后进行注入的.最后是可以注入的. { return; } HANDLE hThreadHandle = CreateRemoteThread(hProHandle, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary

    42030

    C# —— 利用Marshal.GetDelegateForFunctionPointer 来转换一个函数指针为一个委托

    using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices; ok); public static extern int GetProcAddress(int handle, String funcname);public static extern int LoadLibrary IntPtr(addr), t);} private void button1_Click(object sender, EventArgs e){ int huser32 = 0; huser32 = LoadLibrary

    44241

    C++基础 静态库与动态库

    在需要时使用LoadLibrary加载,不需要时使用FreeLibrary释放。如果在LoadLibrary时该dll已经在内存,则只需将其引用计数加1,如果其引用计数减为0则移出内存。 C { _declspec(dllimport) int testAdd(int x, int y);}int main(int argc, TCHAR *argv) { HINSTANCE h = LoadLibrary FreeLibrary(h); return 0; } int sum = pAdd(239, 23); _tprintf(_T(sum is %dn), sum); FreeLibrary(h); system

    24710

    GadgetToJScript在VBA中的利用

    kernel32 (ByVal hModule As LongPtr, ByVal lpProcName As String) As LongPtrPrivate Declare PtrSafe Function LoadLibrary = 0 0x00 MyByteArray(3) = 7 0x07 MyByteArray(4) = 128 0x80 MyByteArray(5) = 195 0xC3 AmsiDLL = LoadLibrary 而GadgetToJScript本质是反序列化的利用,下面是一个基础的反序列化代码代码如下:using System;using System.Collections.Generic;using System.Linq 假设有下面的代码:using System;using System.Windows.Forms; namespace Test{ public class Program { public Program

    14320

    DLLOCX文件的注册与数据执行保护DEP

    GetProcessDEPPolicy获取,同时该函数还返回可否修改DEP的信息,如果是可修改,则可以用SetProcessDEPPolicy更改自身DEP状态;一个简易的DepHelper分享给大家: 1 using System 下面是c#版的实现: 1 using System; 2 using System.ComponentModel; 3 using System.Runtime.InteropServices; 4 5 isRegister = true)27 {28 file = Environment.ExpandEnvironmentVariables(file);29 30 var hModuleDLL = LoadLibrary only one71 delegate is required.72 73 delegate uint DllRegUnRegAPI();74 75 76 static extern IntPtr LoadLibrary hModule);80 81 82 static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);83 }84 }如果不关DEP,LoadLibrary

    27020

    深入分析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

    16930

    Android so 加载原理分析

    1. loadLibrary动态库加载过程分析http:gityuan.com20170326load_library2. 深入理解 System.loadLibraryhttps:pqpo.me20170531system-loadlibrary查看Android源码:https:cs.android.com防止原文丢失, 这两方法功能基本一致,接下来从源码视角来看看loadLibrary()的加载过程。二. 动态库加载过程2.1 System.loadLibrarypublic static void loadLibrary(String libName) { Runtime.getRuntime().loadLibrary 对于类的静态代码块,编译过程会将所有的静态代码块和静态成员变量的赋值过程都收集整合到clinit方法, 即类的初始化方法.如下:public final class System { static {

    1.6K30

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

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

    22630

    扫码关注云+社区

    领取腾讯云代金券