首页
论坛
课程
招聘
[原创]易语言静态编译的DLL注入到其他语言写的EXE中后的完美卸载
2013-2-16 21:46 30687

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

2013-2-16 21:46
30687
     首先,相信大家都知道易语言静态编译的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释放申请的内存
       好了,费话不多讲了,两种方法源码奉上。
          光下不顶木有小JJ

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班火热招生!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (36)
雪    币: 1268
活跃值: 活跃值 (53)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
yijun8354 活跃值 12 2013-2-16 21:54
2
0
这诅咒有点恶毒哟
雪    币: 177
活跃值: 活跃值 (239)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2013-2-16 22:55
3
0
好邪恶~
雪    币: 104
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
复古 活跃值 2013-2-23 12:46
4
0
光下不顶木有小JJ
雪    币: 209
活跃值: 活跃值 (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
遗失灵魂 活跃值 2013-2-23 13:09
5
0
SetTimer

KillTimer

FreeLirbrary

VirtualFreeEx
雪    币: 215
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qqqmxhqqq 活跃值 2013-5-17 10:42
6
0
方法不错 正好研究下
雪    币: 1291
活跃值: 活跃值 (451)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 活跃值 2 2013-5-17 10:49
7
0
看看ShellCode
雪    币: 1291
活跃值: 活跃值 (451)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 活跃值 2 2013-5-17 11:15
8
0
期待楼主来一篇写ShellCode的文章
雪    币: 247
活跃值: 活跃值 (60)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
chengqiyan 活跃值 2013-5-24 00:27
9
0
静态链接的DLL本来就跟动态一样。。。只是加载时机
雪    币: 72
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tymfl 活跃值 2013-6-6 17:23
10
0
不错,顶顶
雪    币: 222
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jqjbacon 活跃值 2013-6-19 12:11
11
0
最后一句话是关键……
雪    币: 119
活跃值: 活跃值 (33)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zhangtaopy 活跃值 1 2013-6-20 09:23
12
0
a. 两种方法远程卸载静编译DLL.7z (11.2 KB, 72 次下载)        [谁下载?]

b.【原创】易语言静态编译的DLL注入到其他语言写的EXE中后的完美卸载
技术专题       
iokey
2013-02-16        10/1,618

c. 光下不顶木有小JJ

a&&b&&c ==> 看雪上妹子好多
雪    币: 816
活跃值: 活跃值 (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyicai 活跃值 2013-6-20 09:58
13
0
好东西,得顶
雪    币: 218
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
誓言剑 活跃值 2013-6-23 06:56
14
0
相信大家都知道(以下恕删

我怎么不知道?

FreeLibraryAndExitThread,楼主辛苦了
雪    币: 191
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rax 活跃值 2013-7-24 17:43
15
0
看看代码怎么用
雪    币: 25
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sunflover 活跃值 2013-8-20 15:54
16
0
困扰我很久的问题,终于看见了答案,卸载dll进程一直奔溃,泪奔,头大啊
雪    币: 499
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 活跃值 2013-8-20 16:13
17
0
楼主有小JJ
雪    币: 142
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiejienet 活跃值 2013-8-20 20:18
18
0
确实木有小jj
因为jj很大
雪    币: 196
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
康承志 活跃值 2014-1-12 22:12
19
0
方法不错 正好研究下
雪    币: 110
活跃值: 活跃值 (157)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ling林 活跃值 2014-1-13 01:03
20
0
mark.
雪    币: 221
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
applean 活跃值 2014-1-16 08:44
21
0
好东西,得顶
雪    币: 598
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bqyuncai 活跃值 2014-1-16 08:55
22
0
这个方法好邪恶
雪    币: 5963
活跃值: 活跃值 (593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 活跃值 2014-1-27 17:16
23
0
好像很强大的样子哟
雪    币: 5963
活跃值: 活跃值 (593)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 活跃值 2014-2-11 21:08
24
0
多谢楼主分享哟,不过好像多线程调用的DLL不起作用
雪    币: 671
活跃值: 活跃值 (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
瀚海云烟 活跃值 1 2014-2-12 09:28
25
0
还有这个问题啊,调试了一下发现
DllMain在卸载的时候会GetCurrentThreadId跟this指针+0x234值的地方比较,如果不等而且是窗口程序的话,就发送给窗口消息
SendMessageA(hwnd, 0x83E7, 0, 0); // 这里死掉了
不知道这个 0x83E7 是啥子消息,请求主线程退出?IDA里面把倒2个产数翻译成 uExitCode,不会真是退出消息,而DllMain不可重入而死锁吧???
游客
登录 | 注册 方可回帖
返回