首页
社区
课程
招聘
[旧帖] [原创]无需naked打造dll劫持 0.00雪花
发表于: 2011-3-26 16:30 5321

[旧帖] [原创]无需naked打造dll劫持 0.00雪花

2011-3-26 16:30
5321

首先百度百科解释一下dll劫持:

DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。
  由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。

——————————————————————分割线——————————————————————
既然是劫持,那当然不能影响原始dll的功能了。你可能会问,那我怎么知道我要劫持的dll的功能是怎么实现的呢?我们不用去实现,只需要实现一个跳转就行了,把exe请求的功能转发到原始dll的地址就行了。这方面,其实可以用AheadLib来实现,它可以直接生成最终代码真的强悍啊。

但是这种方式需要把函数申明成_declspec(naked)形式,这样的函数将会非常干净,不会有一些额外的代码控制堆栈平衡。然后在这样的函数内写上一个JMP,也就不会影响参数的传递了。

但是遗憾的是gcc(MingW)并不支持_declspec(naked)的申明。
所以我自己手动打造了一个JMP,采用inline hook的方法,把自己的导出函数给修改了。

——————————————————————分割线——————————————————————
这里我要劫持的是msimg32.dll。
首先写好导出函数,都是空函数

#define EXTERNC extern "C"
#define EXPORT EXTERNC __declspec(dllexport) void __cdecl

EXPORT vSetDdrawflag() {}
EXPORT AlphaBlend() {}
EXPORT DllInitialize() {}
EXPORT GradientFill() {}
EXPORT TransparentBlt() {}
void WriteJMP(DWORD TargetProc, DWORD NewProc)
{
    BYTE JMP = 0xE9;
    WriteProcessMemory(g_process,(LPVOID)TargetProc, &JMP, sizeof(JMP), NULL);
    DWORD offset = NewProc - TargetProc - 5;
    WriteProcessMemory(g_process,(LPVOID)(TargetProc+1), &offset, sizeof(offset), NULL);
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强悍~~  学习了  谢谢楼主~
2011-3-26 16:45
0
雪    币: 1846
活跃值: (1801)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
抱歉,DllMain的最后少了个
    return TRUE;
2011-3-27 09:50
0
雪    币: 208
活跃值: (148)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
水贴,鉴定完毕
2011-4-3 16:22
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
太水了,发洪水了
2011-4-4 08:29
0
雪    币: 1846
活跃值: (1801)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
无语了
2011-4-4 11:18
0
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
7
木有完整源码?
2011-4-5 00:31
0
雪    币: 58
活跃值: (274)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
小白的路过
2011-4-5 12:59
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
小白。。。路过
2011-4-5 13:01
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
先看看了~还不懂·
2011-4-9 22:27
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这也可以 楼主有才呀~
2011-11-1 08:00
0
雪    币: 47
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好有压力的帖子....
2011-11-1 09:11
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
强悍,mark!!!!!!!!!!!
2012-6-24 14:02
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这不就是 cwub的作者么
2012-6-24 14:12
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
缺少自定义函数和Unhook
基础知识入门
2012-6-30 01:20
0
游客
登录 | 注册 方可回帖
返回
//