当前位置:首页 > Windows程序 > 正文

HOOK API(四)

2021-05-24 Windows程序

—— 进程防终止

0x00        前言

这算是一个实战吧,做的一个应用需要实现进程的防终止保护,查了相关资料后决定用HOOK API的方式实现。起初学习HOOK API的起因是因为要实现对剪切板的监控,后来面对进程保护这样一个需求时,综合各方资料并自己动手实现HOOK OpenProcess() 和 TerminateProcess() 来从调用层实现进程的防终止。下面将进一步介绍实现的过程,也算是对学习的一个总结与实战。

主要参考:

0x01        实现思路

大体的HOOK API的实现思路在前面几篇相关文章中已经讲过。大致可分为以下步骤:1.确定要HOOK的API原型,并参照原型定义自己的API。2.在DLL中实现自己的API,并使用新的API入口地址替换原API地址实现HOOK,利用jmp xxxx 指令实现重定向。其中可以利用GetProcAddress()获取系统的API地址,通过WriteProcessMemory将自己写的API地址替换掉原API地址。3.利用鼠标钩子将自己的DLL注入到目标进程中。

我们这里要实现进程的防终止,设计到的API有两个,分别是OpenProcess() 和 TerminateProcess(),这两个API在Kernel32.dll中。如果只HOOK 其中一个API是不可行的,若只HOOK OpenProcess(),那么任务管理器将无法获取到受保护进程的信息,进而会出错。若只HOOK TerminateProcess也是不可行的,因为一个进程的句柄在本进程与其他进程中是不一样的,因此若是你不知道自己进程在其他进程中的句柄那将无法HOOK TerminateProcess。

本事例采用的方案是,同时HOOK OpenProcess()和TerminateProcess(),在OpenProcess中获取自己的受保护进程在其他进程中的调用句柄,然后再TerminateProcess进程监控,如果发现有进程调用TerminateProcess并且所借宿的对象是自己要保护的进程,那么就给出禁止关闭的提示窗口。

OpenProcess()是打开进程,而TerminateProcess()是结束进程,在调用TerminateProcess()结束进程时,必然会先调用OpenProcess()进程打开进程句柄。以下是这两个API的原型:

HANDLE OpenProcess(

DWORD dwDesiredAccess,     //渴望得到的访问权限(标志)

BOOL bInheritHandle,         // 是否继承句柄

DWORD dwProcessId        // 进程标示符

);

BOOL TerminateProcess(

HANDLE hProcess,        //进程句柄

UINT uExitCode         //进程终止码

);

0x02        HOOL DLL的实现 MonitorDll中的MonitorDll.h源码:

// MonitorDll.h : MonitorDll DLL 的主头文件

//

#pragma once

#ifndef __AFXWIN_H__

    #error "在包含此文件之前包含"stdafx.h"以生成 PCH 文件"

#endif

#include "resource.h"        // 主符号

// CMonitorDllApp

// 有关此类实现的信息,请参阅 MonitorDll.cpp

//

class CMonitorDllApp : public CWinApp

{

public:

    CMonitorDllApp();

// 重写

public:

    virtual BOOL InitInstance();

    int ExitInstance();

    DECLARE_MESSAGE_MAP()

};

 

MonitorDll中的MonitorDll.cpp源码:

// MonitorDll.cpp : 定义 DLL 的初始化例程。

//

#include "stdafx.h"

#include "MonitorDll.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

/*

    全局变量

*/

//    共享变量

#pragma data_seg("Share")

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70525.html