挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 5138|回复: 1
打印 上一主题 下一主题

[讨论交流] 过名将三国驱动保护

[复制链接]
6高级会员
786/1100

786

积分

260

主题

12

听众
已帮网友解决0 个问题
好评
0
贡献
526
海币
5853
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-9 23:03:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


  1. #include<ntddk.h>  
  2. #include<windef.h>  

  3. typedef struct _SERVICE_DESCRIPTOR_TABLE  
  4. {  
  5. unsigned int *ServiceTableBase;  
  6. unsigned int *ServiceCounterTableBase;  
  7. unsigned int NumberTableBase;  
  8. unsigned char *ParamTableBase;  
  9. }SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE;  

  10. extern PSERVICE_DESCRIPTOR_TABLE    KeServiceDescriptorTable;  


  11. typedef NTSTATUS (*REALZWOPENPROCESS)  
  12.         (  
  13. OUT PHANDLE ProcessHandle,  
  14. IN ACCESS_MASK AccessMask,  
  15. IN POBJECT_ATTRIBUTES ObjectAttributes,  
  16. IN PCLIENT_ID ClientId);  

  17. typedef NTSTATUS (*READVIRTUALMEMORY)(  
  18.         IN HANDLE ProcessHandle,  
  19.         IN PVOID BaseAddress,  
  20.         OUT PVOID Buffer,  
  21.         IN ULONG BufferLength,  
  22.         OUT PULONG ReturnLength OPTIONAL);  
  23.          
  24. typedef NTSTATUS (*WRITEVIRTUALMEMORY)(  
  25. IN HANDLE ProcessHandle,  
  26. IN PVOID BaseAddress,  
  27. IN PVOID Buffer,  
  28. IN ULONG BufferLength,  
  29. OUT PULONG ReturnLength OPTIONAL  
  30. );  


  31. REALZWOPENPROCESS    RealZwOpenProcess;  
  32. READVIRTUALMEMORY    RealNtReadVirtualMemory;  
  33. WRITEVIRTUALMEMORY   RealNtWriteVirtualMemory;  
  34. //***************************************************************************  
  35. VOID Hook();  
  36. VOID Unhook();  
  37. VOID OnUnload(IN PDRIVER_OBJECT DriverObject);  
  38. NTSTATUS rc;  
  39. //NTSTATUS rc1;  
  40. //NTSTATUS rc2;  
  41. DWORD bix,tiao;  
  42. //////////////////////////////////////  
  43. ULONG JmpAddress;//跳转到NtOpenProcess里的地址  
  44. ULONG JmpAddress1;  
  45. ULONG JmpAddress2;  
  46. ULONG OldServiceAddress;//原来NtOpenProcess的服务地址  
  47. ULONG OldServiceAddress1;  
  48. ULONG OldServiceAddress2;  
  49. //////////////////////////////////////  
  50. __declspec(naked) NTSTATUS __stdcall MyNtOpenProcess(PHANDLE ProcessHandle,  
  51.                ACCESS_MASK DesiredAccess,  
  52.                POBJECT_ATTRIBUTES ObjectAttributes,  
  53.                PCLIENT_ID ClientId)  
  54. {  
  55.                
  56. //RealZwOpenProcess=(REALZWOPENPROCESS)OldServiceAddress;               
  57.                
  58. //rc = (NTSTATUS)(REALZWOPENPROCESS)RealZwOpenProcess( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId );  

  59. __asm{  

  60.     push    0C4h  
  61.     push    804daab0h  //共十个字节  
  62.     mov eax,80538d00h  
  63.     call eax  
  64.     jmp     [JmpAddress]      
  65.   }  
  66. }  

  67. __declspec(naked) NTSTATUS __stdcall MyNtReadVirtualMemory(  
  68.         IN HANDLE ProcessHandle,  
  69.         IN PVOID BaseAddress,  
  70.         OUT PVOID Buffer,  
  71.         IN ULONG BufferLength,  
  72.         OUT PULONG ReturnLength OPTIONAL)  
  73.          
  74.         {  

  75.     //RealNtReadVirtualMemory=(READVIRTUALMEMORY)OldServiceAddress1;               
  76.     //rc1 = (NTSTATUS)(READVIRTUALMEMORY)RealNtReadVirtualMemory( ProcessHandle, BaseAddress, Buffer, BufferLength,ReturnLength  );  

  77.          
  78.          __asm{  
  79.     push    1Ch  
  80.     push    804da4e0h  //共十个字节  
  81.     mov eax,80538d00h  
  82.     call eax  
  83.     jmp     [JmpAddress1]      
  84.   }  
  85.          
  86.          
  87.          
  88.         }  
  89.          
  90.          
  91.          
  92.         __declspec(naked) NTSTATUS __stdcall MyNtWriteVirtualMemory(  
  93.         IN HANDLE ProcessHandle,  
  94.         IN PVOID BaseAddress,  
  95.         OUT PVOID Buffer,  
  96.         IN ULONG BufferLength,  
  97.         OUT PULONG ReturnLength OPTIONAL)  
  98.          
  99.         {  

  100.     //RealNtWriteVirtualMemory=(WRITEVIRTUALMEMORY)OldServiceAddress2;               
  101.     //rc2=(NTSTATUS)(WRITEVIRTUALMEMORY)RealNtWriteVirtualMemory(ProcessHandle, BaseAddress, Buffer, BufferLength,ReturnLength);  

  102.          
  103.          __asm{  
  104.     push    1Ch  
  105.     push    804da4f8h  //共十个字节  
  106.     mov eax,80538d00h  
  107.     call eax  
  108.     jmp     [JmpAddress2]      
  109.   }  
  110.          
  111.          
  112.          
  113.         }  


  114. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)  
  115. {  
  116.   DriverObject->DriverUnload = OnUnload;  
  117.   DbgPrint("Unhooker load");  
  118.   Hook();  
  119.   return STATUS_SUCCESS;  
  120. }  
  121. /////////////////////////////////////////////////////  
  122. VOID OnUnload(IN PDRIVER_OBJECT DriverObject)  
  123. {  
  124.   DbgPrint("Unhooker unload!");  
  125.   Unhook();  
  126. }  
  127. /////////////////////////////////////////////////////  

  128. VOID Hook()  
  129. {  
  130. ULONG Address;  
  131. ULONG Address1;  
  132. ULONG Address2;  
  133. Address=(ULONG)KeServiceDescriptorTable->ServiceTableBase+0x7A*4;  
  134. Address1=(ULONG)KeServiceDescriptorTable->ServiceTableBase+0x0ba*4;  
  135. Address2=(ULONG)KeServiceDescriptorTable->ServiceTableBase+0x115*4;  
  136. DbgPrint("Address:0x%08X",Address);  
  137. DbgPrint("Address1:0x%08X",Address1);  
  138. DbgPrint("Address2:0x%08X",Address2);  

  139. OldServiceAddress=*(ULONG*)Address;  
  140. OldServiceAddress1=*(ULONG*)Address1;  
  141. OldServiceAddress2=*(ULONG*)Address2;  
  142. RealZwOpenProcess=(REALZWOPENPROCESS)OldServiceAddress;  
  143. DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress);  
  144. DbgPrint("OldServiceAddress1:0x%08X",OldServiceAddress1);  
  145. DbgPrint("OldServiceAddress2:0x%08X",OldServiceAddress2);  

  146. JmpAddress=OldServiceAddress+15;  
  147. JmpAddress1=OldServiceAddress1+12;  
  148. JmpAddress2=OldServiceAddress2+12;  
  149. //JmpAddress=2153521239;  
  150. DbgPrint("JmpAddress:0x%08X",JmpAddress);  
  151. DbgPrint("JmpAddress1:0x%08X",JmpAddress1);  
  152. DbgPrint("JmpAddress2:0x%08X",JmpAddress2);  
  153. __asm{//去掉内存保护  
  154.     cli  
  155.          mov  eax,cr0  
  156.     and  eax,not 10000h  
  157.     mov  cr0,eax  
  158.      }  
  159.    
  160.    
  161. *((ULONG*)Address) = (ULONG)MyNtOpenProcess;//HOOK SSDT  
  162. *((ULONG*)Address1) = (ULONG)MyNtReadVirtualMemory;  
  163. *((ULONG*)Address2) = (ULONG)MyNtWriteVirtualMemory;  
  164.   __asm{//恢复内存保护   
  165.           mov  eax,cr0  
  166.     or   eax,10000h  
  167.     mov  cr0,eax  
  168.     sti  
  169.        }  

  170. }  


  171. VOID Unhook()  
  172. {  
  173.   ULONG  Address;  
  174.   ULONG  Address1;  
  175.   ULONG  Address2;  
  176.   Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//查找SSDT  
  177.   Address1=(ULONG)KeServiceDescriptorTable->ServiceTableBase+0x0ba*4;  
  178.   Address2=(ULONG)KeServiceDescriptorTable->ServiceTableBase+0x115*4;  

  179.   __asm{  
  180.     cli  
  181.           mov  eax,cr0  
  182.     and  eax,not 10000h  
  183.     mov  cr0,eax  
  184.   }  

  185. *((ULONG*)Address) = (ULONG)OldServiceAddress;//还原SSDT  
  186. *((ULONG*)Address1) = (ULONG)OldServiceAddress1;  
  187. *((ULONG*)Address2) = (ULONG)OldServiceAddress2;  
  188.   __asm{   
  189.          mov  eax,cr0  
  190.     or   eax,10000h  
  191.     mov  cr0,eax  
  192.     sti  
  193.   }  

  194.   DbgPrint("Unhook");  
  195. }  
复制代码




联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:疾风之刃OD附加
下一篇:恢复游戏的InlineHook ZwOpenProcess
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

3正式会员
109/300

109

积分

73

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
36
海币
380
交易币
0
沙发
发表于 2015-7-3 01:35:23 | 只看该作者
逐字逐句地看完这个帖子以后,我的心久久不能平静
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-12 21:55 , Processed in 0.121679 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表