Zero Code
零度代码
Ring3 Api Hook (1) 古老的 inline Hook
最古老的 Hook ,非常不稳定。
1
#pragma pack(push,
1
)
2
typedef
struct
3
{
4
BYTE op;
5
DWORD dwOffset;
6
}
HookCode;
7
#pragma pack(pop)
8
9
HookCode oldCode, newCode;
10
LPBYTE pOrgAddress
=
NULL;
11
12
HANDLE WINAPI fakeCreateFileW(DWORD dwReturnAddress, __in LPCWSTR lpFileName, __in DWORD dwDesiredAccess, __in DWORD dwShareMode,
13
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwCreationDisposition,
14
__in DWORD dwFlagsAndAttributes, __in_opt HANDLE hTemplateFile )
15
{
16
DWORD dwOldProtect;
17
VirtualProtect(pOrgAddress,
sizeof
(HookCode), PAGE_EXECUTE_READWRITE,
&
dwOldProtect);
18
CopyMemory(pOrgAddress,
&
oldCode,
sizeof
(HookCode));
19
VirtualProtect(pOrgAddress,
sizeof
(HookCode), dwOldProtect,
&
dwOldProtect);
20
21
MessageBoxW(NULL, lpFileName, NULL, MB_OK);
22
23
return
CreateFileW(lpFileName, dwDesiredAccess, dwShareMode,
24
lpSecurityAttributes, dwCreationDisposition,
25
dwFlagsAndAttributes, hTemplateFile);
26
}
27
28
DWORD GetRealAddress(LPVOID pFunc)
29
{
30
//
计算函数真实地址
31
LPBYTE funaddr
=
(LPBYTE)pFunc;
32
if
(funaddr[
0
]
==
0xE9
)
//
判断是否为虚拟函数地址,E9为jmp指令
33
{
34
DWORD realaddr
=
(DWORD)pFunc;
35
realaddr
+=
funaddr[
2
]
*
0x100
+
funaddr[
1
]
+
5
;
36
return
realaddr;
37
}
38
39
return
(DWORD)pFunc;
40
}
41
42
int
_tmain(
int
argc, _TCHAR
*
argv[])
43
{
44
45
pOrgAddress
=
(LPBYTE)GetProcAddress(LoadLibrary(_T(
"
kernel32.dll
"
)),
"
CreateFileW
"
);
46
47
DWORD dwOldProtect;
48
VirtualProtect(pOrgAddress,
sizeof
(HookCode), PAGE_EXECUTE_READWRITE,
&
dwOldProtect);
49
CopyMemory(
&
oldCode, pOrgAddress,
sizeof
(HookCode));
50
51
newCode.op
=
0xE8
;
52
DWORD dwPatch
=
GetRealAddress(fakeCreateFileW);
53
newCode.dwOffset
=
dwPatch
-
(DWORD)pOrgAddress
-
5
;
54
CopyMemory(pOrgAddress,
&
newCode,
sizeof
(HookCode));
55
VirtualProtect(pOrgAddress,
sizeof
(HookCode), dwOldProtect,
&
dwOldProtect);
56
57
CreateFileW(L
"
C:\\a.txt
"
, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
58
59
return
0
;
60
}
61
62
posted on 2011-05-10 23:23
cntrump
阅读(476)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
My Links
C++博客
首页
新随笔
联系
聚合
管理
Blog Stats
随笔 - 7
文章 - 0
评论 - 0
Trackbacks - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔档案
2011年5月 (4)
2011年4月 (3)
搜索
最新评论
阅读排行榜
1. 调用系统的文件复制,移动和删除功能(1099)
2. 使用 Gdiplus 将图片设置为窗口背景(920)
3. Ring3 Api Hook (2) Hot patching inline hook(597)
4. XmlHelper 一个简单的 MSXml 包装类(582)
5. Ring3 Api Hook (1) 古老的 inline Hook(476)
评论排行榜
1. 调用系统的文件复制,移动和删除功能(0)
2. 使用系统的 SDK 创建多级目录(0)
3. 在桌面上显示画图(0)
4. XmlHelper 一个简单的 MSXml 包装类(0)
5. 使用 Gdiplus 将图片设置为窗口背景(0)
Powered by:
C++博客
Copyright © cntrump