首页
社区
课程
招聘
[求助]DLL隐藏之线程处理函数无法执行
发表于: 2012-5-9 21:55 7620

[求助]DLL隐藏之线程处理函数无法执行

2012-5-9 21:55
7620
最近学习如何隐藏DLL。
     采用之前论坛提到的DLL隐藏方法。具体如下
     1、采用“SetWindowsHookExA”全局钩子 将DLL加载到目标进程。
     2、当DLL被加载后,备份DLL模块,然后修改 DLL的 EnterPoint直接返回TRUE,防止后面调用FreeLibrary时,将资源等被释放掉。
     3、在局部堆栈中执行执行以下代码
        a)以DLL的模块基址申请同样大小的内存空间;
            b)调用FreeLibrary释放DLL;
        c)拷贝之前备份DLL到原来DLL的基址
        
     对于DLL被释放时连带其加载的其他DLL也会被释放的问题。由于我被插入的DLL中调用的其他DLL在目标进程中已经全部加载,所以就没有进行将其他DLL重新加载的动作。
     对于DLL进行以上代码时,有此DLL创建的线程在运行,可能引起内存违规访问的问题,由于我确保在执行以上代码时,DLL没有创建过其他任何线程,所以就没有进行线程挂起的动作。
     由于只是学习,也没有对DLL的MZ等标志抹除。
     
     执行以上代码后,DLL顺利隐藏,XUETR等工具没有发现DLL。基本功能正常。

    我的问题是:DLL隐藏后 再创建线程 线程创建成功了,但是线程的回调函数却没有被执行,经查看,此线程创建完后就终止了,请问原因是什么?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
看看LdrIntilizeThunk有没有被Hook.
2012-5-10 00:09
0
雪    币: 335
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=bithaha;1071190]看看LdrIntilizeThunk有没有被Hook.[/QUOTE。谢谢,我去看看。
2012-5-10 10:47
0
雪    币: 335
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
    谢谢bithaha!确实HOOK了。

  将其还原好后线程回调函数可以执行。我再具体研究下其如何阻止的。
2012-5-10 11:54
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
那是什么软件hook了LdrIntilizeThunk啊?
阻止你函数执行的策略是什么?
2012-5-10 13:35
0
雪    币: 335
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
在创建线程时,系统会调用LdrInitializeThrunk函数进行线程环境初始化等工作。
     其策略就是HOOK LdrInitializeThrunk 。
     1、有一个记录所有线程Handle的全局数组(不是PEB系统记录的那个),这个全局数组初步查看可能是线程句柄的白名单,就是已经经过检测合法的线程句柄;(这只是猜测,由于没有详细跟踪)
     2、其钩子函数主要实现以下检测:
     a)判断其是否为线程句柄的白名单中,如果是,就放行。
     b)如果不在白名单中,获得其线程回调函数的地址(LdrInitializeThrunk函数的第一个参数的0XB0位置);
     c)从PEB中得到系统的所有DLL的基址和大小,判断这个线程的回调函数是否在这些DLL代码段内。
     d)如果在其代码段内,则放行,否则阻止。

     由于DLL已经被隐藏,在PEB中已经搜索不到,所以被阻止。
2012-5-10 15:46
0
雪    币: 128
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
请问这是什么安全软件?
那么有些安全技术需要用到动态代码?岂不是被阻止了
2012-5-14 19:17
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看雪里头有段代码,可以不通过loadlibrary加载一个dll的。
2012-5-15 16:27
0
游客
登录 | 注册 方可回帖
返回
//