Win2K下的Api函数的拦截

原创 2002年07月16日 14:17:00
Win2K下的Api函数的拦截
简介:
Api拦截并不是一个新的技术,很多商业软件都采用这种技术。对windows的Api函数的拦截,不外乎两种方法,第一种是Mr. Jeffrey Richter 的修改exe文件的模块输入节,种方法,很安全,但很复杂,而且有些exe文件,没有Dll的输入符号的列表,有可能出现拦截不到的情况。第二种方法就是常用的JMP XXX的方法,虽然很古老,却很简单实用。
本文一介绍第二种方法在Win2k下的使用。第二种方法,Win98/me 下因为进入Ring0级的方法很多,有LDT,IDT,Vxd等方法,很容易在内存中动态修改代码,但在Win2k下,这些方法都不能用,写WDM太过复杂,表面上看来很难实现,
其实不然。Win2k为我们提供了一个强大的内存Api操作函数---VirtualProtectEx,WriteProcessMemeory,ReadProcessMemeory,有了它们我们就能在内存中动态修改代码了,其原型为:
BOOL VirtualProtectEx(
HANDLE hProcess, // 要修改内存的进程句柄
LPVOID lpAddress, // 要修改内存的起始地址
DWORD dwSize, // 修改内存的字节
DWORD flNewProtect, // 修改后的内存属性
PDWORD lpflOldProtect // 修改前的内存属性的地址
);
BOOL WriteProcessMemory(
HANDLE hProcess, // 要写进程的句柄
LPVOID lpBaseAddress, // 写内存的起始地址
LPVOID lpBuffer, // 写入数据的地址
DWORD nSize, // 要写的字节数
LPDWORD lpNumberOfBytesWritten // 实际写入的子节数
);
BOOL ReadProcessMemory(
HANDLE hProcess, // 要读进程的句柄
LPCVOID lpBaseAddress, // 读内存的起始地址
LPVOID lpBuffer, // 读入数据的地址
DWORD nSize, // 要读入的字节数
LPDWORD lpNumberOfBytesRead // 实际读入的子节数
);
具体的参数请参看MSDN帮助。在Win2k下因为Dll和所属进程在同一地址空间,这点又和Win9x/me存在所有进程存在共享的地址空间不同,
因此,必须通过钩子函数和远程注入进程的方法,现以一个简单采用钩子函数对MessageBoxA进行拦截例子来说明:
其中Dll文件为:
HHOOK g_hHook;
HINSTANCE g_hinstDll;
FARPROC pfMessageBoxA;
int WINAPI MyMessageBoxA(HWND hWnd, LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
BYTE OldMessageBoxACode[5],NewMessageBoxACode[5];
HMODULE hModule ;
DWORD dwIdOld,dwIdNew;
BOOL bHook=false;
void HookOn();
void HookOff();
BOOL init();
LRESULT WINAPI MousHook(int nCode,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if(!init())
{
MessageBoxA(NULL,"Init","ERROR",MB_OK);
return(false);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
if(bHook) UnintallHook();
break;
}
return TRUE;
}
LRESULT WINAPI Hook(int nCode,WPARAM wParam,LPARAM lParam)//空的钩子函数
{

return(CallNextHookEx(g_hHook,nCode,wParam,lParam));
}
HOOKAPI2_API BOOL InstallHook()//输出安装空的钩子函数
{
g_hinstDll=LoadLibrary("HookApi2.dll");
g_hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)Hook,g_hinstDll,0);
if (!g_hHook)
{
MessageBoxA(NULL,"SET ERROR","ERROR",MB_OK);
return(false);
}


return(true);
}
HOOKAPI2_API BOOL UninstallHook()//输出御在钩子函数
{

return(UnhookWindowsHookEx(g_hHook));
}

BOOL init()//初始化得到MessageBoxA的地址,并生成Jmp XXX(MyMessageBoxA)的跳转指令
{
hModule=LoadLibrary("user32.

Win2K下的Api函数的拦截

Win2K下的Api函数的拦截2007-01-01 17:09 Api拦截并不是一个新的技术,很多商业软件都采用这种技术。对win...
  • sanshao27
  • sanshao27
  • 2007年01月16日 20:41
  • 331

Win2K下的Api函数的拦截

   Api拦截并不是一个新的技术,很多商业软件都采用这种技术。对windows的Api函数的拦截,不外乎两种方法,第一种是Mr. Jeffrey Richter 的修改exe文件的模块输入节,种方法...
  • Mycro
  • Mycro
  • 2005年10月25日 17:46
  • 992

Hook技术之API拦截(API Hook)

Inline Hook就是修改
  • bobopeng
  • bobopeng
  • 2014年06月02日 22:23
  • 6674

Win2k泄漏源代码赏析——GetProcAddress

Win2k泄漏源代码赏析——GetProcAddress
  • wjeson
  • wjeson
  • 2011年02月27日 18:59
  • 1150

揭示Win32 API拦截细节

原文出处:http://www.codeproject.com/system/hooksys.asp 简要介绍 拦截win32 API 调用对于多数windows开发人员来说都一直是很有挑...
  • Steven6977
  • Steven6977
  • 2013年09月03日 13:28
  • 2804

Windows2000下Api函数的拦截分析

Windows2000下Api函数的拦截分析 来源:网络 作者: 查看:[大字体 中字体 小字体] 编辑:napl   简介:   Api拦截并不是一个...
  • diligentcat
  • diligentcat
  • 2011年12月17日 01:52
  • 432

Ubuntu 你拿什么同WIN2K比呢?

Ubuntu 开源LINUX的新秀,注意: 并不是绝对免费的...  Ubuntu 号称在老外128M的内存中跑得那么快,我的800M内存咋就跑得那么卡 ???   从livecd使用时,没有中文输...
  • vb2005xu
  • vb2005xu
  • 2016年08月25日 16:08
  • 100

API拦截技术总结

自接触计算机技术以来,就听到和了解了API Hook的相关知识,但是总是浅尝辄止,深感惭愧。今日痛定思痛,决意走技术流派,努力学习,不求问答于诸侯,但求能养家糊口,聊以自慰。It is never t...
  • zy_strive_2012
  • zy_strive_2012
  • 2017年03月03日 16:57
  • 414

DLL注入和API拦截

1、 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所...
  • woshibendangao
  • woshibendangao
  • 2015年01月19日 10:10
  • 828

拦截指定进程的API(修改+收藏)

截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。 首先,我们必须设法把自己的代码放到目标程序的进程空间里去。Windows Hook 可以帮...
  • Blue_Dream_
  • Blue_Dream_
  • 2008年02月14日 15:46
  • 1499
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Win2K下的Api函数的拦截
举报原因:
原因补充:

(最多只允许输入30个字)