真香定律:MiniHook+Remote DLL

windows的函数hook大致分为2类:指定进程Hook和系统全局(system-wide)Hook。指定进程的Hook常规思路是先编写一个hook指定函数的dll,然后使用dll注入打到指定进程。系统全局Hook一般采用AppInit DLLs方案,这大概是最简单做全局dll注入的方案了,很明显微软也意识到了这个弱点,在win10上面开始对AppInit DLLs进行限制,参考 AppInit_Dlls键值 和 微软官方文档 AppInit DLLs and Secure Boot。本文将使用MiniHook模块实现指定进程Hook。

代码背景:朋友从某个论坛买了一个教程,但是论坛给了指定播放器。导致每次播放时需要联网验证,而且检测到开启屏幕录像软件后就将其杀掉。首先使用API Logger对播放器进程进行函数调用跟踪,发现该播放器使用CreateToolhelp32Snapshot枚举进程,当发现是屏幕录像软件时则使用OpenProcess和TerminateProcess杀死进程。解决思路为Hook 播放器进程的OpenProcess函数,当尝试打开非当前进程时直接返回无效句柄。

  1. 使用MiniHook Hook OpenProcess函数
#include <iostream>
#include "MinHook.h"

typedef HANDLE (WINAPI *OpenProcessFunc)(DWORD ,BOOL ,DWORD );
OpenProcessFunc pfOpenProcess = NULL;

HANDLE WINAPI FuckOpenProcess(DWORD dwDesiredAccess,BOOL  bInheritHandle,DWORD dwProcessId)
{
    if (dwProcessId == GetCurrentProcessId())
    {
        return (pfOpenProcess)(dwDesiredAccess, bInheritHandle, dwProcessId);
    }
    else   // 当尝试打开其他进程时直接返回空句柄
    {
        SetLastError(ERROR_ACCESS_DENIED);
        return INVALID_HANDLE_VALUE;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD url_for_reason, LPVOID lpReserved)
{
    switch (url_for_reason)
    {
    case DLL_PROCESS_ATTACH:
        {
            MH_Initialize();
            MH_CreateHookApi(L"Kernel32", "OpenProcess", &FuckOpenProcess, (LPVOID*)&pfOpenProcess);
            MH_EnableHook(&OpenProcess);
            break;
        }
    case DLL_PROCESS_DETACH:
        {
            MH_DisableHook(&OpenProcess);
            MH_Uninitialize();
            break;
        }
    }
    return TRUE;
}
  1. 使用Remote DLL进行进程注入
    Remote DLL下载地址: https://securityxploded.com/remotedll.php
    使用截图如下:
    remote dll
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参考文献 逆向工程核心原理 Windows消息勾取 消息钩子 Windows操作系统向用户提供GUI,它以事件驱动...
    SamiraG阅读 2,944评论 0 0
  • DLL注入是把指定的DLL加载到另一个进程的内存空间中去。 DLL注入技术:1、通过远程线程注入 ...
    kotw_zjc阅读 3,746评论 0 0
  • cleanmgr--打开磁盘清理工具 compmgmt.msc--计算机管理 conf—-启动netmeeting...
    AnHuaFeng阅读 8,960评论 0 1
  • 介绍 DLL(Dynamic-link library)注入,即,把一个DLL文件放到目标进程中。当一个进程的程序...
    peerless_1024阅读 3,751评论 0 0
  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 9,771评论 0 13