dll注入进程后卸载的代码

远程注入DLL并自动显示DLL的窗口 以前也可以注入并显示窗口,但是一旦卸载则会导致宿主进程也被关闭,今天终于搞定卸载注入的DLL后不影响宿主进程。源码在http://wooddoor.ys168.com的VC目录下的“远程注入、卸载.rar”【VC2008的工程】注入器源码部分:#include namespace pathfileFun{    //********************************* 阅读详情
//App.cpp
#include "stdafx.h"
#include <windows.h>


#define MAX_SIZE 1024*16
#define DLL "D:/Code/TestCode/UnloadDll/UnloadDll/Debug/demo.dll" // 需要完整路径
HMODULE LoadRemoteLibrary(HANDLE hProcess,const char *pcLibraryName
);
BOOL FreeRemoteLibrary(HANDLE hProcess, HMODULE hRemoteLibrary
);


int main(int argc, char* argv
[])
{
    
DWORD dwPID = 0
;
    
HANDLE hNewHandle = NULL
;
    
HMODULE hRemoteHandle = NULL
;
    
int i=0
;
    if(
argc < 2
)
    {
        return -
1
;
    }

    
dwPID = atoi(argv[1
]);

    
hNewHandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPID
);

    if(
NULL == hNewHandle
)
    {
        
printf("[-] OpenProcess failed.../r/n"
);
        return -
2
;
    }

    
hRemoteHandle = LoadRemoteLibrary(hNewHandle,DLL
);
    
    if(
NULL == hRemoteHandle  
)
    {
        
printf("[-] LoadRemoteLibaray failed.../r/n"
);
        return -
3
;
    }
    
    
printf("[+] LoadRemoteLibaray succeed!/r/n"
);

    for(
i=0;i<=20;i
++)
    {
        
printf("."
);
        
Sleep(100
);
    }
    
printf("/r/n"
);

    if(
FreeRemoteLibrary(hNewHandle,hRemoteHandle) == NULL
)
    {
        
printf("[-] FreeRemoteLibaray failed.../r/n"
);
        return -
4
;
    }
    
printf("[+] FreeRemoteLibrary succeed!/r/n"
);
    return
0
;
}

HMODULE LoadRemoteLibrary(HANDLE hProcess,const char *pcLibraryName
)
{
    
void* pvRemoteMem=NULL
;
    
DWORD dwBytesWritten
;
    
HMODULE nRet=NULL
;
    
DWORD dwRemoteThreadId
;
    
HANDLE hRemoteThread=NULL
;

    
__try
    
{
        
pvRemoteMem=VirtualAllocEx(hProcess,NULL,strlen(pcLibraryName)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE
);
        if (
NULL == pvRemoteMem
)
        {
            
printf("[-] VirtualAllocEx failed.../r/n"
);
            
__leave
;
        }

        if (
FALSE == WriteProcessMemory(hProcess,pvRemoteMem,(void*)pcLibraryName,strlen(pcLibraryName)+1,&dwBytesWritten
))
        {
            
printf("[-] WriteProcessMemory failed.../r/n"
);
            
__leave
;
        }
        
hRemoteThread=CreateRemoteThread(hProcess,NULL,MAX_SIZE,(LPTHREAD_START_ROUTINE
)
#ifdef UNICODE
        
GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryW"
),
#else
        
GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"
),
#endif
        
pvRemoteMem,0,&dwRemoteThreadId
);
        if (
NULL == hRemoteThread
)
        {
            
printf("[-] CreateRemoteThread failed.../r/n"
);
            
__leave
;
        }
        else
        {
            
__try
            
{
                
WaitForSingleObject(hRemoteThread,INFINITE
);
                
GetExitCodeThread(hRemoteThread,(DWORD*)&nRet
);
                
printf("ErrorCode:%d/r/n",GetLastError
() );
            }
            
__finally
            
{
                
CloseHandle(hRemoteThread
);
            }
        }
    }
    
__finally
    
{
        if (
NULL != pvRemoteMem
)
            
VirtualFreeEx(hProcess,pvRemoteMem,0,MEM_RELEASE
);
    }
    return
nRet
;
}

BOOL FreeRemoteLibrary(HANDLE hProcess, HMODULE hRemoteLibrary
)
{
    
DWORD dwRemoteThreadId
;
    
HANDLE hRemoteThread
;
    
BOOL nRet
;

    
hRemoteThread=CreateRemoteThread(hProcess,NULL,MAX_SIZE
,
        (
LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32.dll"), "FreeLibrary"),(void*)hRemoteLibrary,0,&dwRemoteThreadId
);
    
    if (
NULL == hRemoteThread
)
        return
FALSE
;
    
    
WaitForSingleObject(hRemoteThread,INFINITE
);
    
GetExitCodeThread(hRemoteThread,(DWORD*)&nRet
);
    return
nRet
;
}


Code:

//DemoDll.cpp
#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule,
                       
DWORD  ul_reason_for_call,
                       
LPVOID lpReserved
                    
)
{
    
MessageBox(NULL,"DemoMessage","MSG",MB_OK);
    return
TRUE;
}
把dll模块注入到游戏进程的方法_远线程注入 远线程注入是指为要注入的目标进程创建一个远程线程,在远程线程里面加载要注入的目标dll。Windows操作系统提供了跨进程的内存读写机制,这就为各种注入打下了基础。 阅读详情

相关推荐

Delphi使用HOOK注入系统线程.rar

Delphi使用HOOK注入系统线程,调用了一个HOOK控件来完成,示例演示了注入一个网址进程的例子。

NetRipper源码

NetRipper:

Tusaka 679

Dll注入和卸载源码

Dll注入和卸载,包括DLL动态库,DLL注入功能是完整的,卸载不份不完善,可以作为参考。

ReflectiveLoader分析(远程线程注入 PE修正)

从github上下载了ReflectiverLoader认真学习了一下 在代码中得到一些心得和自己的想法,都按步骤写到了代码中,现在分享给大家,如有错,望大家指正 其中需要注入的dll和解析,内存RVA与文件RVA的转换代码(汇编与c++的都有)和解析,shellcode的汇编附到链接 一.这是用到的shellocode 作用:经调试得出他是为了解决x86下运行x64 的问题(...

weixin_33752045的博客 737

dll窗体的加载及卸载

动态加载dll中的窗体到主窗口的任意地方,加载的dll窗口鼠标不受限制。 在主窗体任意卸载dll窗体。 在博览众家之长后制作,全部源代码分享,给初学者提供条捷径。在berlin下编译。

几个delphi写的进程相关的函数,最近开发一个服务程序收集编写

delphi写的进程相关的函数,最近开发一个服务程序收集编写 增加了注释 在win7 32位64位,xp测试通过。 请朋友们测试急需完善

实现DLL的注入与卸载

在Windows系统下,为了避免各个进程相互影响,每个进程的地址空间都是被隔离的。在执行DLL注入时需要通过创建“远程线程”来实现。所谓“远程线程”,并不是跨计算机,而是跨进程的。简而言之,就是进程A在进程B中创建一个线程,这个线程就叫“远程线程”。 要向其它进程中“注入”DLL就需要在目标进程中调用相应的API函数(LoadLibrary),可是目标进程不会自己“乖乖地”调用加载函数,这时候要

其疾如风 其徐如林 侵略如火 不动如山 9845

Delphi进程注入的实例

最近看的一个关于进程注入的方式,自己做了个Demo实现了一下

解决VS2005上DLL加载完后马上卸载的问题

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234   环境: Prog工程生成Prog.dll,且 链接了 Proj1.lib 、Proj2.lib、Proj3.lib. Proj1工程生成Proj.dll,给Proj提供lib链接. Proj2工程与Proj3工程为纯lib,提供给Proj链接. 现象: 在调试过程中看到LoadLibrar

chenyujing1234的专栏 2925

Windows Server安装Intel I219-V网卡驱动完整教程

在Windows Server系统上安装Intel I219-V网卡驱动的方法。

小白成长历程 5186

给jetson nano 安装AX200网卡驱动

几经波折,因为在网上看到的基本都是amd版本而非arm版,然后最终选定V5.5是因为更新的几个版本的arm版本是false的(在https://kernel.ubuntu.com/~kernel-ppa/mainline/处选择版本时,得看在arm64上是false还是build succeeded,之前没经验呀刚刚才顿悟的) 1,参考文章https://blog.youkuaiyun.com/MIRANA0/article/details/106696334 学到了得下载如下四个: wget https://k

发嘎嘎的博客 2346

一种Reflective DLL注入后的DLL卸载处理

ReflectiveDLL注入后的一种触发DLL卸载操作

柳似烟的专栏 1682

9 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例

海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 7181

C++ 远程代码注入

超级=_=,直接附上注入程序以及dll的代码。 dll 代码很简单只是弹窗,可以根据需要扩充。 注入程序由于是练手,只是随便写了打开计算器的远程注入。 从注入到卸载都包含,在程序执行完毕后扫尾巴 1 // InjectExample.cpp : 定义控制台应用程序的入口点。 2 3 4 #include "stdafx.h" 5 6 int...

weixin_30724853的博客 991

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 557

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 463

c++ DLL注入与卸载

#include<Windows.h> #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")

EEEEEEcho的博客 1986

如何在 UniApp 中接入讯飞语音听写功能 文末附vue3+vue2完整代码

在开发过程中,我遇到了讯飞接口返回空数据的问题。通过仔细检查传送的每一帧数据,我发现问题出在第一帧的配置信息以及 Base64 数据的切片。确保每一帧的数据正确且符合接口要求,问题就能够得到解决。希望这个过程能帮助你在项目中顺利对接讯飞语音识别。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1000

卸载已经注入进程的DLL 实验

知道了注入的原理,对于卸载就很容易学会了!对于DLL注入型病毒、木马、可以很自己编写一个专杀软件!下面的写法对于我来说比较新鲜,用的是返回错误代码的写法,有点API的味道!//获取进程PID DWORD GetProcessPID(char *ProcessName) { CString Name; Name.Format("%s",ProcessName); //快照进程信息 HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPR

pDaren的专栏 2697

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

7.29华为OD机试真题 新系统 - 能量对撞 (Java/Py/C/C++/Js/Go)

算法大师! 1327

STM32N6570-DK识别STLINK问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2211

C++ DLL远程注入与卸载函数

代码是别处的 第一个函数是成功的,第二个函数运行发现会将目标程序挂死,也许是目标程序有保护机制 支持Unicode编码。 //----------------------------------------------------------------------------------------------------------- // 函数:

Gary's Blog --- A C++ programmer 6507

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Dll注入经典方法完整版

总结一下基本的注入过程,分注入和卸载 注入Dll: 1,OpenProcess获得要注入进程的句柄 2,VirtualAllocEx在远程进程中开辟出一段内存,长度为strlen(dllname)+1; 3,WriteProcessMemory将Dll的名字写入第二步开辟出的内存中。 4,CreateRemoteThread将LoadLibraryA作为线程函数,参数

yxwb1253587469的博客 508

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

dll的注入与卸载

使用方法: 需要三个命令行参数 1.flag 0表示注入,1表示卸载(注意卸载需要管理员权限) 2.dll的路径(名字) 注入需要路径和名字,卸载需要名字就够了 3.需要注入或卸载的进程名字 这里添加了改进,只需要输入进程名字程序会查找PID。 #include&quot;windows.h&quot; #include&quot;tlhelp32.h&quot; #include&amp;lt;tchar.h&amp;gt; DWORD...

九层台 7474

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

DLL卸载(创建远程线程卸载强制注入的dll)

DLL卸载 实际上我觉得应该改名叫:创建远程线程卸载强制注入的dll 一:工作原理 驱使目标进程调用FreeLibrary() API,和CreateRemoteThread() API来创建远程线程从而实现dll注入的方法类似,这个也是将FreeLibrary() API的地址传递给CreateRemoteThread()的lpStartAddress参数,并将要卸载的DLL的句柄传递给lpParameter参数。 注:每个windows内核对象都拥有一个引用计数,代表对象被使用的次数。每调用一个Load

m0_51713041的博客 1452

DLL的远程注入与远程卸载卸载

DLL的远程注入与远程卸载卸载 涉及Windows API FindWindow GetWindowThreadProcessId OpenProcess VirtualAlloc WriteProcessMemory CreateRemoteThread WaitForSingleObject 有时候修改目标程序,如制作插件,补丁,外挂等,需要使用到DLL注入的操作,注入的方式主要有远程注入、劫持注入、HOOK方式、内存注入等,这里主要说一下远程注入以及远程卸载 远程注入 什么是远程注入: 远程注入

qq_40535097的博客 2553
上一篇: 今天终于找到bi跨平台病毒的源码了
下一篇: Kill TCP Connection源代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值