首页
社区
课程
招聘
[旧帖] [转帖]神奇的马甲Dll:用模拟Dll的思想来做马甲dll 0.00雪花
发表于: 2011-6-10 08:05 1586

[旧帖] [转帖]神奇的马甲Dll:用模拟Dll的思想来做马甲dll 0.00雪花

2011-6-10 08:05
1586
我们知道,在壳的保护中,有一个叫做Anti-Hook,也有叫虚拟Api的,就是通过壳自身Load程序所需函数,然后完成调用等工作
这样导致Hook找到的并非我们所执行的函数。而在马甲Dll上,我们是否可以通过这个思想来完成不模拟所有的劫持dll的接口也可以
马甲马甲呢?答案是肯定的。

首先将我的一点点拙见及实现代码贴一下,后面提供goldsun的一个方法:

由于我Hook的针对性,我只处理了LoadLibraryA,这样就导致通过LdrLoadDll(导入表就是调用这个函数,也是LoadLibraryA的原型)
加载的dll无法被模拟,如果你有相关资料,那么你可以完成更为深入的研究。

感谢吴涛老大设计的E语言API调用格式,让我们的Hook多了个GetProcAddress,正是这个函数让我们劫持非黑月程序更加方便(黑月直接添加的导入表)
首先请允许我简单介绍一下易语言API调用流程:
LoadLibraryA->GetProcAddress->存表,如果这里不处理将会提示没找到dll,我以前就是因为这个差点放弃相关研究
*注意,这个模式是通过E语言自带的API声明来调用DLL所特有的

介绍一下模拟Dll实现马甲DLL的思想吧:
我们知道Dll的函数被调用最终都要靠DLL的Handle来查找函数,也就是说如果我们把马甲dll的handle改成原始dll的handle,那么
函数查找时就会直接找原始dll的,而不是马甲dll的,这样我们就避免了去声明被模拟dll的函数,也省去了很多功夫。

那么我们应该怎么做呢?

首先,取自身(马甲dll)的handle,然后手工Load一下被劫持dll,获得handle。

然后Hook GetProcAddress\GetModuhandleA\LoadLibraryA(最好是Hook LdrLoadDll,因为这个可以实现通用)

当发现目标在调用这些函数试图获取被劫持dll信息时,我们直接将其handle等赋值为被劫持dll的信息。比如:
GetProcAddress(handle,"test")
handle换成被劫持dll的handle
这样程序就会去查被劫持对象,而不是查我们的马甲,这样就避免了马甲要声明很多API,尤其是模拟某些系统dll时,你们懂的……

具体的东西看代码:
.版本 2

hook1.安装 (“kernel32.dll”, “GetProcAddress”, &my_GetProcAddress)
hook2.安装 (“kernel32.dll”, “GetModuleHandleA”, &my_GetModuleHanleA)
handle [1] = LoadLibraryA (“test.dll”)
handle [2] = LoadLibraryA (“test1.dll”)
信息框 (“大哥,你确实执行的是我……”, 0, )

.版本 2

.子程序 my_GetProcAddress, 整数型
.参数 a, 整数型
.参数 b, 整数型

.判断开始 (a = handle [1])
    a = handle [2]
.默认

.判断结束
返回 (hook1.原函数 (a, b))

.版本 2

.子程序 my_GetModuleHanleA, 整数型
.参数 dllname, 整数型
.局部变量 temp, 文本型

temp = 指针到文本 (dllname)
.判断开始 (寻找文本 (到小写 (temp), “test.dll”, , 假) ≠ -1)
    返回 (handle [2])
.默认
    返回 (hook2.原函数 (dllname))
.判断结束
复制代码
附带一份E语言的测试源码供各位喷血。。

goldsun的思想是:通过修改存储DLL handle的handlelist达到一劳永逸,不过这个涉及到很多PE相关的知识,我还木有达到那个级别……囧- -。只能研究到这里了。

    如果相逢只是为了失之交臂,我愿意倾尽一生等待那一个机会。
               越像,越证明不是。
               晓泪不懂妆浓,风清融入雨中。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 238
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看看。。蛮有意思的。
2011-7-6 11:49
0
雪    币: 738
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
新手过来看看
2011-7-6 13:14
0
雪    币: 17
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
附带一份E语言的测试源码供各位喷血

E语言是什么
2011-7-6 13:30
0
游客
登录 | 注册 方可回帖
返回
//