²é¿´: 198  |  »Ø¸´: 2
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

zsglly

ľ³æ (ÖøÃûдÊÖ)

[½»Á÷] APIHOOKʵÀýÆÊÎö

APIHOOKʵÀýÆÊÎö

¹ØÓÚAPIHOOKµÄ»ù´¡ÖªÊ¶Óкܶ࣬ÈçdllµÄÏà¹ØÖªÊ¶¡¢HookµÄÏà¹ØÖªÊ¶¡¢ÏµÍ³½ø³ÌÓëÏß³ÌÖ®¼äµÄÁªÏµµÈ¡£¾ßÌå¿ÉÒÔ¿´ÎÒµÄÁíÁ½ÆªÎÄÕ£º"ÎÒµÄDll(¶¯Ì¬Á´½Ó¿â)ѧϰ±Ê¼Ç" ºÍ "ÎÒµÄHookѧϰ±Ê¼Ç"¡££º£©ÏÂÃæ½øÈëÕâÆªÎÄÕµÄÖØµã£¬¸ù¾ÝAPIHookÔ´Âë½øÐÐAPIHookµÄÆÊÎö¡£
  
Ò»¡¢APIHOOKÖ®dll²¿·Ö
  
////////////////////////////////
APIHook_Dll.cpp

/////////////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "APIHook_Dll.h"

#include
#include

#pragma comment(lib,"ImageHlp" //¶¨ÒåÈ«¾Ö¹²ÏíÊý¾Ý¶Î

#pragma data_seg("Shared"
HMODULE hmodDll=NULL;
HHOOK hHook=NULL;

#pragma data_seg()

#pragma comment(linker,"/Section:Shared,rws" //ÉèÖÃÈ«¾Ö¹²ÏíÊý¾Ý¶ÎµÄÊôÐÔ

///////////////////////////////////// DllMain º¯Êý /////////////////////////////////////////
//dllµÄÈë¿Úµã
BOOL APIENTRY DllMain( HMODULE hModule,  
                       DWORD  ul_reason_for_call,  
                       LPVOID lpReserved
      )
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
  //if(sHook)   
   
case DLL_PROCESS_DETACH:
  UnInstallHook();
  break;
}
hmodDll=hModule;
    return TRUE;
}

///////////////////////////////////// HookOneAPI º¯Êý /////////////////////////////////////////
//½øÐÐIATת»»µÄ¹Ø¼üº¯Êý£¬Æä²ÎÊýº¬Ò壺
//pszCalleeModuleName£ºÐèÒªhookµÄÄ£¿éÃû
//pfnOriginApiAddress£ºÒªÌæ»»µÄ×Ô¼ºAPIº¯ÊýµÄµØÖ·
//pfnDummyFuncAddress£ºÐèÒªhookµÄÄ£¿éÃûµÄµØÖ·
//hModCallerModule£ºÎÒÃÇÒª²éÕÒµÄÄ£¿éÃû³Æ£¬Èç¹ûûÓб»¸³Öµ£¬
//     ½«»á±»¸³ÖµÎªÃ¶¾ÙµÄ³ÌÐòËùÓе÷ÓõÄÄ£¿é

void WINAPI HookOneAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,  
        PROC pfnDummyFuncAddress,HMODULE hModCallerModule)
{
ULONG size;

//»ñȡָÏòPEÎļþÖеÄImportÖÐIMAGE_DIRECTORY_DESCRIPTORÊý×éµÄÖ¸Õë

PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)
  ImageDirectoryEntryToData(hModCallerModule,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&size);

if (pImportDesc == NULL)
  return;

//²éÕҼǼ,¿´¿´ÓÐûÓÐÎÒÃÇÏëÒªµÄDLL

for (;pImportDesc->Name;pImportDesc++)
{
  LPSTR pszDllName = (LPSTR)((PBYTE)hModCallerModule+pImportDesc->Name);
  if (lstrcmpiA(pszDllName,pszCalleeModuleName) == 0)
   break;
}

if (pImportDesc->Name == NULL)
{
  return;
}

//ѰÕÒÎÒÃÇÏëÒªµÄº¯Êý

PIMAGE_THUNK_DATA pThunk =  
  (PIMAGE_THUNK_DATA)((PBYTE)hModCallerModule+pImportDesc->FirstThunk);//IAT
for (;pThunk->u1.Function;pThunk++)
{
  //ppfn¼Ç¼ÁËÓëIAT±íÏîÏàÓ¦µÄº¯ÊýµÄµØÖ·

  PROC * ppfn= (PROC *)&pThunk->u1.Function;   
  if (*ppfn == pfnOriginApiAddress)  
  {
   //Èç¹ûµØÖ·Ïàͬ£¬Ò²¾ÍÊÇÕÒµ½ÁËÎÒÃÇÏëÒªµÄº¯Êý£¬½øÐиÄд£¬½«ÆäÖ¸ÏòÎÒÃÇËù¶¨ÒåµÄº¯Êý

   WriteProcessMemory(GetCurrentProcess(),ppfn,&(pfnDummyFuncAddress),
    sizeof(pfnDummyFuncAddress),NULL);
   return;
  }
}
}

//²éÕÒËù¹Ò¹³µÄ½ø³ÌËùÓ¦ÓõÄdllÄ£¿éµÄ

BOOL WINAPI HookAllAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,
        PROC pfnDummyFuncAddress,HMODULE hModCallerModule)
{
if (pszCalleeModuleName == NULL)
{
  return FALSE;
}
if (pfnOriginApiAddress == NULL)
{
  return FALSE;
}
//Èç¹ûû´«½øÀ´Òª¹Ò¹³µÄÄ£¿éÃû³Æ£¬Ã¶¾Ù±»¹Ò¹³½ø³ÌµÄËùÓÐÒýÓõÄÄ£¿é£¬
//²¢¶ÔÕâЩģ¿é½øÐд«½øÀ´µÄÏàÓ¦º¯ÊýÃû³ÆµÄ²éÕÒ
  
if (hModCallerModule == NULL)
{
  MEMORY_BASIC_INFORMATION mInfo;
  HMODULE hModHookDLL;
  HANDLE hSnapshot;
  MODULEENTRY32 me = {sizeof(MODULEENTRY32)};
  //MODULEENTRY32:ÃèÊöÁËÒ»¸ö±»Ö¸¶¨½ø³ÌËùÓ¦ÓõÄÄ£¿éµÄstruct

  VirtualQuery(HookOneAPI,&mInfo,sizeof(mInfo));
  hModHookDLL=(HMODULE)mInfo.AllocationBase;
   
  hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
  BOOL bOk = Module32First(hSnapshot,&me);
  while (bOk)
  {
   if (me.hModule != hModHookDLL)
   {
    hModCallerModule = me.hModule;//¸³Öµ
    //me.hModule:Ö¸Ïòµ±Ç°±»¹Ò¹³½ø³ÌµÄÿһ¸öÄ£¿é  
    HookOneAPI(pszCalleeModuleName,pfnOriginApiAddress,
     pfnDummyFuncAddress,hModCallerModule);
   }
   bOk = Module32Next(hSnapshot,&me);
  }
  return TRUE;   
}
//Èç¹û´«½øÀ´ÁË£¬½øÐвéÕÒ
else
{
  HookOneAPI(pszCalleeModuleName,pfnOriginApiAddress,
    pfnDummyFuncAddress,hModCallerModule);
  return TRUE;
}
return FALSE;
}

//////////////////////////////////// UnhookAllAPIHooks º¯Êý /////////////////////////////////////
//ͨ¹ýʹpfnDummyFuncAddressÓëpfnOriginApiAddressÏàµÈµÄ·½·¨£¬È¡Ïû¶ÔIATµÄÐÞ¸Ä
BOOL WINAPI UnhookAllAPIHooks(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,
         PROC pfnDummyFuncAddress,HMODULE hModCallerModule)
{
PROC temp;
temp = pfnOriginApiAddress;
pfnOriginApiAddress = pfnDummyFuncAddress;
pfnDummyFuncAddress = temp;
return HookAllAPI(pszCalleeModuleName,pfnOriginApiAddress,
  pfnDummyFuncAddress,hModCallerModule);
}

////////////////////////////////// GetMsgProc º¯Êý ////////////////////////////////////////
//¹³×Ó×ӳ̡£ÓëÆäËü¹³×Ó×ӳ̲»´óÏàͬ£¬Ã»×öʲôÓÐÒâÒåµÄÊÂÇ飬¼ÌÐøµ÷ÓÃÏÂÒ»¸ö¹³×Ó×ӳ̣¬ÐγÉÑ­»·
LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam)
{
return CallNextHookEx(hHook,code,wParam,lParam);
}

//////////////////////////////////// InstallHook º¯Êý /////////////////////////////////////
//°²×°»òÐ¶ÔØ¹³×Ó£¬BOOL IsHook²ÎÊýÊDZê־λ
//¶ÔÒª¹³ÄĸöAPIº¯Êý½øÐгõʼ»¯
//ÎÒÃÇÕâÀï×°µÄ¹³×ÓÀàÐÍÊÇWH_GETMESSAGE
void __declspec(dllexport) WINAPI InstallHook(BOOL IsHook,DWORD dwThreadId)
{
if(IsHook)
{
hHook=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,hmodDll,dwThreadId);
  
//GetProcAddress(GetModuleHandle("GDI32.dll","ExtTextOutA"£ºÈ¡µÃÒª¹³µÄº¯ÊýÔÚËùÔÚdllÖеĵØÖ·
  
HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll",
  "TextOutW",(PROC)&H_TextOutW,NULL);
HookAllAPI("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll",
  "TextOutA",(PROC)&H_TextOutA,NULL);
}
else
{
  UnInstallHook();
  UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll",
   "TextOutW",(PROC)&H_TextOutW,NULL);
  UnhookAllAPIHooks("GDI32.dll",GetProcAddress(GetModuleHandle("GDI32.dll",
   "TextOutA",(PROC)&H_TextOutA,NULL);
}
}

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-27 at 08:16 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

///////////////////////////////////// UnInstallHook º¯Êý ////////////////////////////////////
//Ð¶ÔØ¹³×Ó
BOOL WINAPI UnInstallHook()
{
UnhookWindowsHookEx(hHook);
return TRUE;
}

///////////////////////////////////// H_TextOutA º¯Êý /////////////////////////////////////////
//ÎÒÃǵÄÌæ»»º¯Êý£¬¿ÉÒÔÔÚÀïÃæÊµÏÖÎÒÃÇËùÒª×öµÄ¹¦ÄÜ
//ÕâÀïÎÒ×öµÄÊÇÏÔʾһ¸ö¶Ô»°¿ò£¬Ö¸Ã÷ÊÇÌæ»»ÁËÄĸöº¯Êý
BOOL WINAPI H_TextOutA(HDC hdc,int nXStart,int nYStart,LPCSTR lpString,int cbString)
{
MessageBox(NULL,"TextOutA","APIHook_Dll ---rivershan",MB_OK);
TextOutA(hdc,nXStart,nYStart,lpString,cbString);//·µ»ØÔ­À´µÄº¯Êý£¬ÒÔÏÔʾ×Ö·û
return TRUE;
}

///////////////////////////////////// H_TextOutW º¯Êý /////////////////////////////////////////
//ͬÉÏ
BOOL WINAPI H_TextOutW(HDC hdc,int nXStart,int nYStart,LPCWSTR lpString,int cbString)
{
MessageBox(NULL,"TextOutW","APIHook_Dll ---rivershan",MB_OK);
TextOutW(hdc,nXStart,nYStart,lpString,cbString);//·µ»ØÔ­À´µÄº¯Êý£¬ÒÔÏÔʾ×Ö·û
return TRUE;
}

**********************************************************************************************
**********************************************************************************************

//////////////////////////////// APIHook_Dll.h ////////////////////////////////////////
//                             rivershanдÓÚ2002.9.23                                  //
/////////////////////////////////////////////////////////////////////////////////////////

//dllÍ·Îļþ£¬ÓÃÓÚÉùÃ÷º¯Êý

void __declspec(dllexport) WINAPI InstallHook(BOOL,DWORD);
BOOL WINAPI UnInstallHook();
LRESULT CALLBACK GetMsgProC(int code,WPARAM wParam,LPARAM lParam);

void WINAPI HookOneAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,
        PROC pfnDummyFuncAddress,HMODULE hModCallerModule);
BOOL WINAPI HookAllAPI(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,
        PROC pfnDummyFuncAddress,HMODULE hModCallerModule);
BOOL WINAPI UnhookAllAPIHooks(LPCTSTR pszCalleeModuleName,PROC pfnOriginApiAddress,
         PROC pfnDummyFuncAddress,HMODULE hModCallerModule);

BOOL WINAPI H_TextOutA(HDC, int, int, LPCSTR, int);
BOOL WINAPI H_TextOutW(HDC, int, int, LPCWSTR, int);
BOOL WINAPI H_ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *);
BOOL WINAPI H_ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);

**********************************************************************************************
**********************************************************************************************

;APIHook_DllÖ®defÎļþ
LIBRARY APIHook_Dll.dll
EXPORT
InstallHook
  
¶þ¡¢APIHOOKÖ®exe²¿·Ö

//////////////////////////// APIHook_EXEDlg.cpp /////////////////////////////////////////
//                             rivershanдÓÚ2002.9.23                                  //
/////////////////////////////////////////////////////////////////////////////////////////


#include "stdafx.h"
#include "APIHook_EXE.h"
#include "APIHook_EXEDlg.h"
#include "APIHook_Dll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAPIHook_EXEDlg dialog

CAPIHook_EXEDlg::CAPIHook_EXEDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAPIHook_EXEDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAPIHook_EXEDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CAPIHook_EXEDlg:oDataExchange(CDataExchange* pDX)
{
CDialog:oDataExchange(pDX);
//{{AFX_DATA_MAP(CAPIHook_EXEDlg)
// DDX_Control(pDX, IDC_EDIT1, m_Edit);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAPIHook_EXEDlg, CDialog)
//{{AFX_MSG_MAP(CAPIHook_EXEDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_OUT, OnButtonOut)
ON_BN_CLICKED(IDC_BUTTON_BEGIN, OnButtonBegin)
ON_BN_CLICKED(IDC_BUTTON_STOP, OnButtonStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAPIHook_EXEDlg message handlers

BOOL CAPIHook_EXEDlg::OnInitDialog()
{
CDialog::OnInitDialog();
  
// Set the icon for this dialog.  The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE);   // Set big icon
SetIcon(m_hIcon, FALSE);  // Set small icon
  
// TODO: Add extra initialization here
  
return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CAPIHook_EXEDlg::OnPaint()  
{
if (IsIconic())
{
  CPaintDC dc(this); // device context for painting
   
  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
   
  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;
   
  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
}
else
{
  CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CAPIHook_EXEDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
///////////////////////////////////// OnButtonOut º¯Êý //////////////////////////////////////
//ʹÓÃTextOutº¯Êý
void CAPIHook_EXEDlg::OnButtonOut()  
{
// TODO: Add your control notification handler code here
HDC hdc = ::GetDC(GetSafeHwnd());
::TextOutA(hdc,0,0,"APIHOOK_EXE ---rivershan",30);
UpdateWindow();
}

///////////////////////////////////// OnButtonBegin º¯Êý ////////////////////////////////////
//¿ªÊ¼¹Ò¹³£¬ÕâÀïÎÒÃǹҵÄÊÇ×ÔÉíÕâ¸öAPIHook_EXEÕâ¸ö³ÌÐò
void CAPIHook_EXEDlg::OnButtonBegin()
{
DWORD dwThreadId = GetWindowThreadProcessId(m_hWnd,NULL);//»ñµÃ×ÔÉí½ø³ÌID
InstallHook(TRUE,dwThreadId);
}

///////////////////////////////////// OnButtonStop º¯Êý ////////////////////////////////////
//È¡Ïû¹Ò¹³
void CAPIHook_EXEDlg::OnButtonStop()
{
InstallHook(FALSE,0);
}

Èý¡¢APIHOOKÖ®¼¯³É

1. Óà VC++н¨Ò»¸ö Win32 Dynamic-Link Library ³ÌÐò£¬ÃüÃûΪ APIHook_Dll¡£½ÓÏÂÀ´Ñ¡ÔñµÚ¶þÏî A Simple DLL Project£»
2. н¨Ò»Í·Îļþ£¬ÃüÃûΪ APIHook_Dll.h¡£É¾³ý¹¤³ÌÖÐ APIHook_Dll.cppÎļþÖÐÔ­À´µÄÄÚÈÝ£¬È»ºó°ÑÉÏÃæµÄ APIHook_Dll.cpp ºÍ APIHook_Dll.hÎļþµÄÄÚÈÝÈ«²¿¸´ÖƵ½Ð½¨µÄÕâ¸ö¹¤³ÌµÄ .cpp¼° .hÎļþÖÐÀ´£»
3. н¨Ò» TextÎļþ£¬ÃüÃûΪ APIHook_Dll.def¡£¸´ÖÆÉÏÃæµÄdefÎļþÄÚÈÝ¡£
4. ±àÒ룻
5. н¨Ò» MFC APPWizard(exe)³ÌÐò£¬ÃüÃûΪ APIHook_EXE¡£½Ó×ÅÑ¡ÔñµÚÈýÏ»ùÓÚ¶Ô»°¿òµÄ³ÌÐò£¬ÆäËüĬÈÏ£»
6. ɾ³ýÔ­À´¶Ô»°¿òÉϵĿؼþ£¬È»ºóн¨Èý¸ö°´Å¥ID·Ö±ðΪ£ºIDC_BUTTON_BEGIN¡¢IDC_BUTTON_STOP¡¢IDC_BUTTON_OUT£¬Caption·Ö±ðΪ£ºBigin Hook¡¢Stop Hook¡¢Text Out¡£²»ÒªÈÃÕâÈý¸ö°´Å¥³öÓÚ¶Ô»°¿ò¿Í»§ÇøµÄ×îÉÏÃæ¾ÍÐУ»
7. ¿½±´ APIHook_Dll.hÎļþµ½ APIHook_EXE³ÌÐòĿ¼Ï£¬È»ºó¼Óµ½ APIHook_EXEµÄÍ·Îļþ¼ÐÖС£
8. ɾ³ý¹¤³ÌÖÐ APIHook_EXEDlg.cppÎļþÖÐÔ­À´µÄÄÚÈÝ£¬È»ºó°ÑÉÏÃæµÄ APIHook_EXEDlg.cppÎļþµÄÄÚÈÝÈ«²¿¸´ÖƵ½Ð½¨µÄÕâ¸ö¹¤³ÌµÄ .cppÎļþÖÐÀ´£»
9. ´ò¿ª Project->Setting²Ëµ¥£¬Ñ¡ÔñµÚËÄÏîlink£¬ÔÚ Object/library modulsÀïÌí¼ÓÎÒÃǵÄdllµÄlibÎļþµÄ·¾¶£º..\APIHook_Dll\Debug\APIHook_Dll.lib£»
10. ±àÒ룻
11. °Ñ APIHook_Dll.dllÎļþ·ÅÔÚ APIHook_Dll.exe³ÌÐòµÄͬһ¸öÎļþ¼ÐÄÚ£»
12. ÔËÐгÌÐò£¬µã»÷ Bigin Hook°´Å¥£¬¿ªÊ¼¹Ò¹³¡£ÔÙµã»÷ Text Out°´Å¥»áÌø³ö¶Ô»°¿ò²¢ÇÒ»áÔÚ³ÌÐòÖÐÏÔʾËùÒªÏÔʾµÄ×Ö¡£µã»÷ Stop HookÈ»ºóÔÚµã»÷ Text Out°´Å¥¾ÍûÓжԻ°¿ò³öÏÖÁË¡£

ËÄ¡¢Ò»Ð©ËµÃ÷

1¡¢ÎÒÕâ¸ö HookAPIÊÇʹÓÃÁË Jeffrey RichterµÄ¸Äд³ÌÐòµÄ IATÀ´ÊµÏֵģ¬Ò²¿ÉÒÔÓÃÌø×ªº¯ÊýÈë¿ÚµãµÄ·½·¨À´ÊµÏÖ£¬Õâ¸öÎÒû×öÑо¿¡££º£©

2¡¢ÎÒµÄһЩÐĵãº

Ëùν HookAPI£¬¾ÍÊǸÄд³ÌÐòµÄ IAT£¬ÔÙµ÷ÓÃÎÒ×Ô¼ºÐ´µÄÓÃÓÚÌæ»»Ô­APIº¯ÊýµÄº¯Êý¡£ÔÚÎÒÃÇ×Ô¼ºÐ´µÄAPIº¯ÊýÖУ¬ÎÒÃÇ¿ÉÒÔ½øÐÐÎÒÃÇÏëÒªµÄ¹¤×÷¡£Ö®ºóÄØ£¬¿ÉÒÔ°ÑÔ­À´µÄº¯Êý´«»ØÈ¥£¬Ò²¿ÉÒÔ²»´«»ØÈ¥£¬Ö»ÒªÄãÉè¼ÆºÃÁ˾ÍÐС£

¶øËùνµ÷ÓÃ×Ô¼ºµÄº¯Êý,¾ÍÊǰÑÔ­º¯Êý²ÎÊý¶¼´«¸øÎÒµÄÌæ»»º¯Êý¡£ÎÒÃǾͿÉÒÔÀûÓÃÕâЩ²ÎÊýÈ¥¸ÉÎÒÃÇÏë×öµÄÊ¡£¶øÏµÍ³ÄØ£¬ÎÒÏëÓÉÓÚ΢ÈíÉèÖõÄÕâ¸ö¹³×ÓµÄÄ¿µÄ£¨ÎÒÕâôÈÏΪµÄ£©£¬ËùÒÔ²»»áÈ¥¼ì²éÌæ»»º¯ÊýÊÇ·ñ¾ÍÊÇÔ­º¯Êý£¬Ö»Òª²ÎÊý¡¢·µ»ØÖµ·ûºÏÌõ¼þ¾ÍÐУ¬Òª²»»á³ö´í¡£Ìæ»»º¯ÊýµÄ·µ»ØÖµ×îºÃÊÇÔ­º¯Êý£¬·ñÔòÓпÉÄÜ»á³ö´í

HookAPIʱ£¬exe³ÌÐòÆðµ½µÄ×÷ÓþÍÊǽøÐÐHook£¬°Ñdll×¢Èëµ½ÒªHookµÄ³ÌÐò£¬²¢ÇÒ´«»ØÒª¹Ò½ÓµÄ½ø³ÌµÄID»òÕßÈ«¾Ö¹³×Ó£¬ÒÔ±ã²éѯËùÒª¹Ò½ÓµÄÄ£¿éµÄIAT¡£Èç¹û²»×¢Èë½øÈ¥£¬ÏµÍ³²»»áÈÃÄãÈ¥²éѯIATµÄ¡£DLL×öµÄÊÂÇéÊÇÈ·¶¨Òª¹Ò½ÓÄĸöº¯ÊýºÍÕâ¸öº¯ÊýÔÚÄĸöDLLÖеȡ£
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
2Â¥2005-12-31 17:13:32
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

houcy

гæ (³õÈëÎÄ̳)

1

Â¥Ö÷ºÃÇ¿°¡£¡Åå·þ£¡£¡
żһ¶¨ÒªÑ§ºÃwindows±à³Ì£¡£¡£¡
3Â¥2005-12-31 18:46:19
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ zsglly µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] ½­ËÕʡũ¿ÆÔºÕе÷¼Á1Ãû +4 Qwertyuop 2026-03-01 4/200 2026-03-02 14:27 by Éý¸ñ°¢´ï
[¿¼ÑÐ] »¯¹¤×¨Ë¶348£¬Ò»Ö¾Ô¸985Çóµ÷¼Á +6 ¸¥¸ñ¸ö 2026-02-28 9/450 2026-03-02 14:09 by liyongv
[¿¼ÑÐ] һ־Ըɽ¶«´óѧ²ÄÁÏÓ뻯¹¤325Çóµ÷¼Á +3 °ë½ØµÄÊ«0927 2026-03-02 3/150 2026-03-02 12:58 by houyaoxu
[¿¼ÑÐ] 291 Çóµ÷¼Á +3 »¯¹¤2026½ì±ÏÒµÉ 2026-03-02 3/150 2026-03-02 12:55 by houyaoxu
[¿¼ÑÐ] 26¿¼Ñб¨¿¼Î÷¹¤´ó²ÄÁÏ308·ÖÇóµ÷¼Á +4 weizhong123 2026-03-01 4/200 2026-03-02 12:46 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] ²ÄÁϹ¤³Ì274Çóµ÷¼Á +4 Lilithan 2026-03-01 4/200 2026-03-02 12:06 by yuchj
[¿¼ÑÐ] 268Çóµ÷¼Á +4 ¼òµ¥µã0 2026-03-02 5/250 2026-03-02 11:54 by ms629
[¿¼ÑÐ] Çóµ÷¼Á +8 yunziaaaaa 2026-03-01 9/450 2026-03-02 11:03 by ºÚ£¡ÔÚ¸ÉÂï
[¿¼ÑÐ] 284Çóµ÷¼Á +10 ÌìÏÂŸß 2026-02-28 11/550 2026-03-02 11:03 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] µ÷¼Á +3 13853210211 2026-03-02 4/200 2026-03-02 10:16 by 13853210211
[¿¼ÑÐ] 0854¸´ÊÔµ÷¼Á 276 +4 wmm9 2026-03-01 6/300 2026-03-02 09:28 by ÈÈÇéɳĮ
[¿¼ÑÐ] ²ÄÁϹ¤³Ì269Çóµ÷¼Á +3 °×´Ìõ 2026-03-02 3/150 2026-03-02 09:25 by Ò»ÐݸçFU
[¿¼ÑÐ] 299Çóµ÷¼Á +3 YÄ«Ã÷ÆåÃîY 2026-02-28 5/250 2026-03-01 21:01 by tangxiaotian
[¿¼ÑÐ] 306·Ö²ÄÁϵ÷¼Á +4 chuanzhu´¨Öò 2026-03-01 5/250 2026-03-01 19:48 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖÐÄÏ´óѧÀíѧ»¯Ñ§ +4 15779376950 2026-03-01 5/250 2026-03-01 19:00 by Fff-1
[¿¼ÑÐ] 328Çóµ÷¼Á +3 aaadim 2026-03-01 5/250 2026-03-01 17:29 by njzyff
[¿¼ÑÐ] 313Çóµ÷¼Á +3 Ë®Á÷Äêlc 2026-02-28 3/150 2026-03-01 16:01 by ÐÂÄÜÔ´´ïÈË
[¿¼ÑÐ] 302²ÄÁϹ¤³ÌÇóµ÷¼Á +4 Doleres 2026-03-01 5/250 2026-03-01 11:52 by liqiongjy
[¿¼ÑÐ] 317Ò»Ö¾Ô¸»ªÄÏÀí¹¤µçÆø¹¤³ÌÇóµ÷¼Á +6 Soliloquy_Q 2026-02-28 11/550 2026-03-01 11:14 by ¸èliekkas
[ÂÛÎÄͶ¸å] ÇóÖúcoordination chemistry reviews µÄд×÷Ä£°å 10+3 ljplijiapeng 2026-02-27 4/200 2026-03-01 09:07 by babero
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û