API HOOK, Unicode or non-Unicode? [问题点数:100分,结帖人Idle_]

Bbs6
本版专家分:7981
Blank
黄花 2014年10月 VC/MFC大版内专家分月排行榜第二
2014年9月 VC/MFC大版内专家分月排行榜第二
结帖率 66.67%
Bbs7
本版专家分:22445
Bbs8
本版专家分:37336
Blank
蓝花 2016年1月 VC/MFC大版内专家分月排行榜第三
Bbs6
本版专家分:7981
Blank
黄花 2014年10月 VC/MFC大版内专家分月排行榜第二
2014年9月 VC/MFC大版内专家分月排行榜第二
Bbs8
本版专家分:37336
Blank
蓝花 2016年1月 VC/MFC大版内专家分月排行榜第三
Bbs7
本版专家分:22445
Bbs3
本版专家分:920
Bbs12
本版专家分:433021
版主
Blank
榜眼 2009年 总版技术专家分年内排行榜第二
2005年 总版技术专家分年内排行榜第二
Blank
进士 2018年总版新获得的技术专家分排名前十
Blank
银牌 2009年7月 总版技术专家分月排行榜第二
2009年3月 总版技术专家分月排行榜第二
2009年1月 总版技术专家分月排行榜第二
2005年7月 总版技术专家分月排行榜第二
2005年5月 总版技术专家分月排行榜第二
2005年3月 总版技术专家分月排行榜第二
Blank
优秀版主 优秀小版主
2015年8月优秀小版主
2015年9月优秀小版主
2015年5月优秀小版主
2015年2月论坛优秀版主
Bbs6
本版专家分:7981
Blank
黄花 2014年10月 VC/MFC大版内专家分月排行榜第二
2014年9月 VC/MFC大版内专家分月排行榜第二
Bbs7
本版专家分:22445
Bbs1
本版专家分:0
Hook Api,hook ReadFile,hook WriteFile,hook LoadLibrary
<em>hook</em> <em>api</em>,<em>hook</em> CreateFile,<em>hook</em> CloseHandle,<em>hook</em> ReadFile,<em>hook</em> WriteFile,<em>hook</em> LoadLibrary
API hook 源码演示
API <em>hook</em> 技术代码演示,主要为了,将代码显示出来啊
hook任意api的函数
<em>hook</em>任意函数,可用于防外挂等安全领域,是封号的代码,开源
linux api hook
演示linux <em>api</em> <em>hook</em>,我免费提供一下,希望对你有帮助。
HOOK API Source
1 待测试程序源码 2 Hook MessageBox的源码 3 设置Exe启动加载Dll的源码
hook api 的c++ 类
<em>hook</em> <em>api</em> 的c++ 类,简单易用.仅四个函数提供调用
Hook Windows API
修改API函数前5个字节为一条jmp指令,跳转到自己写的Hook_<em>api</em>,实现<em>hook</em>系统<em>api</em>函数
Mhook(lib for API hook)
API <em>hook</em>, much more exellent than Microsoft Detour.
API Hook的源代码文件
API Hook的源代码文件 大家一定想剥除钩子函数的神秘感
hook Windows系统API
对Windows系统API,包括RegCreateKeyEx、RegSetValueEx、RegDeleteKey、RegDeleteValue、CreateFile等进行<em>hook</em>,并将相关信息记录下来,适宜初学者学习使用。
API Hook 相关demo
API HOOK的实现方法大概不下五六种。本位主要介绍了其中的一种,即如何使用WIndows挂钩来注入DLL。
API HOOK基本原理
API HOOK基本原理API HOOK基本原理API HOOK基本原理API HOOK基本原理API HOOK基本原理API HOOK基本原理API HOOK基本原理API HOOK基本原理
api hook 源代码
<em>api</em> <em>hook</em> 源代码,已经封装好,直接可用
API hook 的 原理 和 实现
这里通过讲解几个 <em>api</em> <em>hook</em> 实例 ,来帮助 大家 了解 <em>api</em> <em>hook</em>
ring3 hook api 隐藏文件
journal journalplayback 钩子应用 codeprojet.com
【软件安全】API HOOK
API HOOK 顾名思义是挂钩API函数,拦截,控制某些API函数的调用,用于改变API执行结果的技术。 大致流程: 进入进程->获取相关权限->将我们写的dll写入进程内存->加载kernel32中的LoadLibrary()以调用我们写的dll。 http://blog.csdn.net/junbopengpeng/article/details/28142669一文中
vb.net hook api(源码)
利用VB.NET HOOKAPI获取鼠标 及键盘输入 调试会抛出异常~ 直接运行Debug就可以
VB HOOk API源码
用VB实现的Hook API实例,带工程文件
一个API HOOK的例子
一个API HOOK的例子 2010年07月20日   /* 编译环境 VC++6.0 WIN2K/WINXP,工程类型WIN32 APP,编译参数见最后的说明 */   #include   #include /*线程操作API*/   HINSTANCE hInst;/* 任务实例ID */   HWND MainFrmhWnd; /* 主窗口句柄 */...
Windows核心编程 - API HOOK应用
Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行<em>hook</em>后,一旦发生已<em>hook</em>事件,对该事件进行<em>hook</em>的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。
关于api hook的问题!
遇到这样一个问题,对一个测试程序(简单的窗口)进行<em>api</em><em>hook</em>,<em>hook</em> MessageBoxA(W)函数,如果在测试程序的消息相应函数里调用MessageBoxA(W),成功。可是问题出来了,如果在窗口建立之前调用MessageBoxA(W),发现不能<em>hook</em>到,大致如下代码解释:rnwinmain()rnrnMessageBoxA(W);//Hook 不到rn....rnCreateWindow;rnwhilernrnGetMessage()rn...rnrnCALLBACK WinProc(...)rnrn...rnSwitchrn case WM_DESTROYrn MessageBoxA(W)//成功<em>hook</em>rn......rnrn这是为什么,有法子解决吗?rnrn
api hook 的问题
小弟放假了,自己学习写程序,想做一个<em>api</em> <em>hook</em> ,就是当系统调用某个<em>api</em>函数时候,rn调用自己写的函数,有人告诉我将<em>api</em>的函数地址换成自己的函数地址就行了,于是我想截rn获MessageBoxA这个<em>api</em>,我首先定义了自己要替代它的函数rnint __stdcall MyBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)rnrn ......我自己的代码rnrn然后用我的函数地址替代MessageBoxA的函数地址,使用语句rnWriteProcessMemory(GetCurrentProcess(),&MessageBoxA,&MyBoxA,4,NULL);rn但是这样不行,可能是我想的太简单,可是网上这方面的资料太少,不知道哪位大虾rn能帮助小弟啊,给我个示范啊!!!rn
API HOOK工具DetoursExpress
API HOOK工具DetoursExpressAPI HOOK工具DetoursExpress
易语言 HOOK API例子
这个例子是HOOK 弹出消息框的例子 HOOK MessageBoxA 截取消息
c# hook api的问题~~~
本人超级大菜鸟,要做一个抓取另外一个程序中某个控件的文本的功能rn用spy++查看,发现控件的caption不是所需要的文本rn所以用getwindowtext 和sendmessage 都不能取到需要的内容rn查了一些资料说是可以用<em>hook</em> <em>api</em>的方法实现rnrn我现在的程序是c#的,但是在网上查的资料中有好多人说c#本身并不能实现全局的钩子rn但是有看到这个文章:rnhttp://www.souzz.net/html/edu/net/net7/11518.htmlrnrn例子是一个屏幕放大镜的功能rn我想知道这个是不是所谓的全局钩子rn用这种原理是否可以实现我抓取另外一个程序中的文本的功能rn就是<em>hook</em> textout 或者<em>hook</em> drawtextrn如果能的话,那大约需要怎么改。 大体给个思路也行。rnrn如果哪位好心人能帮我改一下,那不胜感激!剩下的700分可以全给!rn
HOOK API 的问题?
想做个小程序完成HOOK API 的功能, 看到<>中讲的使用修改输入模块的方法, 说是不用担心多线程问题, 但是还是想不通, 如果在使用全局钩子将DLL注入时, 在ATTACH中对输入模块的某个函数地址进行修改, 这时如果当前进程中还有另一个线程要调用这个函数的话, 会不会因发错误呀?
关于API HOOK的问题
为什么我HOOK一个进程的send函数会导致进程自动关闭,比如说酷狗。比如我想截获酷狗进程的数据封包,我把代码写在一个dll里,然后注入到酷狗进程里。注入的办法倒不是关键,我就不发自己写的注入程序了,我随便找一个dll注入器注入的,dll代码如下:rn[code=C/C++]#include rn#include rnusing namespace std;rnchar SendJmp[5]=0;rnchar MySendJmp[5]=(char)0xe9;rnint WINAPI MySend(SOCKET s,const char FAR* buf,int len,int flags);rntypedef int (WINAPI *RPsend1)(SOCKET s,const char FAR* buf,int len,int flags);rnRPsend Psend=(RPsend)::GetProcAddress(::LoadLibrary(L"ws2_32.dll"),"send");rnofstream SendOut("SendData.txt");rnBOOL APIENTRY DllMain(HMODULE d1,DWORD d2,LPVOID d3) rn rn DWORD dwJmpAddr=0;rn dwJmpAddr=(DWORD)MySend-(DWORD)Psend-5;rn memcpy(MySendJmp+1,&dwJmpAddr,4);rn ReadProcessMemory((void*)-1,Psend,SendJmp,5,NULL);rn WriteProcessMemory((void*)-1,Psend,MySendJmp,5,NULL);rn return TRUE; rnrnint WINAPI MySend(SOCKET s,const char FAR* buf,int len,int flags)rnrn SendOut<<
关于API HOOK?
CopyFileA函数可以HOOK吗?如果可以的话SetWindowsHookEx()函数中的第一个参数应传入什么!rn
HOOK API 奇怪的错误!!!!!!
以下是dll端 和调用端exe(MFC)的代码:rn运行后打开注册表不知道怎么回事 老是弹出"无法读取内容" 的错误提示!rn弹一会之后我再看run健的时候发现112并没有隐藏 还有!!! 不知道是怎么回事!。rn此段代码是想把112这个字符串隐藏 是在这个目录下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\rnrn#include "stdafx.h"rnrn#pragma data_seg(".shared")rnrnDWORD ProtectingPid = 0;rnrn#pragma data_seg()rnrnHMODULE MyModuleHandle;rnHHOOK hhk = NULL;rnDWORD MyPid = 0;rnunsigned char Store[10];rnrnrnlong _stdcall SelfInject();rnlong _stdcall SelfEject();rnrnLRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam);rnLONG WINAPI RegEnumValue2(rn HKEY hKey,rn DWORD dwIndex,rn LPTSTR lpValueName,rn LPDWORD lpcchValueName,rn LPDWORD lpReserved,rn LPDWORD lpType,rn LPBYTE lpData,rn LPDWORD lpcbDatarn );rnvoid HookAPI();rnvoid UnHookAPI();rnBOOL APIENTRY DllMain( HANDLE hModule, rn DWORD reason,rn LPVOID lpReservedrn )rnrn if (reason == DLL_PROCESS_ATTACH)rn rn HookAPI();rn MyModuleHandle = (HMODULE)hModule;rn MyPid = GetCurrentProcessId();rn rn return TRUE;rnrnrnlong _stdcall SelfInject() //__declspec(dllexport) bool SelfInject()//long _stdcall SelfInject(); // bool SelfInject()rnrn ProtectingPid = MyPid;rn hhk = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,MyModuleHandle,0);rn return (hhk != NULL);rnrnrnlong _stdcall SelfEject() //__declspec(dllexport) bool SelfEject() // bool SelfEject() //__declspec(dllexport)rnrn return Un<em>hook</em>WindowsHookEx(hhk);rnrnrnLRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)rnrn return CallNextHookEx(hhk,nCode,wParam,lParam);rnrnrnvoid HookAPI()rnrn DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;rn HMODULE hmod = GetModuleHandle("Adv<em>api</em>32.dll");rn long pa = (long)GetProcAddress(hmod,"RegEnumValueW");rn long pa2 = (long)RegEnumValue2;rn long dAddr = pa2 - pa - 5;rn unsigned char *p = (unsigned char *)pa;rn unsigned char *p2 = (unsigned char *)(&dAddr);rnrn VirtualProtect((void *)pa,5,NewProtect,&OldProtect);rnrn for(int i=0;iLoadIcon(IDR_MAINFRAME);rnrnrnvoid CTtouDlg::DoDataExchange(CDataExchange* pDX)rnrn CDialog::DoDataExchange(pDX);rn //AFX_DATA_MAP(CTtouDlg)rn // NOTE: the ClassWizard will add DDX and DDV calls herern //AFX_DATA_MAPrnrnrnBEGIN_MESSAGE_MAP(CTtouDlg, CDialog)rn //AFX_MSG_MAP(CTtouDlg)rn ON_WM_SYSCOMMAND()rn ON_WM_PAINT()rn ON_WM_QUERYDRAGICON()rn ON_BN_CLICKED(IDC_BUTTON1, OnButton1)rn ON_BN_CLICKED(IDC_BUTTON2, OnButton2)rn //AFX_MSG_MAPrnEND_MESSAGE_MAP()rnrn/////////////////////////////////////////////////////////////////////////////rn// CTtouDlg message handlersrnrnBOOL CTtouDlg::OnInitDialog()rnrn CDialog::OnInitDialog();rnrn // Add "About..." menu item to system menu.rnrn // IDM_ABOUTBOX must be in the system command range.rn ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);rn ASSERT(IDM_ABOUTBOX < 0xF000);rnrn CMenu* pSysMenu = GetSystemMenu(FALSE);rn if (pSysMenu != NULL)rn rn CString strAboutMenu;rn strAboutMenu.LoadString(IDS_ABOUTBOX);rn if (!strAboutMenu.IsEmpty())rn rn pSysMenu->AppendMenu(MF_SEPARATOR);rn pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);rn rn rnrn // Set the icon for this dialog. The framework does this automaticallyrn // when the application's main window is not a dialogrn SetIcon(m_hIcon, TRUE); // Set big iconrn SetIcon(m_hIcon, FALSE); // Set small iconrn rn // TODO: Add extra initialization herern rn return TRUE; // return TRUE unless you set the focus to a controlrnrnrnvoid CTtouDlg::OnSysCommand(UINT nID, LPARAM lParam)rnrn if ((nID & 0xFFF0) == IDM_ABOUTBOX)rn rn CAboutDlg dlgAbout;rn dlgAbout.DoModal();rn rn elsern rn CDialog::OnSysCommand(nID, lParam);rn rnrnrn// If you add a minimize button to your dialog, you will need the code belowrn// to draw the icon. For MFC applications using the document/view model,rn// this is automatically done for you by the framework.rnrnvoid CTtouDlg::OnPaint() rnrn if (IsIconic())rn rn CPaintDC dc(this); // device context for paintingrnrn SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);rnrn // Center icon in client rectanglern int cxIcon = GetSystemMetrics(SM_CXICON);rn int cyIcon = GetSystemMetrics(SM_CYICON);rn CRect rect;rn GetClientRect(&rect);rn int x = (rect.Width() - cxIcon + 1) / 2;rn int y = (rect.Height() - cyIcon + 1) / 2;rnrn // Draw the iconrn dc.DrawIcon(x, y, m_hIcon);rn rn elsern rn CDialog::OnPaint();rn rnrnrn// The system calls this to obtain the cursor to display while the user dragsrn// the minimized window.rnHCURSOR CTtouDlg::OnQueryDragIcon()rnrn return (HCURSOR) m_hIcon;rnrn_declspec(dllimport) long _stdcall SelfInject();rnvoid CTtouDlg::OnButton1() rnrn //HINSTANCE hInst = ::AfxGetInstanceHandle();rn //::MessageBox(NULL,(char*)hInst,"nihao",MB_OK);rn SelfInject();rnrn_declspec(dllimport) long _stdcall SelfEject();rnvoid CTtouDlg::OnButton2() rnrn SelfEject();rnrnrn rn
关于hook api的问题
我写了一个dll,但是不知道问什么在setwindowsex函数处失败,请大家帮忙看看,程序如下:rnBOOL APIENTRY DllMain( HANDLE hModule, rn DWORD ul_reason_for_call, rn LPVOID lpReservedrn )rnrn if(ul_reason_for_call == DLL_PROCESS_ATTACH)rn //获取本dll句柄rn g_hInstanceforopen = hModule; //创建事务rn g_hOpen = CreateEvent( NULL, FALSE, TRUE, NULL ); rn //重写API开头的8字节rn HMODULE hWsock = LoadLibrary( "kernel32.dll" );rn g_pOpen = ( DWORD )GetProcAddress( hWsock, "CreateFile" ); //保存原始字节 rn ReadProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pOpen,( void * )g_dwOldBytesforopen[0], sizeof( DWORD )*2, NULL );//将00400000改写为我们函数的地址rn *( DWORD* )( g_btNewBytesforopen + 1 ) = ( DWORD )<em>hook</em>_CreateFile;rn WriteProcessMemory( INVALID_HANDLE_VALUE, ( void * )g_pOpen,( void * )g_btNewBytesforopen, sizeof( DWORD )*2, NULL ); rn rn return TRUE;rnrnrn// This is an example of an exported variablernTRYINGDLL_API int nTryingdll=0;rnrn// This is an example of an exported function.rnTRYINGDLL_API int fnTryingdll(void)rnrn return 42;rnrnrn// This is the constructor of a class that has been exported.rn// see tryingdll.h for the class definitionrnCTryingdll::CTryingdll()rn rn return; rnrnstatic LRESULT WINAPI HookProc( int nCode, WPARAM wParam, LPARAM lParam ) rnrnreturn CallNextHookEx( g_hOldHook, nCode, wParam, lParam ); rnrnrnrnBOOL __declspec(dllexport) StartHook(HWND hWnd)rn //通过传入的窗口句柄获取线程句柄rn g_dwThreadID = GetWindowThreadProcessId( hWnd, &g_dwProcessID ); //WH_CALLWNDPROC类型的Hookrn g_hOldOpen = SetWindowsHookEx(WH_CALLWNDPROC, HookProc,( HINSTANCE ) g_hInstanceforopen, g_dwThreadID [color=#FF0000]);//此处运行后下面一行转入false的那行了就[/color]rn if( g_hOldOpen == NULL )rn return FALSE;rn return TRUE;rnrnvoid __declspec(dllexport) StopHook(void)rnrn if(g_hOldHook != NULL)rn rn WaitForSingleObject( g_hOpen, INFINITE );rn HANDLE hProcess = NULL;rn hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, g_dwProcessID);rn DWORD dwOldProc;rn DWORD dwNewProc; //改变页面属性为读写rn VirtualProtectEx( hProcess, ( void* )g_pOpen, 8, PAGE_READWRITE, &dwOldProc ); //恢复API的首8个字节rn WriteProcessMemory( hProcess, ( void* )g_pOpen,( void* )g_dwOldBytesforopen[0], sizeof( DWORD )*2, NULL ); //恢复页面文件的属性rn VirtualProtectEx( hProcess, ( void* )g_pOpen, 8, dwOldProc, &dwNewProc );rn rn CloseHandle(g_hOpen);rn rn Un<em>hook</em>WindowsHookEx( g_hOldOpen );rn rnrnHANDLE _stdcall <em>hook</em>_CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile)rnrn HANDLE hand=NULL;rn if(lpFileName=="%system32/taskmgr.exe")rn MessageBox(NULL,TEXT("Help, Something went wrong"),TEXT("ERROR"),MB_ICONSTOP); rn WaitForSingleObject(g_hOpen, INFINITE ); //恢复API头8个字节rn WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pOpen,( void* )g_dwOldBytesforopen[0], sizeof( DWORD )*2, NULL ); /* 这里可以添加想要进行的处理过程 */ //真正执行API函数rn hand=CreateFile(lpFileName,dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile); //写入跳转语句,继续Hookrn WriteProcessMemory( INVALID_HANDLE_VALUE, ( void* )g_pOpen, ( void* )g_btNewBytesforopen, sizeof( DWORD )*2, NULL ); rn SetEvent( g_hOpen);rn return hand;rnrn————————————————————————————————————————————————————————————————————————rn我主程序中调用此功能模块如下:rn HWND hWnd;rn hinstance= LoadLibrary("tryingdll.dll");rn start = (lpStartHook)GetProcAddress(hinstance, "StartHook");rn end=(lpEndHook)GetProcAddress(hinstance, "StopHook");rn hWnd=GetDesktopWindow()->GetSafeHwnd(); rn start(hWnd);rn//此处我是想注入到我们的浏览器程序,即explorer.exe进程中的,总体就是想知道进程管理器开始执行时获得一个message而已。请各位帮忙研究看看,急!先谢谢了rn
HOOK 系统API
HOOK系统API之后,有没有什么法子,获取到是哪个程序调用了这个API,或者,是系统还是应用程序调用了这个API。rnrn 我现在需要做一个功能,HOOK了一个系统API,但是系统调用的频率非常高,导致我,无法判断是系统调用了还是程序调用了,效率非常差。rnrn 没分分了,后面加分分补给大家。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/20.gif][/img]
关于API HOOK
大家知不知道有关于API HOOK技术介绍比较详细地书籍。用钩子注入DLL,以及挂接动态链接库等。。
●●● API Hook 的问题 ●●●
rn 1.在使用API <em>hook</em>拦截了全局的MessageBox函数后,为什么对VC编译生成的可执行文件中的MessageBox函数,而无法拦截使用BCB或Delpi生成的可执行文件中的MessageBox ?rn 2. 能否进行无dll的ApiHook,只<em>hook</em>本进程内的API函数就可以rn 3. API <em>hook</em> 能否拦截驱动程序中的API调用?比如虚拟打印机驱动程序中的API rn rnrn
API HOOK File
我想HOOK打开的文件关闭的API 应该是什么API 啊 高手指点???
本地HOOK API的列子
本地HOOK API(Inline HOOK): rnHOOK MessageBoxW 这个,让它跳到我们自己的函数处理之后再调用原来的MessageBoxW,这种本地的HOOK API应该是最简单的HOOK API而且它的作用也不是很明显,但是可以了解什么是HOOK API. rnrn#include rn#include rnusing namespace std; rnrntypedef int (WINAPI *pMessageBoxDef)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType); rnrnchar szOldMessageBox[5] = 0; rnchar szJmpMyMessageBox[5] = (char)0xe9; rnpMessageBoxDef pMessageBox = NULL; rn rnint WINAPI MyMessageBox(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) rn rnwcout<
关于全局hook api
我怎样才能<em>hook</em>所有进程调用的某个<em>api</em>函数呢?rn要一个一个的进程进行<em>hook</em>吗?rn高手指教一下。
外挂程序中的API Hook
我用API Hook钩住了ShellAboutW、MessageBox、TextOutA等API函数。用同样的方法却钩不住像GetMessageA、send、recv这些API,可能是什么原因呢?
【再谈Hook API】
前几日得到一Hook API的例程,关于Hook TextOutA,DrawTextW等函数的。rn但只能对自已的程序起作用而不能对所有系统程序有作用,不知何故?rn请大家指点。
关于HOOK API
windows xp sp2中加了DEP数据执行保护 请问该怎么HOOK API
求:API HOOK的实现!!!!!!!
问题描述:怎么<em>hook</em> windows的系统API?rnrn咨询范围:实现方法描述,实现代码。rn给分标准:rn 回贴内容清晰明确,深入浅出者回赠高分。rn 回贴全面深入,不掺水分的,可以考虑标准分值(100分)相送。rn 回贴能够对理解问题有较大帮助者另有50分相赠。rn 贴面上的分数不是给分上限,按以上标准给分,达到标准的有一个给一个。rn 欢迎对这问题有兴趣的朋友一起来UP,共同提高。rn 欢迎大家对问题提出自已的见解和想法(不给分)。rn 谢绝回贴捞分者。
hook api的问题
我可以<em>hook</em>普通的textout了,rn但是<em>hook</em> socket中send和recv就是不行,好像传的数据都不对.rn谁可以给个解答啊.?
《核心编程》的api hook 的问题
rn1。为什么要在 P557 的 lastmsgboxinfo_<em>hook</em>allapps 函数里挂钩WH_GETMESSAGE 消息呢,但是GetMsgProc 却什么都不作rn2。为什么在它之后运行的notepad 也会被插入这个dll文件呢,从程序上我却看不出哪有这个功能rnrn希望各位高手能告诉我,能详细讲一下它的实现,谢谢!!!
全局API HOOK 的问题
http://community.csdn.net/Expert/topic/5189/5189942.xml?temp=.5730402rn贴rn帮忙的人很多,非常感谢大家。分少不够,大家分了。rn问题没解决,我再开贴rn另外Hook全局的例子我有一个,不过时灵时不灵的,不可信,至于大家说的注入,我不明白如果所有进程全部注入了,对系统会有影 响 ,就失去了 <em>hook</em>API的意义。我直接用消息钩子就完事了。我用的方法是修改内存中的API函数地址方法。rn理解有限,看是否有高手指点一二。
API HOOK的致命疑问!
我在做API HOOK时碰到一个问题:rn但一个PE进程中IAT中没有包含我需要HOOK的API时rnAPI HOOK是必然失败的,这就导致一个API HOOK的漏洞。rn我打算“动态向IAT中添加一项”,该如何处理?谢谢!
hook api lineto
各位大虾,我的一个MFC程序调用了pdC->Lineto,然后我改写了这个程序输入节里的rnMFC42D.dll里的lineto地址,可是测试的时候却发现并没有HOOK到,请教这是为什么
APIHook例子 hook api
这是一个Hook WinSocket的例子,只在原理性述如何Hook API。 直接注入就可以使用了 sdddddddddddddddd
Global Api Hook
本Demo版只Hook了WinSock中的幾個關鍵Api(WSASocket,WSASend,WSARecv,Socket,Send,Recv),這是全局Hook,是通過修改Dll中ExPort Function的入口代碼來實現的,不論Dll是否是Kernel System,都能Hook在Hook完后,將把通過WinSocket的數據記錄到D:TempHookLog.txt文件中(在使用時請在D:下建一個Temp目錄!)覺得有意義的可以與我連系,我還有很多這樣的Source Code(Xp Menu,Global Api Hook,Win32 PE Mark(給Win32 PE 文件加一個PassWord)...,這些全是我在平時練筆時寫下的!!!)cgh93829@21cn.comcgh93829@163.com
Hook API 介绍
Hook API 介绍Hook API 介绍Hook API 介绍Hook API 介绍Hook API 介绍Hook API 介绍
hook api 应用层
可<em>hook</em> 任意<em>api</em> 的类,而且可以随意<em>hook</em> <em>api</em> 函数的位置;十分好用
易语言api HOOK
易语言<em>api</em> HOOK
(API HOOK)进程保护工具
运行本软件之后,选择启用保护 (本软件适用于32位系统) 功能: (进程保护) 1、在任务栏里面终止进程是无效的。 (注意:窗口的正常关闭仍然是可以的, 也可以适用命令参数 taskkill 来终止 程序的进程。) 2、防止一些外挂程序对进程的注入控制 3、防止OD,CE以及其他一些调试器对进程 的读取(不是全部噢,暂时我没发现而已) (系统保护) 1、禁止使用CMD 2、禁止使用regedit 3、禁止使用.reg文件 程序运行后点击隐藏,本软件将自动隐藏起来。 隐藏后按F12即可呼出窗口。 PS:本软件采用了API拦截的技术,所以杀毒软件 可能会误报病毒,请放心使用。 软件还在改进中。。。 作者:GhostHand 本人QQ:544980123 希望加我QQ一起交流技术
Hook API 工具 + 源代码
用来将自定义的 Dll 注入进程空间,并钩住指定 API 函数
API HOOK测试实例
API HOOK测试实例,vc++6.0实现,开始HOOK后 可以打开记事本查找弹出对话框作测试,本实例使用HOOk拦截 MessageBox()函数,windows 核心<em>api</em>编程
HOOK API入门问题
大家好 请问下 我现在要HOOK 一个指点的程序 我要获取他发送的数据包信息 来分析 , 他们都说HOOK API 可以 请问有这方面的测试程序吗 或则文档 谢谢 注意 我只是HOOK 指定的 程序哦
Delphi API Hook的问题
[code=Delphi(Pascal)]rn一个修改IAT实现API挂钩的程序,rnlibrary Hook;rnrnusesrn Windows,rn w_Hook in 'w_Hook.pas';rnrn$R *.resrnrnfunction DllEntry(dwReason:LONGINT):DWORD;STDCALL;rnbeginrn case dwReason ofrn DLL_PROCESS_ATTACH:rn beginrn w_Hook.IntallHook;rn end;rn end;rnrn result := 0;rnend;rnrnbeginrn DllProc := @DllEntry;rn DllEntry(DLL_PROCESS_ATTACH);rnend.rnrn/////////////////////////////////////////////////////////////////////////rnrnrnunit w_Hook;rnrninterfacernusesrn Windows,SysUtils,Classes;rntypern PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;rn IMAGE_IMPORT_DESCRIPTOR = recordrn OriginalFirstThunk : DWORD;rn TimeDateStamp : DWORD;rn ForwarderChain : DWORD;rn Name : DWORD;rn FirstThunk : DWORD;rn end;rnrn PIMAGE_THUNK_DATA = ^IMAGE_THUNK_DATA;rn IMAGE_THUNK_DATA = recordrn Function_ : PDWORD;rn end;rn rnprocedure IntallHook;STDCALL;rnrnimplementationrnrnfunction MyMessageBox(hwnd:CARDINAL;lpmsg:pchar;lpcaption:pchar;nType:UINT):dword;stdcall;rnbeginrn result := MessageBox(hwnd,'HOOK','HOOK',MB_OK);rnend;rnrnprocedure IntallHook;STDCALL;rnvarrn OpHeader : IMAGE_OPTIONAL_HEADER;rn NtHeader : IMAGE_NT_HEADERS;rn dosHeader : IMAGE_DOS_HEADER;rn ImpHeader : PIMAGE_IMPORT_DESCRIPTOR;rn hModule : CARDINAL;rn thunk : PIMAGE_THUNK_DATA;rn mbi : MEMORY_BASIC_INFORMATION;rn Old : DWORD;rn wri : CARDINAL;rn Func : POINTER;rn msg1,msg2 : String;rnbeginrn 模块地址,对应内存rn hModule := GetModuleHandle(NIL);rn MZ文件头rn dosHeader := IMAGE_DOS_HEADER(POINTER(hModule)^);rn NT文件头rn NtHeader := IMAGE_NT_HEADERS(POINTER(dosHeader._lfanew + INTEGER(POINTER(hModule)))^);rn 可选文件头rn OpHeader := NtHeader.OptionalHeader;rn 导入表IMAGE_IMPORT_HEADERrn ImpHeader := PIMAGE_IMPORT_DESCRIPTOR((hModule) + (OpHeader.DataDirectory[1].VirtualAddress));rnrn while ImpHeader^.Name <> 0 dorn beginrn if StrComp(PChar(UpperCase(String(PCHAR(hModule + ImpHeader^.Name)))), PChar('USER32.DLL')) = 0thenrn beginrn break;rn end;rn Inc(ImpHeader);rn end;rnrn IF ImpHeader^.Name <> 0 THENrn beginrn rn thunk := PIMAGE_THUNK_DATA(hModule+ImpHeader^.FirstThunk);rn rn while thunk^.Function_ <> NIL dorn beginrn if thunk^.Function_ = GetProcAddress(LoadLibrary('USER32.DLL'),'MessageBoxA') thenrn beginrn if VirtualQuery(thunk^.Function_,mbi,sizeof(mbi)) > 0 thenrn beginrn 这个Dll文件加载后没有问题,但是用户程序调用MessageBox函数后并没有被挂钩,反而在rn 执行完MessageBOx函数后程序报错,而我估计程序的问题就在这个DLL文件的这一段,还望rn 高手指点rn VirtualProtect(thunk^.Function_,sizeof(PDWORD),PAGE_EXECUTE,Old);rn WriteProcessMemory(GetCurrentProcess(), thunk^.Function_, @MyMessageBox, sizeof(DWORD), wri);rn VirtualProtect(thunk^.Function_,sizeof(PDWORD),PAGE_READONLY,Old);rn end;rnrn end;rn Inc(thunk);rn end;rn end;rnrnend;rnrnend.rnrnrn[/code]
64位下 hook API 函数
自己写了一个32位下工作的dll, 但是在 64位下 无法注入 能否 在 32位代码 基础上修改一个64位的
HOOK API函数的问题
[code=C/C++] void Hook ( PSTR szModuleName, PSTR szFunName, FARPROC pFun )rn //获取模块句柄rn HMODULE hMod = ::GetModuleHandleA ( szModuleName ) ;rn if ( hMod != NULL )//如果获取成功则执行下面的语句rn rn pNewFunEntry = (LPVOID)pFun ;//返回新的函数地址rn //返回当前没有被HOOK的函数地址rn pOldFunEntry = (LPVOID)GetProcAddress ( hMod, szFunName ) ;rn bNewByte[0] = 0x18 ;rn *((PDWORD)(&(bNewByte[1]))) = (DWORD)pNewFunEntry - (DWORD)pOldFunEntry - 5 ; rnrn DWORD dwProtect, dwWriteByte, dwReadByte ; rn VirtualProtect ( (LPVOID)pOldFunEntry, 5, PAGE_READWRITE, &dwProtect );rn ReadProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bOldByte, 5, &dwReadByte ) ; rn WriteProcessMemory ( GetCurrentProcess(), (LPVOID)pOldFunEntry, bNewByte, 5, &dwWriteByte ) ;rn VirtualProtect ( (LPVOID)pOldFunEntry, 5, dwProtect, NULL ) ;rn rn[/code]rn这段代码里面的*((PDWORD)(&(bNewByte[1])))= (DWORD)pNewFunEntry - (DWORD)pOldFunEntry - 5 ; rnrn这句话是什么意思的呢?我仔细看了其他的地方大概能够懂点儿,但是这地方rnrn用新的函数地址减去当前函数的地址在减去5这个起着什么作用的呢?rn
hook 取分辨率的API
delphi中的screen,js中的screen,c#中的screen 这三个东西是一回事吗?rn如果我想伪装自己的分辨率,让所有程序,网页都无法正确得到我的分辨率,又要怎么样实现,期待提示。
请教HOOK API问题
大家好,小弟本来要实现对进程数据包截获分析,想利用HookAPI拦截send,recv等系统函数,可是试了好久都Hook不成功,实在没办法,只好向各位求助了。rnrn现在用的MessageBoxA做测试。rnrn我的情况是这样的:先写一个单独的HookAPI动态库,在加载动态库的Main函数里,实现对本进程的MessageBoxA系统函数挂钩;然后再利用远程线程注入法,把这个动态库注入到指定的进程空间,此时,就会执行动态库的初始化代码,就是HookAPI代码。我测试过,注入成功,DLL初始化成功,主要问题出在ReplaceIATEntryInOneMod里面,我是从《Windows核心编程》里的示例代码里Copy过来的,为什么会失败呢?下面是动态库的代码:rn[code=C/C++]#include rn#include rnrn#pragma comment(lib, "Dbghelp")rnrntypedef int (WINAPI *PFNMESSAGEBOX)(HWND,LPCSTR,LPCSTR,UINT uType);rn//系统API的MessageBoxA函数地址rnPROC g_pMessageBoxA = (PROC)GetProcAddress(LoadLibrary("user32.dll"), "MessageBoxA");rnrnint WINAPI MyMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)rn rn return ((PFNMESSAGEBOX)g_pMessageBoxA)(hWnd, "测试HookAPI!", "test", uType);rnrnrn//给系统函数挂钩,替换成自己的函数rnBOOL ReplaceIATEntryInOneMod(PCSTR pszCalleeModName, rn PROC pfnCurrent, PROC pfnNew, HMODULE hModCaller)rnrn ULONG ulSize;rn IMAGE_IMPORT_DESCRIPTOR* pImportDesc = (IMAGE_IMPORT_DESCRIPTOR*)ImageDirectoryEntryToData(hModCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);rn if(pImportDesc == NULL)rn rn return FALSE;rn rn for(; pImportDesc->Name; pImportDesc++)rn rn PSTR pszModName = (PSTR)((PBYTE)hModCaller + pImportDesc->Name);rn if(lstrcmpiA(pszModName, pszCalleeModName)==0)rn rn //get the caller's import address table(IAT) for the callee's functionsrn PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)rn ((PBYTE)hModCaller + pImportDesc->FirstThunk);rnrn //replace current function address with new function addressrn for(; pThunk->u1.Function; pThunk++)rn rn // get the address of the function addressrn PROC* ppfn = (PROC*) &pThunk->u1.Function;rnrn // is this the function we are looking for?rn BOOL bFound = (*ppfn == pfnCurrent);rn if(bFound)rn rn if(!WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL)rn && (ERROR_SUCCESS == GetLastError()))rn rn DWORD dwOldProtect;rn if(VirtualProtect(ppfn, sizeof(pfnNew), PAGE_WRITECOPY, &dwOldProtect))rn rn WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL);rn VirtualProtect(ppfn, sizeof(pfnNew), dwOldProtect, &dwOldProtect);rn return TRUE;rn rn rn rn rn rn rn return FALSE;rnrnBOOL SetHook(HMODULE hMod)rnrn PROC pfnNew = (PROC)MyMessageBoxA;rn return ReplaceIATEntryInOneMod("user32.dll", g_pMessageBoxA, pfnNew, hMod);rnrnBOOL StopHook(HMODULE hMod)rnrn PROC pfnNew = (PROC)MyMessageBoxA;rn return ReplaceIATEntryInOneMod("user32.dll", pfnNew, g_pMessageBoxA, hMod);rnrnBOOLEAN WINAPI DllMain(IN HINSTANCE hDllHandle, rn IN DWORD nReason, rn IN LPVOID Reserved)rnrn BOOLEAN bSuccess = TRUE;rn // Perform global initialization.rn switch ( nReason )rn rn case DLL_PROCESS_ATTACH:rn //挂钩函数rn if(!SetHook(GetModuleHandle(NULL)))rn rn MessageBox(NULL, "挂钩失败", "", MB_OK);rn rn elsern rn MessageBox(NULL, "挂钩成功", "", MB_OK);rn rn break;rn case DLL_PROCESS_DETACH:rn //解除函数挂钩rn StopHook(GetModuleHandle(NULL));rn MessageBox(NULL, "退出", "", MB_OK);rn break;rn rn return TRUE;rnrn[/code]rnrn下面是注入动态库的代码:rn[code=C/C++]#include rn#include rn#include rnrnvoid LoadModule(DWORD dwPID, LPCTSTR lpszModuleName)rnrn HANDLE hprocess = OpenProcess(PROCESS_CREATE_THREADrn |PROCESS_VM_OPERATIONrn |PROCESS_VM_WRITE,FALSE,dwPID);rn if(!hprocess)rn rn CloseHandle(hprocess);rn return ;rn rn //计算dll路径名需要的空间rn int cb = 1 + strlen(lpszModuleName);rn //使用VirtualAllocEx函数在远程进程的内存地址空间分配dll文件缓冲区rn PSTR pszLibFileRemote = (PSTR)VirtualAllocEx(hprocess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);rn //使用WriteProcessMemory函数将dll的路径名复制到远程进程的内存空间rn BOOL iReturnCode = WriteProcessMemory(hprocess,rn pszLibFileRemote,rn (PVOID)lpszModuleName,rn cb,rn NULL);rn if(iReturnCode)rn rn //计算LoadLibrary的入口地址rn PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"),rn "LoadLibraryA");rn //启动远程线程LoadLibrary,通过远程线程调用用户的dll文件rn HANDLE hRemoteThread = CreateRemoteThread(hprocess,NULL,rn 0,rn pfnStartAddr,rn pszLibFileRemote,rn 0,rn NULL);rn if(hRemoteThread)rn CloseHandle(hRemoteThread);rn rn CloseHandle(hprocess);rnrnint main()rnrn LoadModule(1488, "E:\\项目\\数据包分析\\NetEye\\debug\\<em>api</em><em>hook</em>.dll");rn return 0;rn[/code]
API Hook基本原理和实现
API Hook基本原理和实现。。。。
HOOK API Release下问题
#include rn#include rn#include rnusing namespace std;rnIMAGE_IMPORT_DESCRIPTOR* GetImportDesc(HMODULE);rntypedef int (_stdcall *PFNMESSAGEBOX)(HWND,LPCTSTR,LPCTSTR,UINT);rnPROC g_orgProc=(PROC)MessageBoxA;rnint _stdcall MyMessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType )rnrn return ((PFNMESSAGEBOX)g_orgProc)(hWnd,"LHook",lpCaption,uType);rnrnbool SetHook(HMODULE hMod);rnvoid main()rnrn ::MessageBox(NULL,"PreHook","IAT",MB_OK);rn HMODULE hMod=::GetModuleHandle(NULL);rn if(SetHook(hMod)rn ::MessageBox(NULL,"PreHook","IAT",MB_OK);rnrnrnrnrnIMAGE_IMPORT_DESCRIPTOR* GetImportDesc(HMODULE hMod)rnrn IMAGE_DOS_HEADER* pDosHeader=(IMAGE_DOS_HEADER*)hMod;rn IMAGE_NT_HEADERS* pNtHeader=(IMAGE_NT_HEADERS*)((BYTE*)hMod+pDosHeader->e_lfanew);rn IMAGE_OPTIONAL_HEADER* pOptHeader=(IMAGE_OPTIONAL_HEADER*)((BYTE*)hMod+pDosHeader->e_lfanew+24);rn IMAGE_IMPORT_DESCRIPTOR* pImportDesc=(IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)hMod+pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);rn return pImportDesc;rn rnrnrnbool SetHook(HMODULE hMod)rnrn IMAGE_IMPORT_DESCRIPTOR* pImportDesc=GetImportDesc(hMod);rn while(pImportDesc->FirstThunk)rn rn char* pszName=(char*)((BYTE*)hMod+pImportDesc->Name);rn if(lstrcmpiA(pszName,"User32.dll")==0)rn break;rn pImportDesc++;rn rn if(pImportDesc->FirstThunk)rn rn IMAGE_THUNK_DATA* pThunk=(IMAGE_THUNK_DATA*)((BYTE*)hMod+pImportDesc->FirstThunk);rn while(pThunk->u1.Function)rn rn DWORD* lpAddr=(DWORD*)&(pThunk->u1.Function);rn if(*lpAddr==(DWORD)g_orgProc)rn rn DWORD* lpNewProc=(DWORD*)MyMessageBox;rn MEMORY_BASIC_INFORMATION mbi;rn DWORD dwOld;rn memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION)); rn ::VirtualQuery(lpAddr,&mbi,sizeof(mbi));rn ::VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOld);rn ::WriteProcessMemory(::GetCurrentProcess(),rn lpAddr,&lpNewProc,sizeof(DWORD),NULL); rn ::VirtualProtect(lpAddr,sizeof(DWORD),dwOld,0);rn return true;rn rn rn rn return false;rnrnrnrnrnDEBUG运行是可以看到MessageBoxA已经被HOOK了,但在Release下可以运行并且SetHook也是返回true,但结果是MessageBoxA没被HOOK掉,rn这里已经调用了rn::VirtualQuery(lpAddr,&mbi,sizeof(mbi));rn ::VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOld);rn ::WriteProcessMemory(::GetCurrentProcess(),rn lpAddr,&lpNewProc,sizeof(DWORD),NULL); rn ::VirtualProtect(lpAddr,sizeof(DWORD),dwOld,0);rn改变内存属性了,为什么啊,怎么解决???
一个API HOOK函数
以下是一个在网上找的一个API HOOK函数,大侠们能帮我看看函数的参数是什么吗?rnrn// HookAPI.cpprnrn// -----------------------------rn// HOOKAPI - Matt Pietrek 1995rn// -----------------------------rnrn#include rn#include "HookAPI.h"rnrn// Macro for adding pointers/DWORDs together without C arithmetic interferingrnrn#define MakePtr(cast, ptr, addValue) (cast)((DWORD)(ptr)+(DWORD)(addValue))rnrnPROC HookAPIFunction(HMODULE hFromModule,rnPSTR pszFunctionModule,rnPSTR pszFunctionName,rnPROC pfnNewProc)rnrnPROC pfnOriginalProc;rnPIMAGE_DOS_HEADER pDosHeader;rnPIMAGE_NT_HEADERS pNTHeader;rnPIMAGE_IMPORT_DESCRIPTOR pImportDesc;rnPIMAGE_THUNK_DATA pThunk;rnrnDWORD dwProtectionFlags;rnDWORD dwScratch;rnrn// Verify that a valid pfn was passedrnif (IsBadCodePtr(pfnNewProc)) return 0; rn// First, verify the the module and function names passed to use are validrnpfnOriginalProc = GetProcAddress(GetModuleHandle(pszFunctionModule), pszFunctionName);rnif (!pfnOriginalProc) return 0;rnpDosHeader = (PIMAGE_DOS_HEADER)hFromModule;rn// Tests to make sure we're looking at a module image (the 'MZ' header)rnif (IsBadReadPtr(pDosHeader, sizeof(IMAGE_DOS_HEADER))) return 0;rnif (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) return 0;rn// The MZ header has a pointer to the PE headerrnpNTHeader = MakePtr(PIMAGE_NT_HEADERS, pDosHeader, pDosHeader->e_lfanew);rn// More tests to make sure we're looking at a "PE" imagernif (IsBadReadPtr(pNTHeader, sizeof(IMAGE_NT_HEADERS))) return 0;rnif (pNTHeader->Signature != IMAGE_NT_SIGNATURE) return 0;rn// We know have a valid pointer to the module's PE header.rn// Now go get a pointer to its imports sectionrnpImportDesc = MakePtr(PIMAGE_IMPORT_DESCRIPTOR, pDosHeader,rnpNTHeader->OptionalHeader.rnDataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].rnVirtualAddress);rn// Bail out if the RVA of the imports section is 0 (it doesn't exist)rnif (pImportDesc == (PIMAGE_IMPORT_DESCRIPTOR)pNTHeader) return 0;rn// Iterate through the array of imported module descriptors, lookingrn// for the module whose name matches the pszFunctionModule parameterrnwhile (pImportDesc->Name)rnrnPSTR pszModName = MakePtr(PSTR, pDosHeader, pImportDesc->Name); rnif (stricmp(pszModName, pszFunctionModule) == 0) break;rn// Advance to next imported module descriptorrnpImportDesc++;rnrn// Bail out if we didn't find the import module descriptor for thern// specified module. pImportDesc->Name will be non-zero if we found it.rnif (pImportDesc->Name == 0) return 0;rn// Get a pointer to the found module's import address table (IAT)rnpThunk = MakePtr(PIMAGE_THUNK_DATA, pDosHeader, pImportDesc->FirstThunk);rn// Blast through the table of import addresses, looking for the onern// that matches the address we got back from GetProcAddress above.rnwhile (pThunk->u1.Function)rnrnif (pThunk->u1.Function == (PDWORD)pfnOriginalProc)rnrndwProtectionFlags = PAGE_READWRITE;rnVirtualProtect(&pThunk->u1.Function, 4096, dwProtectionFlags, &dwScratch);rn// We found it! Overwrite the original address with thern// address of the interception function. Return the originalrn// address to the caller so that they can chain on to it.rnpThunk->u1.Function = (PDWORD)pfnNewProc;rnreturn pfnOriginalProc;rn rn// Advance to next imported function addressrnpThunk++;rn rn// Function not foundrnreturn 0;rnrn
API HOOK的问题
我<em>hook</em> API有的钩不到啊rn这是一部分代码:rnrn自定义声明:rnBOOL WINAPI MyTerminateProcess(HANDLE hProcess,UINT uExitCode)rnrn MessageBox(NULL,"钩掉了","API HOOK",0);rn return 0;rnrnrnrnBOOL WINAPI MyOpenClipboard(HWND hWndNewOwner)rnrn MessageBox(NULL,"not allowed","警告",MB_OK);rn return 0;rnrnrn替换:rn OldProc1=GetProcAddress(GetModuleHandle("kernel32.dll"), "TerminateProcess");rn OldProc2=GetProcAddress(GetModuleHandle("user32.dll"), "OpenClipboard");rn //定位,修改IAT表rn ApiHook("kernel32.dll",OldProc1,(PROC)&MyTerminateProcess);rn ApiHook("user32.dll",OldProc2,(PROC)&MyOpenClipboard);rnrnrn我在MFC程序里调用这两个函数,TerminateProcess可以钩到,但是OpenClipboard钩不到,MessageBoxA和MessageBoxW也钩不到。rnrn还有:rn如果我想拦截打印,应该钩哪个函数呢?谢谢
hook api writefile的问题
一个文件权限的项目,需要防止某些文件的保存操作,准备采用<em>hook</em> win<em>api</em> Writefile的方法,利用detoursrnrnBOOL _stdcall Replace_WriteFile(//替换系统的Writefilern HANDLE hFile, // handle to file to write torn LPCVOID lpBuffer, // pointer to data to write to filern DWORD nNumberOfBytesToWrite, // number of bytes to writern LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes writtenrn LPOVERLAPPED lpOverlapped // pointer to structure for overlapped I/Orn)rnrn rn BOOL res = NULL; //操作成功完成返回非零值rn __try rn rn rn MessageBox( NULL, "您没有修改权限", "拦截成功!", MB_OK );rn rn rn __finally rn rn ;rn return res;rnrnrnrn但是有几个问题rn1. word下就算使用类似findwindow的方法得到某个文件的窗口线程,如果同时又多个word打开,钩子还是会钩住所有的文件保存信息rn2. word中的保存信息不像txt文件,往往点击了保存以后虽然能够拦截该保存消息,但是却造成messagebox弹出多次,可能是word中多次调用writefile操作,对此不是太了解rnrn有没有有经验的兄弟能指点小弟一下啊,或者有什么更好的方法?
hook api 编译出错 求助
我想<em>hook</em>一个存在与dll中的函数 函数的导出类型为(ida):rn.text:10001630 ; void __cdecl ZNet2::DWordDecode(unsigned char *, int, __int64 &)rn.text:10001630 public ?DWordDecode@ZNet2@@YAXPAEHAA_J@Zrnrn我在VC中 声明 :rnclass ZNet2rnrn public:rn void __cdecl ZNet2::DWordDecode(unsigned char *, int, __int64 &);rn ZNet2();rn virtual ~ZNet2();rn;rn调用:rnrn编译时提示:rnunresolved external symbol "public: void __cdecl ZNet2::DWordDecode(unsigned char *,int,__int64 &)" ()rnrn发现编译的类型与导出的类型不同rn ?DWordDecode@ZNet2@@YAXPAEHAA_J@Zrn ?DWordDecode@ZNet2@@QAAXPAEHAA_J@Zrnrn查看相关资料__cdecl调用约定: rn1、以“?”标识函数名的开始,后跟函数名; rn2、函数名后面以“@@YA”标识参数表的开始,后跟参数表; rn3、参数表以代号表示: rnX--void , rnD--char, rnE--unsigned char, rnF--short, rnH--int, rnI--unsigned int, rnJ--long, rnK--unsigned long, rnM--float, rnN--double, rn_N--bool, rnPA--表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复; rn4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前; rn5、参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束rnrn不知道在vc中怎样修改才可以通过 ?希望各位大侠指点一二,不胜感激
API Hook出错啊!
rn#if !defined(AFX_APIHOOK32_FILE__H) rn#define AFX_APIHOOK32_FILE__Hrnrn#if _MSC_VER > 1000rn#pragma oncern#endifrnrn#include "StdAfx.h"rn#include rn#include rn#include rn#pragma comment(lib, "Dbghelp.lib") rnrnconst BYTE cPushOpCode = 0x68; // The PUSH opcode on x86 platformsrn//////////////////////////////////////////////////////////////////////////rntypedef struct _APIHOOK32_ENTRYrnrn LPCTSTR lpszAPIName;rn LPCTSTR lpszCalleeModName;rn PROC pfnOriginAPIAddress;rn PROC pfnnNewAPIAddress;rn HMODULE hCallerMod;rnAPIHOOK32_ENTRY, *LPAPIHOOK32_ENTRY;rnrnBOOL WINAPI ReplaceIATEntryInOneMod(LPAPIHOOK32_ENTRY pHk);rnBOOL WINAPI ReplaceIATEntryInAllMods(LPAPIHOOK32_ENTRY pHk, BOOL fExcludeAPIHookMod);rnrn#endifrnrnBOOL WINAPI ReplaceIATEntryInOneMod(LPAPIHOOK32_ENTRY pHk)rnrn ULONG ulSize;rn PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(pHk->hCallerMod, TRUE, rn IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);rnrn SYSTEM_INFO si;rn GetSystemInfo(&si);rn PVOID sm_pvMaxAppAddr = si.lpMaximumApplicationAddress;rnrn if (NULL==pImportDesc)rn rn return FALSE; //没有导出段rn rn rn for (; pImportDesc->Name; pImportDesc++)rn rn PSTR pszDllName = (PSTR)((PBYTE)pHk->hCallerMod+pImportDesc->Name);rnrn if (0 == lstrcmpiA(pszDllName, pHk->lpszCalleeModName))rn rn break;rn rn rn rn if (0 == pImportDesc->Name)rn rn return FALSE; //该被调用模块没有任何导出函数rn rnrn rn PIMAGE_THUNK_DATA PThunk = (PIMAGE_THUNK_DATA)((PBYTE)pHk->hCallerMod+pImportDesc->FirstThunk);rn rn for (; PThunk->u1.Function; PThunk++)rn rn PROC *ppfn = (PROC*)&PThunk->u1.Function; //获得函数地址rn BOOL fFound = (*ppfn == pHk->pfnOriginAPIAddress);rnrn if (!fFound && (*ppfn>sm_pvMaxAppAddr))rn rn PBYTE pbInFunc = (PBYTE)**ppfn;rnrn if (pbInFunc[0] == cPushOpCode)rn rn ppfn = (PROC*)&pbInFunc[1];rn fFound = (*ppfn == pHk->pfnOriginAPIAddress);rn rn rn rn if (fFound)rn rn DWORD dwOldProtect; rn MEMORY_BASIC_INFORMATION mbi; rn VirtualQuery(ppfn, &mbi, sizeof(mbi)); rn VirtualProtect(ppfn, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect); rn WriteProcessMemory(GetCurrentProcess(), ppfn, &(pHk->pfnnNewAPIAddress), sizeof(pHk->pfnnNewAPIAddress), NULL);rn VirtualProtect(ppfn, sizeof(DWORD), dwOldProtect, 0); rn return TRUE;rn rn rnrn return FALSE;rnrnrnBOOL WINAPI ReplaceIATEntryInAllMods(LPAPIHOOK32_ENTRY pHk, BOOL fExcludeAPIHookMod)rn rn MEMORY_BASIC_INFORMATION mbi;rn HMODULE hmodThisMod = fExcludeAPIHookMod?((0!=VirtualQuery((LPCVOID)ReplaceIATEntryInAllMods, &mbi, sizeof(mbi)))?(HMODULE)mbi.AllocationBase:NULL):NULL;rn HANDLE hSnapshot = INVALID_HANDLE_VALUE;rn hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());rnrn if (INVALID_HANDLE_VALUE==hSnapshot)rn rn return FALSE;rn rnrn MODULEENTRY32 me = sizeof(me);rn rn for (BOOL fOk = Module32First(hSnapshot, &me); fOk; fOk = Module32Next(hSnapshot, &me))rn rn if (me.hModule != hmodThisMod)rn rn pHk->hCallerMod = me.hModule; rn ReplaceIATEntryInOneMod(pHk);rn rn rnrn return TRUE;rnrn
急救!!! API HOOK问题~~!!!
小弟想写个API HOOK,目的是截获ws2_32.dll里的connect函数,可是系统加载了这个全局DLL之后,IE之类的调用了connect的应用程序,一起动就退出了,而且,我截获到的connect里的const struct sockaddr FAR* name,参数,记录到文件里的似乎也不对,不知道怎么回事,望指教rnrnrn#include rn#include rn#include rnrnHHOOK hHook=NULL;rnHINSTANCE glbThisDLL = NULL;rnLRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam);rnrnHHOOK g_hHook;rnHINSTANCE g_hinstDll;rnFARPROC pfMessageBoxA;rnint WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);rnBYTE OldMessageBoxACode[5],NewMessageBoxACode[5];rnHMODULE hModule ;rnDWORD dwIdOld,dwIdNew;rnBOOL bHook=false;rnvoid HookOn();rnvoid HookOff();rnBOOL init();rnrnrnint Myconnect (rnrn SOCKET s, rn const struct sockaddr FAR* name,rn int namelen rn ); rnrn//-------------------------------------------------------------------------rnvoid HookOn()rnrn HANDLE hProc;rn dwIdOld=dwIdNew;rn hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);rn VirtualProtectEx(hProc,pfMessageBoxA,5,PAGE_READWRITE,&dwIdOld);rn WriteProcessMemory(hProc,pfMessageBoxA,NewMessageBoxACode,5,0);rn VirtualProtectEx(hProc,pfMessageBoxA,5,dwIdOld,&dwIdOld);rn bHook=true;rnrnvoid HookOff()rnrn HANDLE hProc;rn dwIdOld=dwIdNew;rn hProc=OpenProcess(PROCESS_ALL_ACCESS,0,dwIdOld);rn VirtualProtectEx(hProc,pfMessageBoxA,5,PAGE_READWRITE,&dwIdOld);rn WriteProcessMemory(hProc,pfMessageBoxA,OldMessageBoxACode,5,0);rn VirtualProtectEx(hProc,pfMessageBoxA,5,dwIdOld,&dwIdOld);rn bHook=false;rnrnrn//-------------------------------------------------------------------rnint Myconnect (rn SOCKET s,rn const struct sockaddr FAR* name,rn int namelenrn )rnrn int nReturn=0;rn HookOff();rn nReturn=connect(s,name,namelen);rnrn struct sockaddr_in sa;rn memcpy( &sa , name , sizeof(const struct sockaddr FAR*) );rn FILE *fp=fopen("d:\\connect.txt","ab");rn fprintf(fp,"connect IP addr is:%s\n\r",inet_ntoa(sa.sin_addr));rn fclose(fp);rn nReturn=1;rn HookOn();rn return( nReturn );rnrnrnrnBOOL init()rnrn hModule=LoadLibrary("ws2_32.dll");rn pfMessageBoxA=GetProcAddress(hModule,"connect");rnrn if(pfMessageBoxA==NULL)rn return false;rn _asmrn rn lea edi,OldMessageBoxACodern mov esi,pfMessageBoxArn cldrn movsdrn movsbrn rn NewMessageBoxACode[0]=0xe9;rn _asmrn rn lea eax,Myconnectrn mov ebx,pfMessageBoxArn sub eax,ebxrn sub eax,5rn mov dword ptr [NewMessageBoxACode+1],eaxrn rn dwIdNew=GetCurrentProcessId();rn dwIdOld=dwIdNew;rn HookOn();rn return(true);rnrnrn//-----------------------------------------------------------------------------------------------rnDWORD WINAPI InstallHook(void* Para)rnrnrnHMODULE hThisDLL = glbThisDLL;rnrn hHook=SetWindowsHookEx( WH_MOUSE,rn (HOOKPROC)MouseProc,rn hThisDLL,rn 0rn );rnrnrnrnrnrnrn//-----------------------------------------------------------------------------------------------rnrn//-----------------------------------------------------------------------------------------------rnrnLRESULT CALLBACK MouseProc( int nCode,WPARAM wParam,LPARAM lParam )rnrnrn if(wParam==WM_LBUTTONDBLCLK)//双击鼠标左键rn if(!init())rn rn MessageBoxA(NULL,"Init","ERROR",MB_OK);rn return(false);rn rn return CallNextHookEx(hHook,nCode,wParam,lParam);rnrnrn//------------------------------------------------------------------------------------rnBOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)rnrn switch(fwdreason)rn rn case DLL_PROCESS_ATTACH:rnrn glbThisDLL = hinstDLL;rn CreateThread(NULL,0,&InstallHook,NULL,0,NULL);rnrn break;rn case DLL_PROCESS_DETACH:rn break;rn default:rn break;rn rnrn return(TRUE);rnrn//---------------------------------------------------------------------------
关于API Hook的困惑
现在在做API Hook,很简单,用不到大家用的最多的全局Hook,仅仅是想Hook本程序内的TextOutA/TextOutW而已(但是要求能替换系统提供的信息输出而不仅仅是在程序中自己使用TextOut的输出)。为了代码可重用,我用的COM方式制作的API Hook(IN_PROC_SERVER),不过按道理说这应该跟后面的问题没有关系。rnrn 方案选用的是大家都熟悉了的IAT置换的方法,也就是修改导入表中对应API函数的跳转地址实现对导入函数的替换。但是很快就发现一个问题:居然我的进程中根本就没有引入TextOut函数!后来在自己的APIHook中增加了TRACE输出,才发现原来内存中每一个模块都有自己的IAT导入表,进程实际的TextOut输出是依靠动态链接的MFC库(MFC42D.DLL)里面导入的TextOut实现的。rn OK,既然如此,我就直接遍历整个程序空间内的所有动态链接库,然后替换所有的TextOutA/W函数的IAT数据。可是,又发现不对:rn 1、按道理说系统默认的Button/Edit这些东西的绘制都是依靠TextOut输出的,而我的程序是个对话框程序,上面放满了Button/Edit,却没有一个的TextOut被触发。rn 2、当界面上显示一个Combo的时候,系统调用了TextOutW并且被我的程序截获,跟踪表明程序正确的执行完毕,但是执行完函数以后没执行多少代码就运行到一个call esi的汇编代码,而此时(实际上从进入我替换的API:MyTextOutW的时候开始)esi一直等于0x8D,这样的CALL导致了一个Access Violation,程序异常退出了。为了排除其他的问题,我让我的程序直接调用原函数,如下:rnstatic BOOL TextOutW_H(rn HDC hdc, // handle to device contextrn int nXStart, // x-coordinate of starting positionrn int nYStart, // y-coordinate of starting positionrn LPCWSTR lpString, // pointer to stringrn int cbString // number of characters in stringrn)rnrn typedef BOOL (WINAPI *APIPROC) (HDC, int, int, LPCWSTR, int);rn APIPROC pOldProc = (APIPROC)(APIHook.GetOldProc((PROCNEW)TextOutW_H));rn ASSERT(pOldProc);rnrn return (*pOldProc)(hdc, nXStart, nYStart, lpString, cbString); rnrn也就是说什么事情都不做,直接调用原来的函数,但还是出现同样的问题。rn---------------------rn 然后我直接在我的主程序中调用TextOutA/W整个系统工作非常正常,所有的替换的函数都工作得很好。rn 现在请问,这是为什么呢?为什么会出现这样的问题?
api hook的问题
DLLData^.Hook := SetWindowsHookEx(WH_GETMESSAGE,@HookProc, Hinstance, ThreadID);rnrn将dll注入到进程A中后,通过钩子函数修改了A中某些<em>api</em>,rnrnprocedure HookProc(nCode, wParam, lParam:rnLongWORD);stdcall;rnbeginrnif not DLLData^.Hooked thenrnbeginrnHookAPI;rnDLLData^.Hooked := True;rnend;rnCallNextHookEx(DLLData^.Hook, nCode, wParam, lParam);rnend;rnrn卸载前希望把修改了的<em>api</em>改回来,但此时我已经无法控制A中注入的dll,rn//主程序中调用该过程rnprocedure UnHook;stdcall;rnbeginrnUnHookAPI;//这里将<em>api</em>改回rnUn<em>hook</em>WindowsHookEx(DLLData^.Hook);rnend;rnrn只能控制本程序调用的dll(根本和A不在一个进程当然没有用)rnrn所以卸载钩子后,因A中的<em>api</em>入口还指向我的dll而运行错误rnrn应该怎么正确的卸载?
api hook的问题!!!!!!!!!!!!!!!!!!
SetWindowsHookEx用的是WH_CALLWNDPROC,系统在向窗体过程发送消息前,将调用WH_CALLWNDPROC;rnrn我们的代码就已经进入了系统内的所有进程空间了。必须注意的是,我们只需要截获我们所关心的目标rnrn程序的调用,因此还必须区分一下进程号。我们自己的钩子函数中,第一次运行将进行最重要的API重rnrn定向的工作。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令,使其跳转到我们的APIrnrn中来。这是最关键的部分。rnrnDWORD dwCurrentPID = 0; rnHHOOK hOldHook = NULL; rnDWORD pSend = 0; rnDWORD pRecv = 0; rnGETMESSAGE pGetMessage = NULL; rnrnBYTE btNewBytes[8] = 0x0B8, 0x0, 0x0, 0x40, 0x0, 0x0FF, 0x0E0, 0 ; rnDWORD dwOldBytes[3][2]; rnrnHANDLE hDebug = INVALID_HANDLE_value; rnrnLRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam ) rn rnDWORD dwSize; rnDWORD dwPIDWatched; rnHMODULE hLib; rnrnif( dwCurrentPID == 0 ) rn rndwCurrentPID = GetCurrentProcessId(); rnHWND hwndMainHook; rnhwndMainHook = ::FindWindow( 0, "MainHook" ); rndwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 ); rnhOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 ); rnrnif( dwCurrentPID == dwPIDWatched ) rn rn //替换函数rn rn rnrnif( hOldHook != NULL ) rn rnreturn CallNextHookEx( hOldHook, nCode, wParam, lParam ); rn rnrnreturn 0; rnrnrndwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 ); rnhOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 ); rn这两句怎么理解啊?rnrndwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 ); 可以理解为MainHook窗口rnrn进程 处理消息WM_USER+100的时候,返回一个MainHook窗口的进程号.rnrn但::SendMessage又会调用CallWndProc不就循环了么?rnrnhOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 ); 是用来干什么的?
推荐API Hook代码
要求:rn1。可运行于WINDOWS NT,WINDOWS 2000下;rn2。确实可正常运行;rn我已经试过不止一种办法了,均告失败.
API Hook总结之五
6.12 WindowSession WindowSession相关的结构图如下, Hook 类 IWindowSessionHook Hook 代理类 IWindowSessionInvokeHandle     Hook 方法实现类 add addToDisplay
系统API的Hook
1,系统API的Hook 首先论述一下系统服务的API的Hook,然后论述四大组件的Hook。因为在android系统中,一切皆服务,在开发过程中,大量 使用的是四大组件。 首先有一个问题,为什么需要Hook系统服务的<em>api</em>? DroidPlugin插件框架管理插件使得插件就像是主程序一样,因此插件需要使用主程序的剪切版,插件之间也会共用剪切版; 其他的一些系统服务也类似,这样就可以达到
问个hook api的问题
#include rn#include rn#include rn#include "<em>api</em>.h"rnHHOOK old;int WINAPI MessageMy(rn HWND hWnd, // handle of owner windowrn LPCTSTR lpText, // address of text in message boxrn LPCTSTR lpCaption, // address of title of message boxrn UINT uType // style of message boxrn);rnvoid FindApi(HMODULE h);rnvoid SetHook();rntypedef int (WINAPI *fnnew)(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption, UINT uType);rnrnrnint WINAPI MessageMy(rn HWND hWnd, // handle of owner windowrn LPCTSTR lpText, // address of text in message boxrn LPCTSTR lpCaption, // address of title of message boxrn UINT uType // style of message boxrn)rnrncoutName);rnif(lstrcmpiA(name,name1)==0)rn break;rn rn if(import->Name==0)rn return;rn PIMAGE_THUNK_DATA pThunk=(PIMAGE_THUNK_DATA) ((PBYTE)h+import->FirstThunk);rn rn for(;pThunk->u1.Function;pThunk++)rn rn PROC *p1=(PROC*) &pThunk->u1.Function;rn BOOL found=(*p1==p);rn if(found)rn pThunk->u1.Function=(PDWORD)fn;rnrn rnrnrnHMODULE x;rnLRESULT CALLBACK GetMsgProc(rn int code, // <em>hook</em> codern WPARAM wParam, // removal flagrn LPARAM lParam // address of structure with messagern)rnrn x=GetModuleHandle("msg.exe");rn if(x!=NULL)rn FindApi(x);rnrn return CallNextHookEx(old,code,wParam,lParam);rnrnvoid SetHook()rnrn rnold=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle("<em>api</em>.dll"),0);//对所有进程安装钩子!rn}rnrnmsg文件代码是rnrn#include rnint WINAPI WinMain(rn HINSTANCE hInstance, // handle to current instancern HINSTANCE hPrevInstance, // handle to previous instancern LPSTR lpCmdLine, // pointer to command linern int nCmdShow // show state of windowrn)rnrn MessageBox(NULL,"外挂","努力学习",0);rnrn但是<em>hook</em>以后对msg调用应该输出123但是没有输出!rn还请高手指教rn
Hook API的问题
在Hook API中如何将获得的数据传到我的应用程序中rn有高手能解释一下这个DLL库影射机理吗
hook api 问题
通常来说,<em>hook</em>某个已知进程里的<em>api</em>好象不是太难,但我要<em>hook</em>整个系统里所有进程的<em>api</em>就不知道怎样搞了,例如我要<em>hook</em>所有进程里的MessageBoxA,难道把我的dll注入所有进程??但是如果有新的进程呢?
一个API HOOK的问题~
#include rn#include rn#pragma comment(lib,"Dbghelp")rnrnHHOOK g_<em>hook</em>;rnHINSTANCE his;rnrnint WINAPI mysend(SOCKET s, const char FAR *buf, int len, int flags);rnvoid ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller);rnLRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam);rnrnBOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)rnrn switch(fdwReason)rn rn case DLL_PROCESS_ATTACH:rn his = hinstDLL;rn break;rn case DLL_PROCESS_DETACH:rn break;rn rnrn return TRUE;rnrnrnvoid SetAPIHook()rnrn HWND hwnd = FindWindow("IEFrame",NULL);rn g_<em>hook</em> = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,his,GetWindowThreadProcessId(hwnd,NULL));rnrnrnLRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam)rnrn CreateMutex( NULL, FALSE, "asdsad" );// 添加互斥量rn if(GetLastError()==ERROR_ALREADY_EXISTS)rn rn return CallNextHookEx(g_<em>hook</em>,code,wParam,lParam);rn rn MessageBox(NULL,"","",0);rnrnrn ReplaceIATEntryInOneMod("ws2_32.dll",GetProcAddress(GetModuleHandle("ws2_32"),"send"),(PROC)&mysend,his);rnrn return CallNextHookEx(g_<em>hook</em>,code,wParam,lParam);rnrnrnint WINAPI mysend(SOCKET s,const char* buf,int len,int flags)rnrn char temp[10000];rn wsprintf(temp,"SOCKET:%d\r\nSendBuf:%s\r\nLen:%d",s,buf,len);rn MessageBox(NULL,temp,"",0);rnrn return 0;rnrnrnvoid ReplaceIATEntryInOneMod(PCSTR pszCalleeModName,PROC pfnCurrent, PROC pfnNew, HMODULE hmodCaller) rnrn ULONG ulSize;rn PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)rn ImageDirectoryEntryToData(hmodCaller, TRUE,rn IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);rnrn if(pImportDesc == NULL)rn return; // This module has no import section.rnrn //Find the import descriptor containing referencesrn //to callee's functions.rn for(; pImportDesc->Name; pImportDesc++)rn rn PSTR pszModName = (PSTR)rn ((PBYTE) hmodCaller + pImportDesc->Name);rn if(lstrcmpiA(pszModName, pszCalleeModName) == 0)rn break;rn rnrn if(pImportDesc->Name == 0)rn // This module doesn't import any functions from this callee.rn return;rnrn //Get caller's import address table (IAT)rn //for the callee's functions.rn PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)rn ((PBYTE) hmodCaller + pImportDesc->FirstThunk);rnrn //Replace current function address with new function address.rn for(; pThunk->u1.Function; pThunk++) rn rnrn // Get the address of the function address.rn PROC* ppfn = (PROC*) &pThunk->u1.Function;rnrn // Is this the function we're looking for?rn BOOL fFound = (*ppfn == pfnCurrent);rnrn // See the sample code for some tricky Windows 98rn // stuff that goes here.rnrn if(fFound)rn rn //The addresses match; change the import section address.rn WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew,rn sizeof(pfnNew), NULL);rn return; // We did it; get out.rn rn rnrn //If we get to here, the functionrn //is not in the caller's import section.rnrnrnrn我想要截获send消息,但是一直出现问题,请各位帮忙修改一下代码~rnrn谢谢~
Android API Hook之LD_PRELOAD
安卓挂钩子 <em>hook</em>技术 详细讲解了如何挂钩android <em>api</em>
delphi api hook
delphi <em>api</em> <em>hook</em> delphi <em>api</em> <em>hook</em> delphi <em>api</em> <em>hook</em> delphi <em>api</em> <em>hook</em> delphi <em>api</em> <em>hook</em>
HOOK API MessageBox
我们都知道,在调用函数的时候,会先Call 0xFFFFFF,来到函数映射在内存的地址空间里,这时候,传入的参数已入栈,那么,我们只需要修改函数头部,跳转到我们自定义的过程,这样,我们就达到了对API函数监视的目的。那么,我们需要多大的空间来写入代码让其跳转到我们自定义的过程里呢? 聪明的你肯定已经想到了。没错,只需5字节即可。
Linux API Hook
Linux HOOKAPI方面的资料甚少,新人很难走进Linux<em>hook</em>的大门,本文全面讲解Linux<em>hook</em><em>api</em>的全部实现过程,包括分析过程,涉及inject,相关技术也可以用在Android上。
拦截api hook
汇编语言,拦截 API 函数,几乎能拦截 windows xp 任何函数。
win7 IPX协议安装器下载
win7下没有自带ipx协议,需要红警联机的话可以自行安装 相关下载链接:[url=//download.csdn.net/download/zhaodongff/3034019?utm_source=bbsseo]//download.csdn.net/download/zhaodongff/3034019?utm_source=bbsseo[/url]
解决乱码问题下载
编码解码的java方法,以及javaScript方法。 相关下载链接:[url=//download.csdn.net/download/zhangyabin_520/6609541?utm_source=bbsseo]//download.csdn.net/download/zhangyabin_520/6609541?utm_source=bbsseo[/url]
单片机超声波测距下载
超声波测距,汇编的。 相关下载链接:[url=//download.csdn.net/download/mellqw/6881133?utm_source=bbsseo]//download.csdn.net/download/mellqw/6881133?utm_source=bbsseo[/url]
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件
我们是很有底线的