易语言资源网 - 做最全的易语言资源下载社区
【精易招聘】UniApp开发工程师 精易论坛授权登录

自己学习时研究的DLL注入与卸载,32位和64位通用   [复制链接]

    2022-10-17 09:38:14
    火山PC源码
    易语言资源网
    1399 次浏览
    来源链接

给小孩写了个电脑使用时间管理软件,为了防止被关闭,弄了个DLL注入来保护主程序,精易模块里的限制仅32位程序可用,只能自己重新写,为此借鉴了精易模块的同类功能代码,再结合其它C++源码总算弄好了一个用起来比较顺手的,32位和64位测试通过。

只是注入DLL时,32位主程序调用只能注入32位DLL到32位的目标进程中,代码不变,64位同样如此,但是交叉的话就会失败,我测试时只是改变编译程序位数就测试成功了,代码不用改变。

卸载DLL我借用了一点精易模块代码,用于查找DLL所在内存地址,这样卸载就没问题了,但是如果注入的DLL存在循环线程,一定要等待该线程完全关闭才能卸载,否则容易造成被注入的程序崩溃。

例如我是循环判断主进程是否存在,每3秒判断一次,在主进程中卸载已被注入的DLL时,执行了卸载后,等待3秒主程序才能结束自己,如果不等待这3秒,被注入的进程较大概率会崩溃,原因大概是主进程不在了,返回的代码找不到原调用它的代码内存,出现崩溃,大概是这意思。

让DLL自我卸载时也是一样,需要让有循环等待的线程退出后才能执行自我卸载。

卸载的崩溃问题我也是实践了不少时间才总结的大概。

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

image.png



点我下载 (已有 104 次下载)

[错误报告]   上一篇:字典 MySql版     下一篇:火山pc 动态调用dll...