覆盖地址HOOK API

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
前天看到kruglinski的一段程序,我看了一下今天花了一下午的时间来自己实现了一个。不过我的没有用动态地址的方法,而是自己去写了静态的地址到里面灵活性没有他的大不过功能上面还是差不多的。下面我简单讲一下我的原理。

跳转的具体原理
就是用两句汇编句:

   mov eax , 12345678   (自定义函数的地址,每个机器各不相同是需要手动调整)
   jmp eax

汇编代码:

e8 78 56 34 12  //第2,3,4,5是需要手工调整的
ff e0

1。计算出地址“冒名顶替函数”的入口地址。
2。得要HOOK的API函数的地址。
3。保存API函数的入口内容。
4。修改API函数的入口内容。
5。再在“冒名顶替函数”里面实现完其他功能后,把原来的API函数的入口内容给回去。

代码如下:

//
//write by Gxter
//
//通过覆盖系统函数的地址来实现HOOK API
//
#include "stdio.h"
#include "windows.h"
#include "tchar.h"


BYTE addr_old[8] = {0};
BYTE addr_new[8] = { 0xB8, 0x20, 0x10, 0x40, 0x00, 0xFF, 0xE0, 0x00 }; //第2,3,4,5是需要手工调整的(重要的步骤)
DWORD pfnMsgBox=0;  //API函数地址


int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType)
{
int ret = 0;

  DWORD dwOldProtect;
  MEMORY_BASIC_INFORMATION    mbi;

  ::VirtualQuery((void *)pfnMsgBox, &mbi, sizeof(mbi));
  ::VirtualProtect((void *)pfnMsgBox, 8, PAGE_READWRITE, &dwOldProtect);

  // 写入原来的执行代码
  ::WriteProcessMemory(::GetCurrentProcess(),
        (void *)pfnMsgBox,
        addr_old,
        sizeof(DWORD)*2,
        NULL);

  ::VirtualProtect((void *)pfnMsgBox, 8, mbi.Protect, 0);

ret=MessageBox(hWnd,"gxter","gxter",uType);

return ret;
}

//----------------------------------------------程序入口
int main()
{
DWORD dwOldProtect;
MEMORY_BASIC_INFORMATION    mbi;

MessageBox(NULL,_T("Hook Demo!"),_T("API Hook"),MB_ICONINFORMATION);
pfnMsgBox=(DWORD)GetProcAddress(GetModuleHandle(_T("user32.dll")),_T("MessageBoxA"));
printf("api入口地址: %x/n",pfnMsgBox);


VirtualQuery( (void *)pfnMsgBox, &mbi, sizeof(mbi) );
//修改我们要改的地址的页属性,为可读可写
VirtualProtect( (void *)pfnMsgBox, 8, PAGE_READWRITE, &dwOldProtect);

// 保存原来的执行代码
memcpy(addr_old, (void *)pfnMsgBox, 8);

// 写入新的执行代码
WriteProcessMemory(   GetCurrentProcess(),
        (void *)pfnMsgBox,
              addr_new,
        sizeof(DWORD)*2,
        NULL);
//修改为原来的属性属性
VirtualProtect((void *)pfnMsgBox, 8, mbi.Protect, 0);

//当调用这个函数的时候就跳到我的函数上面了
MessageBox(NULL,_T("Hook Demo!"),_T("API Hook"),MB_ICONINFORMATION);


getchar();
return 0;
}

//--------------------------------the  end-----------------------------


用心飞翔!
 
Gxter
版主



发贴 255
积分 5
注册 2004-11-19
状态 离线
[2 楼] Posted:2006-1-25 06:26 PM                 编辑  报告 
关于这个文章后来人私下里问我,那个地址是怎么回事!

这是我在写《覆盖地址HOOK API》这个学习笔记的同时写的另一篇东西。

《自定义函数和API函数的跳转》

//
//write by Gxter
//
//title:自定义函数的跳转过程,和API函数的跳转过程
//
//说明:程序里面的地址是每个机器都不尽相同的,但道理都是一样的。

#include "stdio.h"
#include "windows.h"

void fun();  

int main()
{
fun();

getchar();
return 0;
}

void fun()
{
printf("write by Gxter!");
}

//自定义函数的跳转是程序中的跳转指令,然后由跳转指令跳转到函数的执行体。
/*

1。主程序中:00401038   E8 C8 FF FF FF     call    @ILT+0(_fun) (00401005)

2。跳转指令:00401005   E9 B6 00 00 00     jmp    fun (004010c0)

3。函数执行体:004010C0 55                 push   ebp

//自定义函数是根据地址直接跳转

*/

//-----------------------------------the end------------------------------------------

//
//write by Gxter
//
//title:自定义函数的跳转过程,和API函数的跳转过程
//
//说明:程序里面的地址是每个机器都不尽相同的,但道理都是一样的。


#include "stdio.h"
#include "tchar.h"
#include "windows.h"

int main()
{
MessageBox(NULL,_T("Hook Demo!"),_T("API Hook"),MB_ICONINFORMATION);

getchar();
return 0;
}


//API函数调用过程
/*

1。主程序中:00401038 FF 15 94 52 42 00    call   dword ptr [__imp__MessageBoxA@16 (00425294)]
  地址004252B4中的内容  "6544  77E1"
(是根据地址的内容里面的地址跳转)
  
2。API函数的执行体:77E16544 55            push        ebp

*/

//--------------------------------the end------------------------------------------------
Frida高级Hook实战:逆向.so文件加密与验证函数 动态链接库(.so文件)是Linux/Android系统中承载核心逻辑与安全机制的关键组件,其内部的加密算法和验证函数常以C/C++编写,逆向难度较高。动态代码插桩技术通过运行时注入和拦截,能够深入分析这些原生层函数的执行流程与数据交互。在移动安全与软件分析领域,这项技术对于理解应用行为、进行安全评估至关重要。面对经过混淆、加固的.so文件,常规Hook方法往往失效,需要借助模式匹配、内存扫描等高级定位技术,并结合对ABI调用约定和反调试机制的深入理解。本文聚焦于使用Frida工具,通过实战案例详细拆解如何 阅读详情

相关推荐

HOOK其他进程API和全局HOOK-API

HOOK是一种WINDOWS下存在很久的技术了。 HOOK一般分两种1。HOOK MESSAGE  2。HOOK API 本问讨论的是HOOK API。(如果你是HOOK高手就不要看了) 在最初学HOOK-API的时候通常都是通过覆盖地址和修改IAT的方法。通过这两种技术,我们基本都可以实现对本进程的API函数进行HOOK了。但是在高兴之余会有点遗憾,怎么才能HOOK其他进程的API函数呢?怎么才

4282

9.3 挂钩API技术(HOOK API

9.3 挂钩API技术(HOOK API

qq_36314864的博客 3627

逆向工程实战:内存补丁与DLL劫持技术剖析

本文深入剖析了逆向工程中的内存补丁与DLL劫持技术。通过实战案例,详细讲解了如何定位关键内存地址、编写补丁程序,以及利用DLL搜索顺序实现劫持的原理与步骤。文章旨在帮助安全研究人员和开发者理解软件运行时行为修改机制,以进行合法的安全分析和软件调试。

cc789的博客 611

简述API HOOK技术及原理

我们观察内核代码的时候,很多时候一些函数调用都初始化的时候设置成回调函数的,例如上一个例子读取文件目录,那么proc有自己独有的读取目录处理函数,相对于的ext4、ceph、hpfs等等文件系统都有自己的处理函数,那么getdents的时候如何能调用到正确的处理函数呢?而在应用程序建立套接字的时候选择了v4还是v6,都是同一个系统调用(sys_socket),只是传入的参数是不一样的,那么内核根据传参的差异,灵活的选择使用不同函数来初始化套接字,不同的函数又使用各自对应的结构体来初始化后续的调用函数

bing1564的博客 3301

Hook技术之API拦截(API Hook)

Inline Hook就是修改

bobopeng 3万+

Hook API 原理 解析

1 什么是Hook API 简单的说,一个应用程序要调用一个API函数,例如CreateFileW,那么应用程序必须要知道函数地址,才能调用它,我对Hook API的理解是,把这个函数地址替换为另一个函数MyCreateFileW的地址,那么每当程序调用CreateFileW时,就会调用MyCreateFileW 2 Hook API有什么用 在《Rootkits——W...

weixin_33836223的博客 544

HOOK API技术

HOOk API技术 HOOK学习笔记与心得 奇技淫巧之调试被远程线程注入的DLL windows核心编程_系统消息与自定义钩子hook使用 [Windows Dll Injection、Process Injection、API Hook、DLL后门/恶意程序入侵技术] Hook :Microsoft Detours 2.1简介 detours3.0文档 Hook简单实用 detours ...

【黑键】 4572

覆盖地址HOOK API范例代码

覆盖地址HOOK API范例代码作者:Gxter     时间:2008-06-17 09:11:44前天看到kruglinski的一段程序,我看了一下今天花了一下午的时间来自己实现了一个。不过我的没有用动态地址的方法,而是自己去写了静态的地址到里面灵活性没有他的大不过功能上面还是差不多的。下面我简单讲一下我的原理。跳转的具体原理就是用两句汇编句:  mov eax , 123

702

hook其他进程的API【转载】

hook其他进程的API                                       今天终于有了一个小小的进步就算是自己的努力来完成的,没想到HOOK其他进程的API原来这样的简单。其实就是两个关键的技术(HOOK-API和远程线程注入)。HOOK是一种WINDOWS下存在很久的技术了。 HOOK一般分两种1。HOOK MESSAGE 2。HOOK API 本问讨论的是HOOK

梦的归宿 1万+

windows hook 之IAT篇

转载请注明出处http://blog.csdn.net/qingheuestc/article/details/6527991,并保证文章完整性,by Einstein In Ict。       程序员通过使用微软提供的api不仅可以方便的实现绝大多数的编程任务,同时也不必与繁琐的计算机硬件直接打交道。出于某些工程上的需求,有时我们需要在调用某个api的时候做一些额外的工作(比如采集或

qingheuestc的专栏 2002

hook 方式3

<br />一旦调用hookapi 就将调用地址改变。<br /> <br />#include<windows.h> #define Max 20 struct myass { DWORD ADDRESS[Max]; int num; }Array; int Add_address(DWORD a) { int i; if (a==0) return 0; for ( i=0;(i<Max)&&(Array.ADDRESS[i]!=0);i++) { if (

fanpeii的专栏 548

项目实训项目博客2--demo

函数拦截:通过拦截函数地址获取命令注入:在中录制自定义渲染命令资源追踪:通过映射表维护 Vulkan 对象关系同步机制:使用信号量确保命令执行顺序线程安全:使用互斥锁保护共享数据。

2301_80337159的博客 192

hook其他进程的API

HOOK是一种WINDOWS下存在很久的技术了。 HOOK一般分两种1。HOOK MESSAGE 2。HOOK API 本问讨论的是HOOK API。(如果你是HOOK高手就不要看了) 在最初学HOOK-API的时候通常都是通过"覆盖地址"和"修改IAT"的方法。通过这两种技术,我们基本都可以实现对本进程的API函数进行HOOK了。但是在高兴之余会有点遗憾,怎么才能HOOK其他进程的API函数呢?

Johnny的专栏 1777

API+HOOK技术思路讲解

远程注入参考文档:http://blog.csdn.net/ithzhang/article/details/7042613 apihook参考文档:http://blog.csdn.net/friendan/article/details/12222651 推荐书籍:《windows核心编程》   技术概述 API HOOK技术包括两个主要的技术。1、远程注入API技术, 2、APIH

jizhi84305445的博客 1339

API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)

一个完整的hook,如果hook程序是以dll形式生成的,是分两步:1.完成dll本身的设计和生成,2.完成dll注入程序的设计和生成 本文完成第一步。 第二步在http://blog.csdn.net/arvon2012/article/details/7767437有详细讲解。 最近在64位win7上hook文件复制,拖拽和剪切的hook(这个要通过hook IFileOperating接口实现)。所以学习了API hook。这里是对自己的学习做个简单的总结,希望和hook新手们共同探讨和进.

翻肚鱼儿的博客 2390

Windows内核API HOOK 之 Inline Hook

名字起得好,Inline hook,乍一听,似乎很高深。此处的Inline,我以为,意指将汇编代码直接写入内核API的内存区域。Inline Hook不像用户态Hook或SSDT hook(用C语言就足够),它需要在程序中嵌入汇编代码(Inline Assembly)以操作堆栈和执行内核API对应的部分汇编指令。当然,这些都须以驱动的形式进行。所谓API Hook,就是用自己写的函数去替代系统AP

tony的专栏 3267

Windows 内核API HOOK 之 Inline Hook

<br />转自http://www.cnblogs.com/dflower/archive/2009/09/21/1571006.html<br />来源:CSDN   作者:daiwen<br />名字起得好,Inline hook,乍一听,似乎很高深。此处的Inline,我以为,意指将汇编代码直接写入内核API的内存区域。Inline Hook不像用户态Hook或SSDT hook(用C语言就足够),它需要在程序中嵌入汇编代码(Inline Assembly)以操作堆栈和执行内核API对应的部

风随影动的专栏 826
上一篇: 网络防火墙防范溢出策略
下一篇: 使用SoftICE调试程序入门
iiprogram
博客等级 码龄25年 1066粉丝 1515原创
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值