找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 370|回复: 1

昭姐每天一练- C语言版-HOOK SetWindowTextA(精简易学)

[复制链接]

30

主题

1

回帖

0

积分

版主

积分
0
发表于 2013-6-8 10:31:54 | 显示全部楼层 |阅读模式


最精简的API钩子示范 C语言版-HOOK SetWindowTextA   设置窗口标题函数。。
这个是个DLL 测试时候注入或者在主程序载入编译后的DLL看看效果




#include "StdAfx.h"
#include<stdio.h>
//声明处
void myhook();
void UnHOOK(DWORD ProcAddr);
DWORD a;//原函数地址数据
//假冒API函数
DWORD  WINAPI MySetWindowTextA(HWND,LPCTSTR)
{
    MessageBox(NULL,"亲爱的您要使用的函数被拦截了!","友情提示",1);   
    //UnHOOK(a);
         return 0;  
}
// 加载修改-------------------
void WriteJMP(DWORD ProcAddr,LPVOID lpData)
{
BYTE _data[5];
_data[0]=0xE9;
DWORD OldPro;
VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);
memcpy((LPVOID)(_data+1),lpData,4);//_data是变量的内存地址
memcpy((LPVOID)(ProcAddr),_data,5);
VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);//内存属性恢复为只读
}

//卸载修改
void UnHOOK(DWORD ProcAddr)
{
    BYTE _data[5]={0x8b,0xff,0x55,0x8b,0xec};//
   DWORD OldPro;
   VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);
     memcpy((LPVOID)(ProcAddr),_data,5);
VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);
}
//DLL入口函数
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
        case DLL_PROCESS_ATTACH: myhook();//MessageBox(NULL,"亲爱的我被加载咯","友情提示:",1);break;  //测试
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH: break;        
    }
    return TRUE;
}
//
void myhook()
{
    HMODULE hWsock32=GetModuleHandle("user32");
    a=(DWORD)GetProcAddress(hWsock32,"SetWindowTextA");
    DWORD tmp=(DWORD)MySetWindowTextA-(a+5);
    WriteJMP(a,&tmp);
}

0

主题

14

回帖

0

积分

新手上路

积分
0
发表于 2013-6-9 07:52:19 | 显示全部楼层
昭姐厉害啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 03:24 , Processed in 0.157351 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

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