首页
论坛
课程
招聘

[原创]dll注入死锁问题的探究

4天前 971

[原创]dll注入死锁问题的探究

4天前
971

                                                                                                   Dll注入死锁问题的探究

   Dll注入的方法很多,可以参考https://bbs.pediy.com/thread-253918.htmhttps://bbs.pediy.com/thread-75887.htm这里不再说明。

笔者是在进程里创建一条线程,线程里调用LdrLoadDll函数加载的dll。代码在附件里,采用的是内核注入,适应windows7、win10所有版本,应用层注入原理也一样。

注入成功后会弹出对话框:

                                    


   但注入时有时候会卡死,被注入进程和我是注入的dll界面显示不出来。

上调试器,我是往计算器(calc.exe)里注入一个名为Test.dll的dll。!Process 0 0遍历所有进程后,记录下calc.exe的Eprocess。


                                            

使用.process /i 命令切换到计算器进程

                                            

使用!process fffffa80039aeb30 7观察计算器进程详细信息。

                



发现计算器有两个线程,两个线程最后一个栈帧符号没有显示出来。于是加载应用层符号:


再敲入命令 !process fffffa80039aeb30 7



  于是应用层符号显示出来了。

  观察两条线程,都调用了ntdll!RtlEnterCriticalSection进入nt!KeWaitForSingleObject进行等待。

  分别观察两个线程调用RtlpWaitOnCriticalSection的第四个参数,是个锁对象:

                                                   

第一个锁对象0x76f07490的OwningThread是0xce4,也就是这个锁的拥有者是0xce4号线程。

第二个锁对象0x76c43520 的OwningThread是0x744,也就是这个锁的拥有者是0x744号线程。

0xce4、0x744是calc.exe的两条线程。可能是发生了死锁,继续分析。

我们在wrk和Reactos中分别搜素上图中的LdrpLoaderLock、gcsUserApiHook。

                                  


    LdrpLoadDll中对LdrpLoaderLock上了锁,而LdrpLoadDll又是LdrLoadDll调用的。再看gcsUserApiHook的引用:

                                

InitUserApiHook中对gcsUserApiHook上了锁。

我们知道进行注入dll时,会在calc.exe开一条线程(0xce4线程)去调用LdrLoadDll,此时上了LdrpLoaderLock锁。观察0xce4线程的栈,Test!DllMain调用了一些函数后到USER32!InitUserApiHook,此时上了gcsUserApiHook锁。

0x744号线程时calc.exe进程的界面线程,从calc!WinMain调用到USER32!InitUserApiHook上了gcsUserApiHook,接着调用LdrpLoadDll上了LdrpLoaderLock锁。我们可以看一下LdrLoadDll的第四个参数,加载了什么dll:

                                          

  原来是在加载C:\Windows\system32\UxTheme.dll。

 

这显然是死锁了。

我们再来看下Test.dll的源代码:


           


        

0xce4号线程的调用流程一样,DllMain调用了MessageBox弹窗。至此死锁分析完毕。

死锁的原因是由于DllMain中直接调用了窗体有关的函数,解决方法是在DllMain中开一条线程去调用窗体有关的函数。如下:

                                       

        

  这样DllMain中就不会调用窗口函数从而上gcsUserApiHook锁。


  




[推荐]看雪工具下载站,全新登场!(Android、Web、漏洞分析还未更新)

最后于 4天前 被yirucandy编辑 ,原因:
上传的附件:
最新回复 (0)
游客
登录 | 注册 方可回帖
返回