添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
# include <stdio.h> void UnInjectDLL ( int PID ) { HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS , FALSE , PID ) ; //使用CE找到的想要卸载的DLL的地址 LPVOID pRetAddress = ( LPVOID ) 0x544B0000 ; //HMODULE hModule = LoadLibrary("KERNEL32.DLL");// 使用CE查到的KERNEL32的地址 0x76850000; //使用CE找到的FreeLibrary的地址是 0x76869040 //LPTHREAD_START_ROUTINE lp_start_address = (LPTHREAD_START_ROUTINE)GetProcAddress(hModule, "FreeLibrary"); HANDLE hThread = CreateRemoteThread ( hProcess , NULL , 0 , ( LPTHREAD_START_ROUTINE ) 0x76869040 , pRetAddress , 0 , NULL ) ; WaitForSingleObject ( hThread , 2000 ) ; CloseHandle ( hThread ) ; CloseHandle ( hProcess ) ; void inject1 ( int PID , const char * Path ) { //参数:要注入进程的PID,要注入的DLL的路径参数指针 //获取进程句柄,打开进程 //参数PROCESS_ALL_ACCESS 获取进程所有的访问权限 //参数二一般为false //参数三位进程pid //返回值:进程句柄 HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS , FALSE , PID ) ; //在虚拟地址空间分配一块内存 //VirtualAllocEx(进程句柄,指针 指定要分配的页面区域的所需起始地址, //要分配的内存区域的大小,内存分配类型,要分配内存区域的内存保护 一个内存保护常量) //返回值,要分配页面的基址 //说白了就是申请一块内存给DLL路径 LPVOID pRetAddress = VirtualAllocEx ( hProcess , NULL , strlen ( Path ) + 1 , MEM_COMMIT , PAGE_READWRITE ) ; //WriteProcessMemory(要修改的进程内存的句柄,指向写入数据的指定进程中的基址的指针, //在指定进程的地址空间中写入的数据(一个指向缓存区的指针),要写入指定进程的字节数,可忽略参数NULL) //写入路径到上一行代码申请的内存中 WriteProcessMemory ( hProcess , pRetAddress , Path , strlen ( Path ) + 1 , NULL ) ; HMODULE hModule = LoadLibrary ( "KERNEL32.DLL" ) ; //获取loadlibrary的地址 LPTHREAD_START_ROUTINE lp_start_address = ( LPTHREAD_START_ROUTINE ) GetProcAddress ( hModule , "LoadLibraryA" ) ; //CreateRemoteThread()创建在另一个进程的虚拟地址空间中运行的线程 //参数:CreateRemoteThread(进程句柄,NULL,堆栈的初始大小填0默认,loadlibrary的地址, //指向要传递给线程要执行的函数的变量(参数->DLL所在的路径)的指针,控制线程创建的标志 0为立即执行) //创建远程线程 - 并获取线程句柄 HANDLE hThread = CreateRemoteThread ( hProcess , NULL , 0 , lp_start_address , pRetAddress , 0 , NULL ) ; //等待线程事件,第二个参数为等待超时时间 这样可以防止线程阻塞 WaitForSingleObject ( hThread , 2000 ) ; //将线程和进程关掉 CloseHandle ( hThread ) ; CloseHandle ( hProcess ) ; int main ( ) { const char * a = "G:\\C++ Study Project\\DllConnect\\Debug\\DLLStudy.dll" ; inject ( 2052 , a ) ; return 0 ; #include&lt;Windows.h&gt;#include&lt;stdio.h&gt;void UnInjectDLL(int PID) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); //使用CE找到的想要卸载的DLL的地址 LPVOID pRetAddress = (LPVOID)0x544B0000; //HMODULE hModule = LoadLibrary("KERNEL32.DLL")  HANDLE hToken = NULL;  //打开当前进程的访问令牌  int hRet = OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken);  if( hRet)   TOKEN_PRIVILEGES tp;   tp.Priv 这里的动态加载指的是:程序编译时不需要任何 dll 相应的lib进行链接,程序本身通过相关函数加载和 卸载 dll ,并使用其中的函数。 代码如下: class PluginManager public: static bool loadPlugin(const QString& pluginPath, PluginInstanceInfo& pluginInfo); static bool freePlugin(PluginInstanceInfo&
问题描述:C#调用 C++ dll ,传入一组数据,返回处理后的数据以及一些信息字段。但是,返回的内容是不定长的,也就是 dll 内部要进行动态内存申请。那么问题来了,C#怎么接收一个大小不确定的变量?使用完这些数据后,怎么在C#里面释放其内存? 前一个问题的危险是,该段内存的大小,调用方事先是未知的不能进行初始化,这可能会导致缓冲区溢出问题。目前的解决方法只能够是调用方预先分配一个足够大的内存
网上确实有关于 DLL 注入 的过程,但是很多写的都不全,或者内容有点老旧。 DLL 文件 注入 的原理是:接管被 注入 应用的控制权,并在应用程序运行的内存中开辟一条线程运行 DLL 文件中的入口函数的代码。 项目需求:向一个.txt文件 注入 dll ,然后会自动弹出一个窗口 工具:VS2019 2 DLL 动态链接库的编写 在VS2019中新建项目-选择【动态链接库( DLL )】 不要勾选:【将解决方案和项目放在同一目录中】 创建完项目后,会有四个文件 framework.h pch. h dll main.