易语言教程_易语言源码_易语言写挂_易语言论坛_看流星社区

 找回密码
 注册
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
查看: 7714|回复: 124

[开源]静态编译的DLL注入到其他语言写的EXE中后的完美卸载

[复制链接]
发表于 2013-2-25 09:09:13 | 显示全部楼层 |阅读模式
首先,相信大家都知道易语言静态编译的DLL远线程注入到易语言写的EXE中后,可以远线程调用FreeLibrary进行卸载,但如果被注入的EXE是其他语言写的,就不行了。远线程调用FreeLibrary卸载DLL会导致EXE崩溃。所以很多人认为静态编译的DLL只能注入,不能卸载。
       今天我就告诉大家,可以卸载!下面以Delphi7为例来举例说明一下我的分析过程:
       打开Delphi7,在窗体中添加两个按钮,按钮的Caption分别改成"加载DLL”和"卸载DLL",两个按钮事件的代码分别为:
LoadLibrary('mydll.dll');  //加载本EXE目录下的mydll.dll(易语言静态编译的DLL)

FreeLibrary(GetModuleHandle('mydll.dll'));//卸载DLL
       编译运行测试加载DLL和卸载DLL功能一切正常,但是如果把卸载DLL的代码写到一个函数里,然后用CreateThread创建一个线程来调用这个卸载函数,问题就出来了,一用线程调用卸载DLL,EXE程序就崩溃。这说明什么问题?这说明易语言静态编译的DLL加载到其他语言写的EXE中之后,只能在EXE程序的主线程中调用FreeLibrary进行卸载!
       知道这个原理就好办了,我们有两种方法进行远程卸载DLL:一、修改EXE主线程EIP,申请一块内存插入一段ShellCode进行卸载DLL,然后VirtualFree申请的内存再跳回原EIP。二、向EXE中申请一块内存写入一段ShellCode,这段ShellCode的功能是SetTimer创建一个时钟(因为时钟周期函数也属于EXE的主线程),在时钟周期函数里先调用KillTimer销毁时钟,再调用FreeLibrary卸载DLL.完事儿后VirtualFreeEx释放申请的内存
       好了,费话不多讲了,两种方法源码奉上。

ps:纠正一下:如果其他语言写的EXE是在主线程中调用LoadLibraryA载入易语言静态编译的DLL,则只能在EXE的主线程中调用FreeLibrary卸载DLL,如果是远线程(CreateRemoteThread)调用LoadLibraryA加载易语言静态编译的DLL的话,就不能在EXE的主线程中调用FreeLibrary卸载DLL了。

游客,如果您要查看本帖隐藏内容请回复
发表于 2013-2-26 19:00:25 | 显示全部楼层
可能吧!!!!!!!!!
发表于 2013-2-27 09:33:52 | 显示全部楼层
顶顶顶顶顶顶顶
发表于 2013-3-2 23:08:52 | 显示全部楼层
什么东西。那么神秘
发表于 2013-3-3 15:36:43 | 显示全部楼层
看看啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
发表于 2013-3-3 15:42:15 | 显示全部楼层
试试看。。。。。。
发表于 2013-4-3 17:00:55 | 显示全部楼层
zhaogezhehenjiule
发表于 2013-4-15 20:15:33 | 显示全部楼层
32a1sdxzcdsfc
发表于 2013-4-27 19:05:35 | 显示全部楼层
学习,想知道为什么总报错
发表于 2013-4-29 20:43:41 | 显示全部楼层
无限顶楼主
发表于 2013-5-5 22:54:24 | 显示全部楼层
看看。。。。。。。。。。。
发表于 2013-7-18 18:45:39 | 显示全部楼层
阿斯顿大时代
发表于 2013-7-25 13:11:06 | 显示全部楼层
qq20209081
发表于 2013-7-26 15:13:12 | 显示全部楼层
dfaasfadasdasdasda
发表于 2013-8-16 18:20:15 | 显示全部楼层
fdsfsdffdfsd
发表于 2013-8-19 14:07:34 | 显示全部楼层
看看咯,看雪转的吗
发表于 2013-8-27 11:48:13 | 显示全部楼层
qweqweqweqweqweqwe
发表于 2013-8-31 15:48:24 | 显示全部楼层
真的能完美卸载么????????
发表于 2013-10-4 08:56:37 | 显示全部楼层
.版本 2

.如果真 (瞬间移动.选中 = 真)
    瞬移开启 = 真
    .判断循环首 (_判断按键状态 (#V键) ≠ 0)
        选择框1.选中 = 真
        旭日的光辉丶_内存写字节集 (#瞬移, { 119, 7, 199, 69, 248, 244, 1, 0 })
        延时 (8)
        旭日的光辉丶_内存写字节集 (#瞬移, { 118, 7, 199, 69, 248, 244, 1, 0 })
        选择框1.选中 = 假
    .判断循环尾 ()
    瞬移开启 = 假
发表于 2013-10-14 14:51:22 | 显示全部楼层
好东西,下来看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|看流星社区  |网站地图

GMT+8, 2017-12-11 14:00 易语言论坛 易语言导航

Powered by 看流星社区 X3.2

©2011-2016 最好的辅助编程技术论坛

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