科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道Delphi利用HOOK拦截封包原理

Delphi利用HOOK拦截封包原理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。

来源:安全中国 2008年10月29日

关键字: Delphi HOOK 加密解密

  • 评论
  • 分享微博
  • 分享邮件

  截获API是个很有用的东西,比如你想分析一下别人的程序是怎样工作的。这里我介绍一下一种我自己试验通过的方法。

  首先,我们必须设法把自己的代码放到目标程序的进程空间里去。Windows Hook可以帮我们实现这一点。SetWindowsHookEx的声明如下:

  HHOOK SetWindowsHookEx(

  int idHook, // hook type

  HOOKPROC lpfn, // hook procedure

  HINSTANCE hMod, // handle to application instance

  DWORD dwThreadId // thread identifier

  );

  具体的参数含义可以翻阅msdn,没有msdn可谓寸步难行。

  这里Hook本身的功能并不重要,我们使用它的目的仅仅只是为了能够让Windows把我们的代码植入别的进程里去。hook Type我们任选一种即可,只要保证是目标程序肯定会调用到就行,这里我用的是WH_CALLWNDPROC。lpfn和hMod分别指向我们的钩子代码及其所在的dll,dwThreadId设为0,表示对所有系统内的线程都挂上这样一个hook,这样我们才能把代码放到别的进程里去。

  之后,我们的代码就已经进入了系统内的所有进程空间了。必须注意的是,我们只需要截获我们所关心的目标程序的调用,因此还必须区分一下进程号。我们自己的钩子函数中,第一次运行将进行最重要的API重定向的工作。也就是通过将所需要截获的API的开头几个字节改为一个跳转指令,使其跳转到我们的API中来。这是最关键的部分。这里我想截三个调用,ws2_32.dll中的send和recv、user32.dll中的GetMessageA。

  DWORD dwCurrentPID = 0;

  HHOOK hOldHook = NULL;

  DWORD pSend = 0;

  DWORD pRecv = 0;

  GETMESSAGE pGetMessage = NULL;

  BYTE btNewBytes[8] = { 0x0B8, 0x0, 0x0, 0x40, 0x0, 0x0FF, 0x0E0, 0 };

  DWORD dwOldBytes[3][2];

  HANDLE hDebug = INVALID_HANDLE_&#118alue;

  LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam )

  {

  DWORD dwSize;

  DWORD dwPIDWatched;

  HMODULE hLib;

  if( dwCurrentPID == 0 )

  {

  dwCurrentPID = GetCurrentProcessId();

  HWND hwndMainHook;

  hwndMainHook = ::FindWindow( 0, "MainHook" );

  dwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 );

  hOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 );

  if( dwCurrentPID == dwPIDWatched )

  {

  hLib = LoadLibrary( "ws2_32.dll" );

  pSend = (DWORD)GetProcAddress( hLib, "send" );

  pRecv = (DWORD)GetProcAddress( hLib, "recv" );

  ::ReadProcessMemory( INVALID_HANDLE_&#118alue, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize );

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章