• 黑客技术之移花接木(劫持)


    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<stdio.h>
     2 #include<stdlib.h>
     3 #include<windows.h>
     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为取代者函数名
    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拦截效果

    看第一个对话框截图

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

     

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

     

    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    ecstore中kvstore之mongodb
    ecstore中kvstore之memcached
    ecostore搜索注意事项
    ecos的dbschema
    ecos的model
    ecos的mvcl
    ecos的app处理类
    ecos的app生命周期
    Linux系统的时间设置
    数的机器码表示——彻底弄清什么是原码、反码、补码、移码
  • 原文地址:https://www.cnblogs.com/huipengbo/p/6896971.html
Copyright © 2020-2023  润新知