不能卸载java_无法卸载注入的DLL
我've written a dll in C which I' m通过 CreateRemoteThread() 注入C控制台程序 .
C程序只需调用 Sleep(INFINITE) ,基本上充当注入的dll的主机 .
这是DllMain:
HINSTANCE thisDllHandle = NULL;
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD entryReason, void *impLoad)
{
switch (entryReason)
{
case DLL_PROCESS_ATTACH:
{
thisDllHandle = hInstance;
HANDLE thread = (HANDLE)_beginthreadex(NULL, 0, Boss, NULL, 0, NULL);
if (thread) CloseHandle(thread);
}
}
return TRUE;
}
通过 CreateRemoteThread() 创建的线程然后返回,我的Boss线程是运行此dll代码的唯一线程 .
如果我然后告诉Boss退出,清理后调用 FreeLibraryAndExitThread(thisDllHandle, 0); - 线程退出但dll仍然在我的主机进程中加载 .
使用Brandon在here的答案中的想法,我让主程序告诉我加载了哪些模块并显示模块的 GlblcntUsage 和 ProccntUsage . 注入dll后,计数为1.在 FreeLibraryAndExitThread() 之后,计数为零 - 但仍然加载了dll!为什么?
顺便说一下,如果我改为调用 FreeLibrary(thisDllHandle) ,主机程序崩溃(如预期的那样),但dll会被卸载 .
EDIT
总结一下我要做的事情:我试图通过创建一个加载我的dll的远程线程在远程进程中注入一个dll;该DLL生成另一个运行相同dll代码的线程,并且原始线程退出;然后我想要该线程卸载DLL并退出 .
虽然试图减少代码以便发布它以响应@David Heffernan的评论,我设法让它工作 - 通过在调用 FreeLibraryAndExitThread 之前让退出的线程调用 FreeLibrary . 但是我真的很了解这些东西 . 我不是很直白:
获取远程进程的句柄 .
在自己的kernel32模块中获取 LoadLibraryW 的地址 .
在远程进程中分配内存,将[dll的路径]写入所述内存 .
在远程进程句柄上调用 CreateRemoteThread ,将步骤2中的地址作为起始地址传入,将步骤3中的地址作为参数传入 .
这会导致远程进程中的线程使用 LoadLibraryW 加载我的dll . 当我的Dll被加载时,它启动一个新线程(参见前面的DllMain代码),它在我的dll中运行一些其他函数(这个其他函数中的内容不重要 - 我可以让它睡10秒然后调用 FreeLibraryAndExitThread ,然后行为是一样的) . 我远程创建的原始线程在LoadLibraryW返回时死亡 . 所以现在只有一个线程运行我的dll代码 .
当该线程调用 FreeLibraryAndExitThread 时,我希望我的dll从远程进程中卸载,因为该线程已释放库并退出 . 但是dll仍然被加载,并且只有释放它两次它才会卸载 .
不能卸载java_无法卸载注入的DLL相关推荐
- 学习笔记之卸载远程目标进程中的DLL模块(转)
学习笔记之卸载远程目标进程中的DLL模块 (2007-07-23 23:51:02) 转载▼ 学习笔记之卸载远程目标进程中的DLL模块2007/7/23 1.首先得把DLL模块中的线程结束 使用Cre ...
- mac os 卸载java_三种方法教你在苹果Mac OS X系统中卸载软件
刚刚接触mac系统的用户们因为太过陌生,总会遇到很多问题.比如,近来就有一些朋友反馈不懂得该如何卸载mac电脑中的软件,这要怎么办呢?这样会很影响我们的使用.今天小编就来教大家苹果Mac OS X系统 ...
- 命令行卸载java_卸载java
有小伙伴经常会遇到Java没有卸载干净的情况,造成重新安装JDK能正常安装,接着安装JRE的时候总是报1603错误.虽然说JRE安装报错了没安装上,但是eclipse.IntelliJ IDEA和An ...
- 远程代码注入及DLL注入教程(InlineHook)---植物大战僵尸为例
远程代码注入及DLL注入教程 说明 本人刚开始学习逆向,不知道有没有动力学下深去,这一块也没有详细的实战教学,学多少就上传多少,希望能给想学的朋友一点帮助吧,本教程想通过植物大战僵尸这一经典游戏来 ...
- python注入_Python——dll注入
dll攻击原理分析 什么是dll 动态链接库,是在微软Windows操作系统中实现共享函数库概念的一种方式. 这些库函数的扩展名是 ".dll".".ocx"( ...
- win10 oracle怎样卸载,怎么完全卸载Oracle?(Win10) 以Oracle 11g为例
Oracle卸载起来比较繁琐,我们会装同样要了解一下如何卸载,大多数卸载Oracle的时候都是重装系统,何必那么麻烦呢? 自己也是卸载了一次,因为第一次,只是自我感觉是卸载差不多了,要说卸载完我感觉还 ...
- mysql附件卸载_彻底卸载mysql
最近本地安装了XAMPP,xampp是一个集成软件,里面包含了mysql,apache服务器等等,但我通过xampp创建mysql连接和启动的时候,一直提示端口占用, 一直没找到解决的办法,只能卸载了 ...
- 卸载mysql8.0卸载程序_程序卸载失败,来使用微软官方的Windows卸载工具试试
在我们实际的Windows操作系统使用中,总会遇到一些程序无法成功卸载的情况.当然,我们可以使用第三方软件来进行尝试卸载.要么,第三方软件会进行收费.要么,免费的会带给你捆绑软件的安装或者烦人的广告. ...
- android安全补丁卸载,这种安全更新能不卸载就不卸载
方法一.通过Powershell解决 在Cortana搜索栏输入Powershell后,在第一个结果处点击右键选择"以管理员身份运行",然后输入以下命令后回车: Get-appxp ...
最新文章
- 计算机书籍- 聊天机器人技术原理与应用
- ★ 省时省力又省钱--快来看win7家庭版升级旗舰版 ★
- RealPlayer 15正式发布 简体中文版下载
- 小技巧2 - 负边距居中法
- 【LeetCode】36. Valid Sudoku
- Excel文件弹出另存为代码
- idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧
- Ubuntu配置完全教程
- 为什么我选择工作很难做选择_为什么公开工作(即使很难)
- python实现神经网络_3. Python矢量化实现神经网络
- pcl_viewer 常用实用指令
- Google Earth Pro软件无法登录,打开为黑色
- 卷积神经网络原理简介
- kubernetesv1.17集群生态搭建笔记
- 个人计算机名称大全,个人取名方法大全
- 基于MATLAB的数字水印系统研究
- 买哪种计算机可以弹奏,还能酱紫玩:网友用AMD撕裂者3990X的126个框框演奏音乐...
- CSAPP实验记录(二)Bomb Lab
- ZK实现SASL认证+Kafka连接ZK
- swift方法顺序 不成文规定