开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 12018|回复: 57
打印 上一主题 下一主题
收起左侧

[火山PC源码] 自己学习时研究的DLL注入与卸载,32位和64位通用

[复制链接]
结帖率:100% (2/2)
跳转到指定楼层
楼主
发表于 2022-9-19 10:56:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   广西壮族自治区南宁市
给小孩写了个电脑使用时间管理软件,为了防止被关闭,弄了个DLL注入来保护主程序,精易模块里的限制仅32位程序可用,只能自己重新写,为此借鉴了精易模块的同类功能代码,再结合其它C++源码总算弄好了一个用起来比较顺手的,32位和64位测试通过。
只是注入DLL时,32位主程序调用只能注入32位DLL到32位的目标进程中,代码不变,64位同样如此,但是交叉的话就会失败,我测试时只是改变编译程序位数就测试成功了,代码不用改变。
卸载DLL我借用了一点精易模块代码,用于查找DLL所在内存地址,这样卸载就没问题了,但是如果注入的DLL存在循环线程,一定要等待该线程完全关闭才能卸载,否则容易造成被注入的程序崩溃。
例如我是循环判断主进程是否存在,每3秒判断一次,在主进程中卸载已被注入的DLL时,执行了卸载后,等待3秒主程序才能结束自己,如果不等待这3秒,被注入的进程较大概率会崩溃,原因大概是主进程不在了,返回的代码找不到原调用它的代码内存,出现崩溃,大概是这意思。
让DLL自我卸载时也是一样,需要让有循环等待的线程退出后才能执行自我卸载。
卸载的崩溃问题我也是实践了不少时间才总结的大概。

下面时源码,切勿用于不好的地方,有需要的拿去,主要给新手学习,大佬随便跳过。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1好评 +1 精币 +3 收起 理由
易语言资源网 + 1 + 3 开源精神必须支持~

查看全部评分

结帖率:100% (1/1)

签到天数: 19 天

沙发
发表于 2022-9-19 11:22:39 | 只看该作者   广东省珠海市
话不多,我先占一楼
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

板凳
发表于 2022-9-19 11:37:52 | 只看该作者   湖南省娄底市
线程_取远程DLL函数地址_1 取的实际是你的当前进程的 不是远程的
GetModuleHandleA 这些都是取自身的...
回复 支持 反对

使用道具 举报

签到天数: 19 天

地板
发表于 2022-9-19 12:15:52 | 只看该作者   新疆维吾尔自治区乌鲁木齐市
谢谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 1 天

地下
 楼主| 发表于 2022-9-19 12:46:42 | 只看该作者   广西壮族自治区南宁市
揰掵佲 发表于 2022-9-19 11:37
线程_取远程DLL函数地址_1 取的实际是你的当前进程的 不是远程的
GetModuleHandleA 这些都是取自身的... ...

是的,这个测试方法忘记删除了,因为该方法原本是使用DLL注入方式获取远程GetModuleHandleA地址后再运行后续枚举目标进程DLL信息的,结果发现GetExitCodeThread只能取4位的地址,64位下是8位,无法取得完整地址的话等于是只能32位下使用,而我要用的是64位系统,所以就放弃使用了,改为用另一种方法【线程_取远程DLL句柄_1】来实现卸载。
回复 支持 反对

使用道具 举报

6
发表于 2022-9-19 14:09:29 | 只看该作者   湖南省郴州市
学习下。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

7
发表于 2022-9-19 15:41:32 | 只看该作者   湖南省娄底市
曼菲士 发表于 2022-9-19 12:46
是的,这个测试方法忘记删除了,因为该方法原本是使用DLL注入方式获取远程GetModuleHandleA地址后再运行后 ...

可以通过枚举导出函数得到这个地址..
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 1 天

8
 楼主| 发表于 2022-9-19 16:53:49 | 只看该作者   广西壮族自治区南宁市
揰掵佲 发表于 2022-9-19 15:41
可以通过枚举导出函数得到这个地址..

精易模块不知道是哪个命令可以实现?目前我只知道C++里用GetModuleInformation,不过得研究一下怎么弄。
回复 支持 反对

使用道具 举报

9
发表于 2022-10-14 08:58:35 | 只看该作者   吉林省长春市
        自己学习时研究的DLL注入与卸载,32位和64位通用
回复 支持 反对

使用道具 举报

10
发表于 2022-10-14 08:58:49 | 只看该作者   吉林省长春市
        自己学习时研究的DLL注入与卸载,32位和64位通用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表