广告
返回顶部
首页 > 资讯 > 后端开发 > Python >实现hook OpenProcess实现
  • 622
分享到

实现hook OpenProcess实现

hookOpenProcess 2023-01-31 03:01:13 622人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

#include <windows.h>PIMAGE_IMPORT_BY_NAME  pImportByName = NULL;PIMAGE_THUNK_DATA    pOriginalThunk = NULL;PIMAGE_


#include <windows.h>

PIMAGE_IMPORT_BY_NAME  pImportByName = NULL;
PIMAGE_THUNK_DATA    pOriginalThunk = NULL;
PIMAGE_THUNK_DATA    pFirstThunk = NULL;

//IAT HOOK的核心函数、
int IatHook(const char* DllName, const char* FunName,DWord RealAddr);


//自己的OpenProcess函数、
HANDLE   WINapi    MyOpenProcess    (DWORD dwDesiredAccess,  BOOL bInheritHandle,   DWORD dwProcessId);

DWORD MyOpenProcessAddr = (DWORD)MyOpenProcess;


//真正的 OpenProcess函数指针、、
typedef HANDLE (WINAPI * RealOpenProcess)(DWORD,BOOL,DWORD);
RealOpenProcess pRealOpenProcess = (RealOpenProcess)OpenProcess;


//DLL MaiN 函数、
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
if(fdwReason==DLL_PROCESS_ATTACH)
{
 IatHook("Kernel32.dll","OpenProcess",MyOpenProcessAddr);
}
return TRUE;
}



HANDLE WINAPI MyOpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId)
{

//获取  要保护进程的标题  的窗口句柄 系统API函数前使用::为了和类扩展函数区别
// 为了代码的健壮性 使用TEXT宏、  HWND 窗口句柄、
HWND HProtect = ::FindWindow(NULL,TEXT("Windows 当前所有进程"));
if(!HProtect)
{
 return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
}                         //若不存在则调用返回
                            //获取创建此窗口的进程的ID、保存在  &ProtectId  地址中、
DWORD ProtectId;                //下边找出某个窗口的创建者(线程或进程)
GetWindowThreadProcessId(HProtect,&ProtectId);
if(ProtectId == dwProcessId)                      //dwProcessId是任务管理器要结束的进程ID
{
 return 0;                              //如果结束的是我们的进程则 返回错误码0、
}
 return ( pRealOpenProcess(dwDesiredAccess,bInheritHandle,dwProcessId) );
}

/ ****************************************************** IAT  HOOK  函数的实现部分****************************************************/

int IatHook(const char* DllName, const char* FunName,DWORD RealAddr)

{


HANDLE pBegin = GetModuleHandle(NULL);
PBYTE  pBegin2 = (PBYTE)pBegin;
PIMAGE_DOS_HEADER DOS = PIMAGE_DOS_HEADER(pBegin2);
PIMAGE_NT_HEADERS NT = PIMAGE_NT_HEADERS(pBegin2+DOS->e_lfanew);
PIMAGE_OPTioNAL_HEADER OPTION = &(NT->OptionalHeader);
PIMAGE_IMPORT_DESCRIPTOR IMPORT = PIMAGE_IMPORT_DESCRIPTOR(OPTION->DataDirectory[1].VirtualAddress + pBegin2);

while (IMPORT->Name)
{  
 char* OurDllName = (char*)(IMPORT->Name + pBegin2);
 if (0 == strcmpi(DllName , OurDllName))
 {
  break;
 }
 IMPORT++;
}


PIMAGE_IMPORT_BY_NAME  pImportByName = NULL;
PIMAGE_THUNK_DATA   pOriginalThunk = NULL;
PIMAGE_THUNK_DATA   pFirstThunk = NULL;
pOriginalThunk = (PIMAGE_THUNK_DATA)(IMPORT->OriginalFirstThunk + pBegin2);
pFirstThunk = (PIMAGE_THUNK_DATA)(IMPORT->FirstThunk + pBegin2);
while (pOriginalThunk->u1.Function) //记住是Function
{
 DWORD u1 = pOriginalThunk->u1.Ordinal;  //记住是Ordinal
 if ((u1 & IMAGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG) //说明MSB不是1  不是以序号导入
 {
  pImportByName = (PIMAGE_IMPORT_BY_NAME)((DWORD)pOriginalThunk->u1.AddressOfData + pBegin2);
  char* OurFunName = (char*)(pImportByName->Name); //下边的计算也可以  
  //char* OurFunName2 = (char*)((DWORD)pOriginalThunk->u1.AddressOfData + pBegin2 + 2);  
  if (0 == strcmpi(FunName,OurFunName))
  {
   //获取以pFirstThunk开始的内存的信息并将其保存到MEMORY_BASIC_INFORMATION结构中
   MEMORY_BASIC_INFORMATION   mbi_thunk;
   VirtualQuery (pFirstThunk, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
   //VirtualProtect(mbi_thunk.BaseAddress,mbi_thunk.RegionSize, PAGE_READWRITE, &mbi_thunk.Protect);
   //修改以pFirstThunk开始的内存的的保护属性为PAGE_READWRITE并将原保护属性保存到&dwOLD中
   DWORD dwOLD;
   VirtualProtect(pFirstThunk,sizeof(DWORD),PAGE_READWRITE,&dwOLD);
   //更改真正OpenProcess的地址为自己写的MyOpenProcess函数的地址、、
   pFirstThunk->u1.Function = (PDWORD)RealAddr;      //关键地方
   //恢复之前更改的内存的保护属性为人家自己的、、          
   VirtualProtect(pFirstThunk,sizeof(DWORD),dwOLD,0);
   break;
  }
 }
 pOriginalThunk++;
 pFirstThunk++;
}
return 0;
}


--结束END--

本文标题: 实现hook OpenProcess实现

本文链接: https://www.lsjlt.com/news/187660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 实现hook OpenProcess实现
    #include <windows.h>PIMAGE_IMPORT_BY_NAME  pImportByName = NULL;PIMAGE_THUNK_DATA    pOriginalThunk = NULL;PIMAGE_...
    99+
    2023-01-31
    hook OpenProcess
  • react实现自定义拖拽hook
    前沿 最近发现公司的产品好几个模块用到了拖拽功能,之前拖拽组件是通过Html5 drag Api 实现的但体验并不是很好,顺便将原来的拖拽组建稍做修改,写一个自定义hook,方便大家...
    99+
    2022-11-13
  • android的got表HOOK实现代码
    概述 对于android的so文件的hook根据ELF文件特性分为:Got表hook、Sym表hook和inline hook等。 全局符号表(GOT表)hook,它是通过解析SO文...
    99+
    2022-11-12
  • React Hook实现对话框组件
    React Hook实现对话框组件,供大家参考,具体内容如下 准备 思路:对话框组件是有需要的时候希望它能够弹出来,不需要的时候在页面上是没有任何显示的,这就意味着需要一个状态,在父...
    99+
    2022-11-13
  • Vue3+hook如何实现弹窗组件
    本文小编为大家详细介绍“Vue3+hook如何实现弹窗组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3+hook如何实现弹窗组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。要封装什么如果是普通弹窗使...
    99+
    2023-07-04
  • Python中hook的实现原理是什么
    在Python中,hook(钩子)是一种机制,允许开发者在特定事件(例如函数调用、异常发生等)发生时插入自定义的代码进行处理。实现原...
    99+
    2023-09-26
    Python
  • React+Typescript实现倒计时Hook的方法
    首先对setInterval做了Hook化封装👇 import { useEffect, useRef } from 'react' function us...
    99+
    2022-11-12
  • ahooks控制时机的hook实现方法
    目录引言Function Component VS Class ComponentClass ComponentFunction ComponentLifeCycle - 生命周期u...
    99+
    2022-11-13
  • ahooks控制时机的hook如何实现
    本篇内容主要讲解“ahooks控制时机的hook如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ahooks控制时机的hook如何实现”吧!Function Component VS Cl...
    99+
    2023-07-02
  • LyScript实现Hook改写MessageBox的方法详解
    LyScript 可实现自定义汇编指令的替换功能,用户可以自行编写一段汇编指令,将程序中特定的通用函数进行功能改写与转向操作,此功能原理是简单的Hook操作。 首先我们先来实现一个H...
    99+
    2022-11-11
  • React hook实现简单的websocket封装方式
    目录React hook实现websocket封装react自定义hook解决websocket连接,useWebSocket1、描述2、代码React hook实现websocke...
    99+
    2022-11-13
  • React实现一个倒计时hook组件实战示例
    目录前言思路实现总结前言 本篇文章主要实现一个无样式的倒计时 hook 组件,通常不同地方的倒计时样式都不同,但倒计时的逻辑基本是都是一样的,因此可以抽离成一个工具方法或者一个 ...
    99+
    2023-02-23
    React倒计时hook组件 React hook
  • React怎么实现一个倒计时hook组件
    这篇“React怎么实现一个倒计时hook组件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React怎么实现一个倒计时ho...
    99+
    2023-07-05
  • LyScript实现Hook隐藏调试器的方法详解
    目录Patch_PEBPatch_IsDebuggerPresentPatch_CheckRemoteDebuggerPresentPatch_GetTickCountPatch_Z...
    99+
    2022-11-11
  • React项目中hook实现展示对话框功能
    目录思路:使用全局状态管理所有对话框尝试设计一个API去做对话框的全局管理实现:创建NiceModal组件和相关API处理对话框的返回值总结React中使用对话框并不容易,主要因为:...
    99+
    2022-11-13
  • React-Hook中使用useEffect清除定时器的实现方法
    目录useEffectuseEffect清除定时器最后useEffect 之前我们学习了class组件的声明周期,那么我们想在函数式组件中做一些声明周期有关操作能否实现呢?函数式组件...
    99+
    2022-11-13
    react Hook useEffect清除定时器 react Hook定时器 react Hook useEffect使用
  • React项目中hook怎么实现展示对话框功能
    这篇文章主要介绍“React项目中hook怎么实现展示对话框功能”,在日常操作中,相信很多人在React项目中hook怎么实现展示对话框功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React项目中hoo...
    99+
    2023-06-30
  • Android Hook技术实战详解
    前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 什么是Android Hook...
    99+
    2023-09-03
    android Hook 反射 动态代理 view
  • 30行代码实现React双向绑定hook的示例代码
    目录使用Proxy代理数据使用useRef创建同一份数据引用添加更新handler去除多次Proxy添加缓存完善代码总结Sandbox 示例Vue和MobX中的数据可响应给我们留下了...
    99+
    2022-11-13
  • Uniswap V4 Hook 最佳安全实践
    Uniswap V4 Hook 最佳安全实践 近期 Uniswap Lab 官宣了下一代 AMM Uniswap V4 的开发进展,并公开了白皮书和代码仓库。这次 V4 的白皮书仅仅只有 3 页,原因是 V4 并没有对 AMM 的核心算法逻...
    99+
    2023-08-30
    安全 区块链 智能合约 安全威胁分析 web安全
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作