X64站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1373|回复: 25

跳过签名-回调

  [复制链接]
  • TA的每日心情
    擦汗
    2023-12-22 12:28
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    122

    主题

    257

    帖子

    6902

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    6902

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2024-3-25 00:13:50 | 显示全部楼层 |阅读模式
    1. #pragma once
    2. #include<ntddk.h>
    3. #include<wdm.h>
    4. //#include<ntifs.h>
    5. #include<windef.h>
    6. #define PROCESS_TERMINATE                  (0x0001)  
    7. #define PROCESS_CREATE_THREAD              (0x0002)  
    8. #define PROCESS_SET_SESSIONID              (0x0004)  
    9. #define PROCESS_VM_OPERATION               (0x0008)  
    10. #define PROCESS_VM_READ                    (0x0010)  
    11. #define PROCESS_VM_WRITE                   (0x0020)  
    12. #define PROCESS_DUP_HANDLE                 (0x0040)  
    13. #define PROCESS_CREATE_PROCESS             (0x0080)  
    14. #define PROCESS_SET_QUOTA                  (0x0100)  
    15. #define PROCESS_SET_INFORMATION            (0x0200)  
    16. #define PROCESS_QUERY_INFORMATION          (0x0400)  
    17. #define PROCESS_SUSPEND_RESUME             (0x0800)  
    18. #define PROCESS_QUERY_LIMITED_INFORMATION  (0x1000)  
    19. #define THREAD_TERMINATE                 (0x0001)  
    20. #define THREAD_SUSPEND_RESUME            (0x0002)  
    21. #define THREAD_GET_CONTEXT               (0x0008)  
    22. #define THREAD_SET_CONTEXT               (0x0010)  
    23. #define THREAD_QUERY_INFORMATION         (0x0040)  
    24. #define THREAD_SET_INFORMATION           (0x0020)  
    25. #define THREAD_SET_THREAD_TOKEN          (0x0080)
    26. #define THREAD_IMPERSONATE               (0x0100)
    27. #define THREAD_DIRECT_IMPERSONATION      (0x0200)
    28. // begin_wdm
    29. #define THREAD_SET_LIMITED_INFORMATION   (0x0400)  // winnt
    30. #define THREAD_QUERY_LIMITED_INFORMATION (0x0800)  // winnt
    31. #define THREAD_RESUME                    (0x1000)  // winnt
    32. typedef struct _LDR_DATA_TABLE_ENTRY
    33. {
    34. LIST_ENTRY InLoadOrderLinks;
    35. LIST_ENTRY InMemoryOrderLinks;
    36. LIST_ENTRY InInitializationOrderLinks;
    37. LPVOID DllBase;//==========对应 ptr64
    38. LPVOID EntryPoint;
    39. ULONG SizeOfImage;
    40. UNICODE_STRING FullDllName;
    41. UNICODE_STRING BaseDllName;
    42. union
    43. {
    44. UCHAR FlagGroup[4];
    45. ULONG Flags;
    46. UCHAR PackagedBinary : 1;// PackagedBinary   : Pos 0, 1 Bit
    47. UCHAR MarkedForRemoval : 1;
    48. UCHAR ImageDll : 1;
    49. UCHAR LoadNotificationsSent : 1;
    50. UCHAR TelemetryEntryProcessed : 1;
    51. UCHAR ProcessStaticImport : 1;
    52. UCHAR InLegacyLists : 1;
    53. UCHAR InIndexes : 1;
    54. UCHAR ShimDll : 1;
    55. UCHAR InExceptionTable : 1;
    56. UCHAR ReservedFlags1 : 2;
    57. UCHAR LoadInProgress : 1;
    58. UCHAR LoadConfigProcessed : 1;
    59. UCHAR EntryProcessed : 1;
    60. UCHAR ProtectDelayLoad : 1;
    61. UCHAR ReservedFlags3 : 2;
    62. UCHAR DontCallForThreads : 1;
    63. UCHAR ProcessAttachCalled : 1;
    64. UCHAR ProcessAttachFailed : 1;
    65. UCHAR CorDeferredValidate : 1;
    66. UCHAR CorImage : 1;
    67. UCHAR DontRelocate : 1;
    68. UCHAR CorILOnly : 1;
    69. UCHAR ChpeImage : 1;
    70. UCHAR ReservedFlags5 : 2;
    71. UCHAR Redirected : 1;
    72. UCHAR ReservedFlags6 : 2;
    73. UCHAR CompatDatabaseProcessed : 1;
    74. };
    75. USHORT ObsoleteLoadCount;//=Uint 2B
    76. USHORT TlsIndex;
    77. LIST_ENTRY HashLinks;
    78. ULONG TimeDateStamp;
    79. LPVOID EntryPointActivationContext;
    80. LPVOID Lock;
    81. LPVOID DdagNode;
    82. LIST_ENTRY NodeModuleLink;
    83. LPVOID LoadContext;
    84. LPVOID ParentDllBase;
    85. LPVOID SwitchBackContext;
    86. RTL_BALANCED_NODE BaseAddressIndexNode;
    87. RTL_BALANCED_NODE MappingInfoIndexNode;
    88. ULONG64 OriginalBase;//==Uint8B
    89. LARGE_INTEGER LoadTime;
    90. ULONG BaseNameHashValue;//==Uint4B
    91. LPVOID LoadReason;
    92. ULONG ImplicitPathOptions;
    93. ULONG ReferenceCount;
    94. ULONG DependentLoadFlags;
    95. UCHAR SigningLevel;
    96. }LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;
    97. OB_CALLBACK_REGISTRATION CBoRegistertion = { 0 };
    98. OB_OPERATION_REGISTRATION CBOpertionRegostertons[2] = { {0},{0} };
    99. PVOID pCBRegisertionHandle = NULL;
    100. UNICODE_STRING  CBAltitude;
    101. OB_PREOP_CALLBACK_STATUS CBTdPreOpertionCallback_1(PVOID RegistertionCountext, POB_PRE_OPERATION_INFORMATION PreInfo)
    102. {
    103. PACCESS_MASK DesiredAccess = NULL;
    104. ACCESS_MASK OriginalDesireAccess = 0;
    105. HANDLE Pid = PsGetProcessId((PEPROCESS)PreInfo->Object);
    106. if (PreInfo->ObjectType == *PsThreadType)
    107. {
    108. HANDLE ProcessOfTargeTherad = PsGetThreadProcessId((PETHREAD)PreInfo->Object);
    109. if (7260!= ProcessOfTargeTherad)
    110. {
    111. goto Exit;
    112. }
    113. if (ProcessOfTargeTherad == PsGetCurrentProcessId())
    114. {
    115. KdPrint(("Current Thread"));
    116. goto Exit;
    117. }
    118. }
    119. switch (PreInfo->Operation)
    120. {
    121. case OB_OPERATION_HANDLE_CREATE:
    122. DesiredAccess = &PreInfo->Parameters->CreateHandleInformation.DesiredAccess;
    123. OriginalDesireAccess = PreInfo->Parameters->DuplicateHandleInformation.OriginalDesiredAccess;
    124. break;
    125. case OB_OPERATION_HANDLE_DUPLICATE:
    126. DesiredAccess = &PreInfo->Parameters->CreateHandleInformation.DesiredAccess;
    127. OriginalDesireAccess = PreInfo->Parameters->CreateHandleInformation.OriginalDesiredAccess;
    128. break;
    129. default:
    130. break;
    131. }
    132. if (PreInfo->KernelHandle != 1)
    133. {
    134. __try//尝试干掉所有进程得读取操作和终止权限
    135. {
    136. if ((*DesiredAccess & THREAD_TERMINATE) == THREAD_TERMINATE)
    137. *DesiredAccess &= ~THREAD_TERMINATE;
    138. if ((*DesiredAccess &= THREAD_SUSPEND_RESUME) == THREAD_SUSPEND_RESUME)
    139. *DesiredAccess &= ~THREAD_SUSPEND_RESUME;
    140. if ((*DesiredAccess &= THREAD_SET_THREAD_TOKEN) == THREAD_SET_THREAD_TOKEN)
    141. *DesiredAccess &= ~THREAD_SET_THREAD_TOKEN;
    142. }
    143. __except (1)
    144. {
    145. goto Exit;
    146. }
    147. }
    148. Exit:
    149. return OB_PREOP_SUCCESS;
    150. }
    151. OB_PREOP_CALLBACK_STATUS CBTdPreOpertionCallback(PVOID RegistertionCountext, POB_PRE_OPERATION_INFORMATION PreInfo)
    152. {
    153. PACCESS_MASK DesiredAccess = NULL;
    154. ACCESS_MASK OriginalDesireAccess = 0;
    155. HANDLE Pid = PsGetProcessId((PEPROCESS)PreInfo->Object);
    156. if (PreInfo->ObjectType == *PsProcessType)
    157. {
    158. if (Pid != 7260)
    159. {
    160. goto Exit;
    161. }
    162. if (PreInfo->Object == PsGetCurrentProcess())
    163. {
    164. KdPrint(("Current Process"));
    165. goto Exit;
    166. }
    167. }
    168. switch (PreInfo->Operation)
    169. {
    170. case OB_OPERATION_HANDLE_CREATE:
    171. DesiredAccess = &PreInfo->Parameters->CreateHandleInformation.DesiredAccess;
    172. OriginalDesireAccess = PreInfo->Parameters->DuplicateHandleInformation.OriginalDesiredAccess;
    173. break;
    174. case OB_OPERATION_HANDLE_DUPLICATE:
    175. DesiredAccess = &PreInfo->Parameters->CreateHandleInformation.DesiredAccess;
    176. OriginalDesireAccess = PreInfo->Parameters->CreateHandleInformation.OriginalDesiredAccess;
    177. break;
    178. default:
    179. break;
    180. }
    181. if (PreInfo->KernelHandle != 1)
    182. {
    183. __try//尝试干掉所有进程得读取操作和终止权限
    184. {
    185. if ((*DesiredAccess & PROCESS_TERMINATE) == PROCESS_TERMINATE)
    186. *DesiredAccess &= ~PROCESS_TERMINATE;
    187. if ((*DesiredAccess &= PROCESS_CREATE_THREAD) == PROCESS_CREATE_THREAD)
    188. *DesiredAccess &= ~PROCESS_CREATE_THREAD;
    189. if ((*DesiredAccess &= PROCESS_VM_OPERATION) == PROCESS_VM_OPERATION)
    190. *DesiredAccess &= ~PROCESS_VM_OPERATION;
    191. if ((*DesiredAccess & PROCESS_VM_READ) == PROCESS_VM_READ)
    192. *DesiredAccess &= ~PROCESS_VM_READ;
    193. if ((*DesiredAccess & PROCESS_VM_WRITE) == PROCESS_VM_WRITE)
    194. *DesiredAccess &= ~PROCESS_VM_WRITE;
    195. }
    196. __except (1)
    197. {
    198. goto Exit;
    199. }
    200. }
    201. Exit:
    202. return OB_PREOP_SUCCESS;
    203. }
    204. NTSTATUS SetProtectCallBack()
    205. {
    206. NTSTATUS status = STATUS_SUCCESS;
    207. CBOpertionRegostertons[0].ObjectType = PsProcessType;//回调类型
    208. CBOpertionRegostertons[0].Operations |= OB_OPERATION_HANDLE_CREATE;
    209. CBOpertionRegostertons[0].Operations |= OB_OPERATION_HANDLE_DUPLICATE;
    210. CBOpertionRegostertons[0].PreOperation = CBTdPreOpertionCallback;//进程回调
    211. CBOpertionRegostertons[1].ObjectType = PsThreadType;//回调类型
    212. CBOpertionRegostertons[1].Operations |= OB_OPERATION_HANDLE_CREATE;
    213. CBOpertionRegostertons[1].Operations|= OB_OPERATION_HANDLE_DUPLICATE;
    214. CBOpertionRegostertons[1].PreOperation = CBTdPreOpertionCallback_1;//线程回调
    215. RtlInitUnicodeString(&CBAltitude, L"2000");
    216. CBoRegistertion.Version = OB_FLT_REGISTRATION_VERSION;//版本
    217. CBoRegistertion.OperationRegistrationCount = 2;//回调数量
    218. CBoRegistertion.Altitude = CBAltitude;//指向unicode 字符串
    219. CBoRegistertion.RegistrationContext = NULL;//附加参数
    220. CBoRegistertion.OperationRegistration = CBOpertionRegostertons;
    221. status = ObRegisterCallbacks(&CBoRegistertion, &pCBRegisertionHandle);
    222. if (!NT_SUCCESS(status))
    223. {
    224. KdPrint(("ObRegistert CallBack Error Code:0x%X", status));
    225. }
    226. return status;
    227. }
    228. void HelloDDKUnload(PDRIVER_OBJECT pDriverObject)
    229. {
    230. KdPrint(("DriverUn"));
    231. if (pCBRegisertionHandle != NULL)
    232. ObUnRegisterCallbacks(pCBRegisertionHandle);
    233. }
    234. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath)
    235. {
    236. NTSTATUS ntStatus=STATUS_SUCCESS;;
    237. KdPrint(("Driver Star\n"));
    238. KdPrint(("Driver =%p", pDriverObject));
    239. PLDR_DATA_TABLE_ENTRY ldr = (PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
    240. ldr->Flags |= 0x20;
    241. //注册其他驱动调用函数入口
    242. pDriverObject->DriverUnload = HelloDDKUnload;
    243. // 设置进程和线程回调
    244. SetProtectCallBack();
    245. return ntStatus;
    246. }
    复制代码


    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    76

    帖子

    160

    积分

    注册会员

    Rank: 2

    积分
    160
    发表于 2024-3-25 00:13:51 | 显示全部楼层
    学习一下,感谢分享资料
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    102

    帖子

    213

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    213
    发表于 2024-3-26 05:17:16 | 显示全部楼层
    thanks for share.
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    294

    帖子

    586

    积分

    高级会员

    Rank: 4

    积分
    586
    发表于 2024-3-26 20:03:17 | 显示全部楼层
    可以看看,学习一下
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    94

    帖子

    198

    积分

    注册会员

    Rank: 2

    积分
    198
    发表于 2024-3-27 01:23:41 | 显示全部楼层
    这个超级喜欢,我要学习学习
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    118

    帖子

    245

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    245
    发表于 2024-3-27 20:07:55 | 显示全部楼层
    非常感谢,谢谢分享
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    104

    帖子

    217

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    217
    发表于 2024-3-27 21:15:17 | 显示全部楼层
    楼主威武,抱走包走!!!!!!!!!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    364

    帖子

    724

    积分

    高级会员

    Rank: 4

    积分
    724
    发表于 2024-3-29 08:02:32 | 显示全部楼层
    看看学习一下
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    120

    帖子

    249

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    249
    发表于 2024-3-29 16:05:56 | 显示全部楼层
    感谢,正要找呢..
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    346

    帖子

    690

    积分

    高级会员

    Rank: 4

    积分
    690
    发表于 2024-3-29 20:11:03 | 显示全部楼层
    学习学习,保存一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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