我'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相关推荐

  1. 学习笔记之卸载远程目标进程中的DLL模块(转)

    学习笔记之卸载远程目标进程中的DLL模块 (2007-07-23 23:51:02) 转载▼ 学习笔记之卸载远程目标进程中的DLL模块2007/7/23 1.首先得把DLL模块中的线程结束 使用Cre ...

  2. mac os 卸载java_三种方法教你在苹果Mac OS X系统中卸载软件

    刚刚接触mac系统的用户们因为太过陌生,总会遇到很多问题.比如,近来就有一些朋友反馈不懂得该如何卸载mac电脑中的软件,这要怎么办呢?这样会很影响我们的使用.今天小编就来教大家苹果Mac OS X系统 ...

  3. 命令行卸载java_卸载java

    有小伙伴经常会遇到Java没有卸载干净的情况,造成重新安装JDK能正常安装,接着安装JRE的时候总是报1603错误.虽然说JRE安装报错了没安装上,但是eclipse.IntelliJ IDEA和An ...

  4. 远程代码注入及DLL注入教程(InlineHook)---植物大战僵尸为例

    远程代码注入及DLL注入教程 说明 ​ 本人刚开始学习逆向,不知道有没有动力学下深去,这一块也没有详细的实战教学,学多少就上传多少,希望能给想学的朋友一点帮助吧,本教程想通过植物大战僵尸这一经典游戏来 ...

  5. python注入_Python——dll注入

    dll攻击原理分析 什么是dll 动态链接库,是在微软Windows操作系统中实现共享函数库概念的一种方式. 这些库函数的扩展名是 ".dll".".ocx"( ...

  6. win10 oracle怎样卸载,怎么完全卸载Oracle?(Win10) 以Oracle 11g为例

    Oracle卸载起来比较繁琐,我们会装同样要了解一下如何卸载,大多数卸载Oracle的时候都是重装系统,何必那么麻烦呢? 自己也是卸载了一次,因为第一次,只是自我感觉是卸载差不多了,要说卸载完我感觉还 ...

  7. mysql附件卸载_彻底卸载mysql

    最近本地安装了XAMPP,xampp是一个集成软件,里面包含了mysql,apache服务器等等,但我通过xampp创建mysql连接和启动的时候,一直提示端口占用, 一直没找到解决的办法,只能卸载了 ...

  8. 卸载mysql8.0卸载程序_程序卸载失败,来使用微软官方的Windows卸载工具试试

    在我们实际的Windows操作系统使用中,总会遇到一些程序无法成功卸载的情况.当然,我们可以使用第三方软件来进行尝试卸载.要么,第三方软件会进行收费.要么,免费的会带给你捆绑软件的安装或者烦人的广告. ...

  9. android安全补丁卸载,这种安全更新能不卸载就不卸载

    方法一.通过Powershell解决 在Cortana搜索栏输入Powershell后,在第一个结果处点击右键选择"以管理员身份运行",然后输入以下命令后回车: Get-appxp ...

最新文章

  1. 计算机书籍- 聊天机器人技术原理与应用
  2. ★ 省时省力又省钱--快来看win7家庭版升级旗舰版 ★
  3. RealPlayer 15正式发布 简体中文版下载
  4. 小技巧2 - 负边距居中法
  5. 【LeetCode】36. Valid Sudoku
  6. Excel文件弹出另存为代码
  7. idea zookeeper的使用_学习ZooKeeper源码,就从这篇开始吧
  8. Ubuntu配置完全教程
  9. 为什么我选择工作很难做选择_为什么公开工作(即使很难)
  10. python实现神经网络_3. Python矢量化实现神经网络
  11. pcl_viewer 常用实用指令
  12. Google Earth Pro软件无法登录,打开为黑色
  13. 卷积神经网络原理简介
  14. kubernetesv1.17集群生态搭建笔记
  15. 个人计算机名称大全,个人取名方法大全
  16. 基于MATLAB的数字水印系统研究
  17. 买哪种计算机可以弹奏,还能酱紫玩:网友用AMD撕裂者3990X的126个框框演奏音乐...
  18. CSAPP实验记录(二)Bomb Lab
  19. ZK实现SASL认证+Kafka连接ZK
  20. swift方法顺序 不成文规定

热门文章

  1. 小翔和泰拉瑞亚(线段树+思维)
  2. 首个进入Gartner领导者象限的中国数据库要开发布会了!
  3. 小打卡基于阿里云构建企业级数仓的实践及总结
  4. 如何理解这6种常见设计模式?
  5. 免费下载 | 超全算法题精解,一本能“在线”编程的面试宝典
  6. qt 操作html,如何在Webkit窗口中操作页面内容(使用QT和QTWebKit)?
  7. RPG+模拟经营,《喧嚣的城堡》如何做闭环设计?
  8. bubble气泡特效
  9. 详解mysql int类型的长度值问题
  10. Oracle 创建函数的权限