挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 2166|回复: 5
打印 上一主题 下一主题

[辅助源码分享] DEBUG HOOK messagebox最标准写法

[复制链接]

23

积分

3

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
20
海币
0
交易币
0
跳转到指定楼层
楼主
发表于 2016-4-4 15:45:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <iostream>

DWORD head;
int nRet;
BYTE orig_code[5] = {0x90, 0x90, 0x90, 0x90, 0x90};//存放原始的指令
BYTE hook_code[5] = {0xe9, 0, 0, 0, 0};//存放跳转到MyMessageBoxA的指令
BYTE jmp_org_code[5] = {0xe9, 0, 0, 0, 0};//存放跳转到原起始地址后5字节的指令

int MyMessageBoxA(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

int MyFunc();
void Hook();
int jmp_back();

ULONG OldFuncAddr;
ULONG MyFuncAddr;
ULONG jmp_backAddr;

void Hook()
{
  DWORD dwOldProtect;  
  OldFuncAddr = (ULONG)MessageBoxA;

  //1
  MyFuncAddr = *(ULONG *)((BYTE *)MyMessageBoxA+1) + (ULONG)MyMessageBoxA + 5; //计算函数myMessageBoxA的实际地址

  //2
  jmp_backAddr = *(ULONG *)((BYTE *)jmp_back+1) + (ULONG)jmp_back + 5; //计算jmp_back函数的实际地址

  //3 修改jmp_back函数的实际地址 与 MESSAGEBOX前五个字节内存为可读可写
  VirtualProtect((LPVOID)jmp_backAddr, 10, PAGE_EXECUTE_READWRITE, &dwOldProtect);
  VirtualProtect((LPVOID)OldFuncAddr, 5, PAGE_EXECUTE_READWRITE, &dwOldProtect);

  //计算跳转地址
  *((ULONG*)(hook_code+1)) = (ULONG)MyFuncAddr - (ULONG)OldFuncAddr - 5; //计算需要从MESSAGEBOX跳转到自己函数的差距地址

  memcpy(orig_code,(BYTE *)OldFuncAddr, 5);//保存老函数中的5个字节

  memcpy((BYTE*)OldFuncAddr, hook_code, 5);//修改老函数的前五个字节

  //计算返回地址
  *((ULONG*)(jmp_org_code+1)) = (ULONG)OldFuncAddr - (ULONG)jmp_backAddr - 5; //计算 老函数到jmp_back函数的差异地址
  //这里一开始我很疑惑,这样不就死循环了 注意他前面还有五个字节,也就刚好错开

  memcpy((BYTE *)jmp_backAddr, orig_code, 5); //把老函数的前五个值复制到jmp_back的五个字节

  memcpy((BYTE *)jmp_backAddr + 5, jmp_org_code, 5); //这里是jmp_back到老函数的差异地址
}

__declspec(naked) int jmp_back()
{
  __asm
  {
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
    _emit 0x90
  }
}

__declspec(naked) int MyMessageBoxA(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType)
{   
   __asm
  {
    pop head //ebp+4都知道是什么
    pop hWnd
    pop lpText
    pop lpCaption
    pop uType
  }
  MyFunc();//加入自己的函数
  __asm
  {
    //压栈过程
    push uType
    push lpCaption
    push lpText
    push hWnd
    push head
    //跳回MessageBoxA入口点
    jmp jmp_back;
    ret;
  }
}

int MyFunc() //随便定义的函数
{
  printf("Hello World\r\n");
  return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
          Hook();

      int rt = MessageBoxA(NULL, "Hello World", "Title", MB_OK);

          getchar();

          return 0;
}




联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:【此贴必火】麋鹿助手开源超级变态菜单 、、、、类似迷茫菜单
下一篇:解决TP在X64内核级别对调试对象做的手脚
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

2

积分

0

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
2
海币
29
交易币
0
沙发
发表于 2016-4-4 16:30:32 | 只看该作者
支持下感谢分享精彩文章

1

积分

0

主题

3

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
1
交易币
0
板凳
发表于 2016-4-4 17:05:58 | 只看该作者
打酱油的啦,飘过赚点海币而已。
4中级会员
356/600

356

积分

5

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
351
海币
242
交易币
0
地板
发表于 2016-4-4 17:05:59 | 只看该作者
打酱油的啦,飘过赚点海币而已。
3正式会员
154/300

154

积分

6

主题

6

听众
已帮网友解决0 个问题
好评
0
贡献
148
海币
594
交易币
0
5#
发表于 2016-4-4 17:15:53 | 只看该作者
这么6 啊、
回复

使用道具 举报

6高级会员
771/1100

771

积分

13

主题

15

听众
已帮网友解决0 个问题
好评
0
贡献
758
海币
75
交易币
0
6#
发表于 2016-4-4 17:26:16 | 只看该作者
请说是在  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-20 22:34 , Processed in 0.098934 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表