幽雅的心 发表于 2010-12-3 10:32:15

一段HOOK API 实现patch HWID 程序框架

采用模拟API函数拦截,进行HOOK
typedef struct _NTHook{
      FARPROC hAddr;
      BYTE dwOldValue;
      BYTE dwNewValue;
} NTHook,*PNTHook;

DWORD   dwProtect,dwWriteByte,dwReadByte;
NTHookhNt;
BOOLIsHook;
BYTE HWID[]={0x6E, 0x74, 0x65, 0x6C, 0x69, 0x6E, 0x65, 0x49, 0x00, 0x08,
0x02, 0x00, 0x7A, 0x06, 0x01, 0x00, 0x00, 0x26, 0x55, 0x3F,
0xDB, 0x1A};自定的HWID

void RWHOOK(PNTHook hNt,DWORD hProc)
{

       //记录原指令指向
      ReadProcessMemory(GetCurrentProcess(), (LPVOID)hNt->hAddr, (LPVOID)hNt->dwOldValue, 5, &dwReadByte);
      VirtualProtect ( (LPVOID)hNt->hAddr, 5, PAGE_READWRITE, &dwProtect );
      hNt->dwNewValue=0xE9;
       //计算patch函数的地址指令,计算方法:指向地址-EIP-5
   *((PDWORD)(&(hNt->dwNewValue)))=hProc-DWORD(hNt->hAddr)-5;
       //修改JMP指向到patch代码
      WriteProcessMemory( GetCurrentProcess(), (LPVOID)hNt->hAddr, (LPVOID)hNt->dwNewValue, 5, &dwWriteByte ) ;

}

//patch HWID过程函数
__declspec(naked) void NewProc()
{

      _asm
      {
                pushad         //保留现场
                mov edi,edx    //让EDI指向到HWID(取得OD分析中的HWID数据地址)
                lea esi,HWID    // 让ESI指向到我们的自定的HWID
                mov ecx,16H   //定义要patch的字节数
               rep movsb         //patch HWID
      }
      //恢复原指令修正指向
      WriteProcessMemory( GetCurrentProcess(), (LPVOID)hNt.hAddr, (LPVOID)hNt.dwOldValue, 5, &dwWriteByte ) ;   
       IsHook=FALSE;
      _asm
      {
                popad         //恢复现场
                jmp hNt.hAddr
      }
}

void Hook()
{
    //OD分析中关键地址,在这修改指向到patch代码
   hNt.hAddr=(FARPROC)0x004C44E8;   
   if (IsHook==FALSE)
   {
         RWHOOK(&hNt,(DWORD)NewProc);
         IsHook=TRUE;
   }
}

///////////////////////////////////////////////////////////////////////////////////////////////
// 要HOOK的函数
ALCDECL AheadLib_GetAdaptersInfo(void)
{
      
      Hook();   调用HOOK过程
      GetAddress("GetAdaptersInfo");获取原来API的地址,返回到EAX
      __asm JMP EAX;   
}
/////////////////////////////////////////////////////////////////////////////////////////////

djlife520 发表于 2012-9-1 17:02:54

很好的框架,学习了

pxhb 发表于 2015-1-30 11:55:30

Np1.7的替换机器码?

347735313 发表于 2015-2-8 16:38:48

不错看看 楼主幸苦了

xjhkkk 发表于 2015-7-29 18:17:32

嗯看看怎么样,
页: [1]
查看完整版本: 一段HOOK API 实现patch HWID 程序框架