龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 1657|回复: 0

导入地址表(IAT)随便HOOK+反检测方法

[复制链接]

19

主题

1

回帖

26

积分

编程入门

Rank: 1

龙马币
58

防IAT检测方法:IAT在指定目标文件的PE结构里面指定了的,我们把自己内存里面做了修改,没有修改目标文件,只要不让目标文件被其他文件映射,读取PE结构和我们内存中修改过的比较,保证能反一切IAT检测。

用法:
  1. HookImage("ZwSetInformationFile",(DWORD)MyZwSetInformationFile);
  2. HookImage("NtTerminateProcess",(DWORD)MyNtTerminateProcess);
  3. HookImage("NtTerminateThread",(DWORD)MyNtTerminateThread);
  4. HookImport("KERNEL32.DLL","ExitProcess",(DWORD)MyNtTerminateProcess);
  5. RemoveImage("NtTerminateProcess");
复制代码



  1. /********************************************
  2. 挂钩目标程序kernel32.dll里面输入的ntdll.dll的函数
  3. ********************************************/
  4. DWORD HookImage(char *szName,DWORD Newfunc)
  5. {
  6.   HMODULE hMod=LoadLibrary("NTDLL");
  7.   DWORD RealAddr=(DWORD)GetProcAddress(hMod,szName);
  8.   UINT Size=0;
  9.   hMod=LoadLibrary("kernel32.dll");
  10.     PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData
  11.                                                  (hMod,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&Size);                                             
  12.     if(pImport==NULL)
  13.     {
  14.         return FALSE;
  15.     }
  16.     IMAGE_THUNK_DATA32 *Pthunk=(IMAGE_THUNK_DATA32*)((DWORD)hMod+pImport->FirstThunk);
  17.     MEMORY_BASIC_INFORMATION mbi;
  18.     VirtualQuery(Pthunk,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
  19.     VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Protect);
  20.   while(Pthunk->u1.Function)
  21.   {
  22.     if(RealAddr==Pthunk->u1.Function)
  23.     {
  24.       Pthunk->u1.Function=Newfunc;
  25.       break;
  26.     }
  27.     Pthunk++;
  28.   }
  29.     DWORD protect;
  30.     VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&protect);
  31.   return TRUE;
  32. }

  33. /********************************************
  34. 挂钩目标程序输入表里面的函数
  35. ********************************************/
  36. DWORD HookImport(char *szDLL,char *szName,DWORD Newfunc)
  37. {

  38.   DWORD protect;
  39.   UINT Size=0;
  40.   HMODULE hMod=GetModuleHandle(NULL);
  41.     MEMORY_BASIC_INFORMATION mbi;


  42.     PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData
  43.                                                          (hMod,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&Size);
  44. ////改写内存保护,以便转换大小写
  45.   VirtualQuery(pImport,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
  46.   VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Protect);
  47.     while(pImport->Name)
  48.     {

  49.         char *pszModName=(char*)((PBYTE)hMod+pImport->Name);
  50.         if(_stricmp(pszModName,szDLL)==0)
  51.         {
  52.             break;
  53.         }
  54.         pImport++;
  55.     }
  56.   VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&protect);
  57. ////改写内存保护结束,改回原来的保护
  58.     DWORD RealAddr=(DWORD)GetProcAddress(LoadLibrary(szDLL),szName);                           
  59.     if(pImport==NULL)
  60.     {
  61.         return FALSE;
  62.     }
  63.     IMAGE_THUNK_DATA32 *Pthunk=(IMAGE_THUNK_DATA32*)((DWORD)hMod+pImport->FirstThunk);
  64. ////改写内存保护,以便写入函数地址
  65.     VirtualQuery(Pthunk,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
  66.     VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Protect);
  67.   while(Pthunk->u1.Function)
  68.   {
  69.     if(RealAddr==Pthunk->u1.Function)
  70.     {
  71.       Pthunk->u1.Function=Newfunc;
  72.       break;
  73.     }
  74.     Pthunk++;
  75.   }
  76.     VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&protect);
  77. ////改写内存保护,改回原来的保护
  78.   return TRUE;
  79. }

  80. /********************************************
  81. 清除目标程序的ntdll的函数名字
  82. ********************************************/
  83. BOOL RemoveImage(char *szName)
  84. {
  85.   HMODULE hMod=LoadLibrary("kernel32.dll");
  86.   UINT Size=0;
  87.     PIMAGE_IMPORT_DESCRIPTOR pImport=(PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData
  88.                                                  (hMod,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&Size);
  89.   DWORD *pName=(DWORD*)((DWORD)hMod+pImport->OriginalFirstThunk);
  90.   while(pName)
  91.   {
  92.     char *pAddr=(char*)(*pName+(DWORD)hMod+2);
  93.     if(!(strcmp(pAddr,szName)))
  94.     {
  95.         DWORD Protect;
  96.       VirtualProtect(pAddr,strlen(pAddr),PAGE_READWRITE,&Protect);
  97.       memset(pAddr,0,strlen(pAddr));
  98.       VirtualProtect(pAddr,strlen(pAddr),Protect,pName);
  99.       break;
  100.     }
  101.     pName++;
  102.   }
  103.   return TRUE;
  104. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表