首页 > 免流教程 > 【教程】黑客技术之移花接木(劫持)

【教程】黑客技术之移花接木(劫持)

楼主:叶痕 [1级] · 2019-7-22 ·  浏览622 · 免流教程 · ID:
1.这里所说的移花接木分三个级别:@1对自己写的函数使用;@2对别的程序的函数使用;@3对操作系统程序使用。

 简单地说就是让改变程序的走向,本来调用的函数不调用了,调用你写的函数,用你的花去接别的程序的木。

2.这里采用的是微软亚洲研究院开发的劫持技术detours,这是一个封装好的库,有源代码,原理是使用函数指针改变函数行为。

3.移花接木的技术就是调用它的API结合自己实际应用。

4.使用步骤:

@1安装detours,

@2构建库文件,使用Makefile进行编译。

@3包含头文件和库文件#include "detours.h" #include "detver.h" #pragma comment(lib,"detours.lib")

@4编写代码,我这一次是拦截自己应用里的调用的函数,代码如下

复制代码
1 #include
2 #include
3 #include
4 #include "detours.h"
5 #include "detver.h"
6
7
8 #pragma comment(lib,"detours.lib")//声明要使用静态库
9 /*
10 拦截,劫持分三种级别:
11 1.拦截自己写的函数:直接调用拦截函数
12 2.拦截别人的函数与进程:通过dll注入来拦截
13 3.劫持操作系统函数:
14 劫持三个要素:函数名和函数参数以及返回类型
15
16 注意:使用拦截必须使用Release而不是Debug
17 */
18 /*
19 根据函数原型定义该函数的函数指针,为避免影响其他API使用static修饰该函数指针
20 WINUSERAPI
21 int
22 WINAPI
23 MessageBoxW(
24 _In_opt_ HWND hWnd,
25 _In_opt_ LPCWSTR lpText,
26 _In_opt_ LPCWSTR lpCaption,
27 _In_ UINT uType);
28
29 */
30 /*定义原函数指针指向原函数*/
31 static int (WINAPI *PMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW;//让这个指针保存MessageBoxW函数入口地址
32
33
34 /*自己定义的替代原函数的函数*/
35 int WINAPI NewMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
36 {
37 printf("我是代替者");
38 }
39
40 /*拦截一个函数,使用新函数代替旧函数,oldFunctionPointer为旧函数的函数指针,newFunction为新函数的函数名*/
41 void holdUp()
42 {
43 DetourRestoreAfterWith();//1.恢复原来状态
44 DetourTransactionBegin();//2.拦截事物开始
45 DetourUpdateThread(GetCurrentThread());//3.刷新当前线程
46 //多次调用可以拦截多个函数,这里只调用一次DetourAttach
47 DetourAttach((void **)&PMessageBoxW, NewMessageBoxW);//实现函数拦截,PMessageBoxW为要被代替的函数的指针变量,NewMessageBoxW为取代者函数名
48 DetourTransactionCommit();//提交拦截事物
49
50 }
51
52 /*取消所拦截函数*/
53 void unHoldUp()
54 {
55
56 DetourTransactionBegin();//2.拦截事物开启
57 DetourUpdateThread(GetCurrentThread());//3.刷新当前线程
58 //多次调用可以取消拦截的多个函数,这里只调用一次DetourDetach
59
60 DetourDetach((void **)&PMessageBoxW, NewMessageBoxW);//实现取消函数拦截,PMessageBoxW为被代替的函数的指针变量,NewMessageBoxW为取代者函数名


此贴搬自lovejobs大神
- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者叶痕流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/12102.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
6条回复 |  最后回复于2019-7-22

叶痕 [1级]

61 DetourTransactionCommit();//提交拦截事物
62
63 }
64
65
66 void main()
67 {
68 //printf("%p", main);
69 printf("%p", MessageBoxW);
70 printf("
%p", &MessageBoxW);
71 printf("
%p", PMessageBoxW);
72 printf("
%p", *PMessageBoxW);
73 printf("
%p", &PMessageBoxW);
74 printf("
%p", NewMessageBoxW);
75 MessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);//拦截前的函数
76
77 holdUp();//拦截MessageBoxW这个函数
78 MessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);//拦截后的函数
79 MessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);//拦截后的函数
80 //Sleep(1000);
81 printf("
%p", MessageBoxW);
82 printf("
%p", PMessageBoxW);
83 printf("
%p", *PMessageBoxW);
84 printf("
%p", &PMessageBoxW);
85 printf("
%p", NewMessageBoxW);
86 unHoldUp();//取消拦截
87 MessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);//拦截后的函数
88 MessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);//拦截后的函数
89 PMessageBoxW(0, L"锄禾日当午", L"汗滴禾下土", 1);
90 printf("
%p", MessageBoxW);
91 printf("
%p", PMessageBoxW);
92 printf("
%p", *PMessageBoxW);
93 printf("
%p", &PMessageBoxW);
94 printf("
%p", NewMessageBoxW);
95
96 system("pause");
97 }
复制代码


@5拦截效果

看第一个对话框截图
发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...

泽亦龙牛逼 [1级]

多重影分身
发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...

泽亦龙牛逼 [1级]

发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...

泽亦龙牛逼 [1级]

发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...

叶痕 [1级]

点击第一个对话框确定后,便没有弹出对话框了,被自己定义的函数给取代了,打印了2次我会替代者,可见拦截成功,继续运行会弹出三个对话框,可见取消拦截也成功
发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...

叶痕 [1级]

5.总结:这次主要测试自己代码里的函数,下次在测试别人代码和系统代码,拦截效果很明显,取消拦截也很明显,给点提示。
发布于2019-7-22

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
41人签到
已签0天
  • 46096帖子
  • 1930359热点量
  • 182546火热值