X64站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1592|回复: 26

暴力搜索

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

    [LV.3]偶尔看看II

    122

    主题

    257

    帖子

    6902

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    6902

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

    发表于 2024-3-25 00:11:11 | 显示全部楼层 |阅读模式
    1. #include <ntddk.h>
    2. #include <ntimage.h>
    3. #include <ntdef.h>
    4. //#include "Ioctlcmd.h"
    5. #define FILE_DEVICE_SWAP     0x0000800a
    6. //IOCTL_CODE
    7. #define IOCTL_PROC_KILL   (ULONG) CTL_CODE(FILE_DEVICE_SWAP, 0x8009, METHOD_BUFFERED, FILE_WRITE_ACCESS)
    8. #define IOCTL_TRANSFER_TYPE( _iocontrol)   (_iocontrol & 0x3)
    9. const WCHAR deviceLinkBuffer[] = L"\\DosDevices\\KillProc";
    10. const WCHAR deviceNameBuffer[] = L"\\Device\\KillProc";
    11. typedef NTSTATUS(*NTQUERYSYSTEMINFORMATION)(
    12. IN ULONG                        SystemInformationClass,
    13. OUT PVOID                        SystemInformation,
    14. IN ULONG                        SystemInformationLength,
    15. OUT PULONG                        ReturnLength OPTIONAL);
    16. typedef unsigned long DWORD;
    17. NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;
    18. #define SystemModuleInformation 11
    19. typedef struct _SYSTEM_MODULE_INFORMATION
    20. {
    21. ULONG  Reserved[2];
    22. PVOID  Base;
    23. ULONG  Size;
    24. ULONG  Flags;
    25. USHORT Index;
    26. USHORT Unknown;
    27. USHORT LoadCount;
    28. USHORT ModuleNameOffset;
    29. CHAR   ImageName[256];
    30. } SYSTEM_MODULE_INFORMATION, * PSYSTEM_MODULE_INFORMATION;
    31. PDEVICE_OBJECT g_HookDevice;
    32. NTSTATUS  PsLookupProcessByProcessId(ULONG ProcessId, PEPROCESS* Process);
    33. typedef  NTSTATUS(*PSPTERPROC) (PEPROCESS Process, NTSTATUS ExitStatus);
    34. PSPTERPROC MyPspTerminateProcess = NULL;
    35. NTSTATUS OnUnload(IN PDRIVER_OBJECT DriverObject)
    36. {
    37. UNICODE_STRING          deviceLinkUnicodeString;
    38. PDEVICE_OBJECT    p_NextObj;
    39. DbgPrint("OnUnload called\n");
    40. p_NextObj = DriverObject->DeviceObject;
    41. if (p_NextObj != NULL)
    42. {
    43. RtlInitUnicodeString(&deviceLinkUnicodeString, deviceLinkBuffer);
    44. IoDeleteSymbolicLink(&deviceLinkUnicodeString);
    45. IoDeleteDevice(DriverObject->DeviceObject);
    46. }
    47. return STATUS_SUCCESS;
    48. }
    49. NTSTATUS
    50. DispatchControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
    51. {
    52. PIO_STACK_LOCATION      irpStack;
    53. PVOID                   inputBuffer;
    54. PVOID                   outputBuffer;
    55. PVOID      userBuffer;
    56. ULONG                   inputBufferLength;
    57. ULONG                   outputBufferLength;
    58. ULONG                   ioControlCode;
    59. NTSTATUS      ntstatus;
    60. unsigned int i;
    61. unsigned total = 0;
    62. ULONG count = 0;
    63. HANDLE handle;
    64. ULONG cnt;
    65. PEPROCESS Eprocess = NULL;
    66. DWORD pid;
    67. ntstatus = Irp->IoStatus.Status = STATUS_SUCCESS;
    68. Irp->IoStatus.Information = 0;
    69. irpStack = IoGetCurrentIrpStackLocation(Irp);
    70. inputBuffer = Irp->AssociatedIrp.SystemBuffer;
    71. inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    72. outputBuffer = Irp->AssociatedIrp.SystemBuffer;
    73. outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;
    74. ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
    75. switch (irpStack->MajorFunction)
    76. {
    77. case IRP_MJ_CREATE:
    78. break;
    79. case IRP_MJ_SHUTDOWN:
    80. break;
    81. case IRP_MJ_CLOSE:
    82. break;
    83. case IRP_MJ_DEVICE_CONTROL:
    84. if (IOCTL_TRANSFER_TYPE(ioControlCode) == METHOD_NEITHER)
    85. {
    86. outputBuffer = Irp->UserBuffer;
    87. }
    88. switch (ioControlCode)
    89. {
    90. case IOCTL_PROC_KILL:
    91. if (MyPspTerminateProcess == NULL)
    92. {
    93. *(DWORD*)outputBuffer = -1;
    94. Irp->IoStatus.Information = sizeof(DWORD);
    95. }
    96. else
    97. {
    98. pid = *(DWORD*)inputBuffer;
    99. {
    100. ntstatus = PsLookupProcessByProcessId(pid, &Eprocess);
    101. if (!NT_SUCCESS(ntstatus))
    102. {
    103. DbgPrint("Failed to lookup process 0x%x, status %8.8x\n", pid, ntstatus);
    104. *(DWORD*)outputBuffer = 1;
    105. Irp->IoStatus.Information = sizeof(DWORD);
    106. break;
    107. }
    108. DbgPrint("Lookup of process 0x%x, PEPROCESS at %8.8x\n", pid, Eprocess);
    109. ntstatus = MyPspTerminateProcess(Eprocess, 0);
    110. if (!NT_SUCCESS(ntstatus))
    111. {
    112. DbgPrint("Failed to terminate process 0x%x, status %8.8x\n", pid, ntstatus);
    113. *(DWORD*)outputBuffer = 2;
    114. Irp->IoStatus.Information = sizeof(DWORD);
    115. break;
    116. }
    117. *(DWORD*)outputBuffer = 0;
    118. Irp->IoStatus.Information = sizeof(DWORD);
    119. DbgPrint("Process 0x%x terminated\n", pid);
    120. }
    121. }
    122. break;
    123. default:
    124. break;
    125. }
    126. IoCompleteRequest(Irp, IO_NO_INCREMENT);
    127. }
    128. return ntstatus;
    129. }
    130. NTSTATUS DispatchCreate(
    131. IN PDEVICE_OBJECT pDevObj,
    132. IN PIRP pIrp)
    133. {
    134. pIrp->IoStatus.Status = STATUS_SUCCESS;
    135. pIrp->IoStatus.Information = 0;
    136. IoCompleteRequest(pIrp, IO_NO_INCREMENT);
    137. return STATUS_SUCCESS;
    138. }
    139. ULONG GetFunctionAddr(IN PCWSTR FunctionName)
    140. {
    141. UNICODE_STRING UniCodeFunctionName;
    142. RtlInitUnicodeString(&UniCodeFunctionName, FunctionName);
    143. return (ULONG)MmGetSystemRoutineAddress(&UniCodeFunctionName);
    144. }
    145. VOID DoFind(IN PVOID pContext)
    146. {
    147. NTSTATUS ret;
    148. PSYSTEM_MODULE_INFORMATION  module = NULL;
    149. ULONG n = 0;
    150. void* buf = NULL;
    151. ULONG ntosknlBase;
    152. ULONG ntosknlEndAddr;
    153. ULONG curAddr;
    154. ULONG code1_sp3 = 0x8b55ff8b, code2_sp3 = 0xA16456EC, code3_sp3 = 0x00000124, code4_sp3 = 0x3B08758B;
    155. ULONG i;
    156. NtQuerySystemInformation = (NTQUERYSYSTEMINFORMATION)GetFunctionAddr(L"NtQuerySystemInformation");
    157. if (!NtQuerySystemInformation)
    158. {
    159. DbgPrint("Find NtQuerySystemInformation faild!");
    160. goto Ret;
    161. }
    162. ret = NtQuerySystemInformation(SystemModuleInformation, &n, 0, &n);
    163. if (NULL == (buf = ExAllocatePoolWithTag(NonPagedPool, n, 'DFSP')))
    164. {
    165. DbgPrint("ExAllocatePool() failed\n");
    166. goto Ret;
    167. }
    168. ret = NtQuerySystemInformation(SystemModuleInformation, buf, n, NULL);
    169. if (!NT_SUCCESS(ret)) {
    170. DbgPrint("NtQuerySystemInformation faild!");
    171. goto Ret;
    172. }
    173. module = (PSYSTEM_MODULE_INFORMATION)((PULONG)buf + 1);
    174. ntosknlEndAddr = (ULONG)module->Base + (ULONG)module->Size;
    175. ntosknlBase = (ULONG)module->Base;
    176. curAddr = ntosknlBase;
    177. ExFreePool(buf);
    178. for (i = curAddr; i <= ntosknlEndAddr; i++)
    179. {
    180. if (*((ULONG*)i) == code1_sp3)
    181. {
    182. if (*((ULONG*)(i + 4)) == code2_sp3)
    183. {
    184. if (*((ULONG*)(i + 8)) == code3_sp3)
    185. {
    186. if (*((ULONG*)(i + 12)) == code4_sp3)
    187. {
    188. MyPspTerminateProcess = (PSPTERPROC)i;
    189. break;
    190. }
    191. }
    192. }
    193. }
    194. }
    195. Ret:
    196. PsTerminateSystemThread(STATUS_SUCCESS);
    197. }
    198. VOID GetPspAddr()
    199. {
    200. HANDLE hThread;
    201. PVOID objtowait = 0;
    202. NTSTATUS dwStatus =
    203. PsCreateSystemThread(
    204. &hThread,
    205. 0,
    206. NULL,
    207. (HANDLE)0,
    208. NULL,
    209. DoFind,
    210. NULL
    211. );
    212. NTSTATUS st;
    213. if ((KeGetCurrentIrql()) != PASSIVE_LEVEL)
    214. {
    215. st = KfRaiseIrql(PASSIVE_LEVEL);
    216. }
    217. if ((KeGetCurrentIrql()) != PASSIVE_LEVEL)
    218. {
    219. return;
    220. }
    221. ObReferenceObjectByHandle(
    222. hThread,
    223. THREAD_ALL_ACCESS,
    224. NULL,
    225. KernelMode,
    226. &objtowait,
    227. NULL
    228. );
    229. st = KeWaitForSingleObject(objtowait, Executive, KernelMode, FALSE, NULL); //NULL表示无限期等待.
    230. return;
    231. }
    232. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
    233. {
    234. NTSTATUS rc;
    235. RTL_OSVERSIONINFOW osvi;
    236. NTSTATUS                ntStatus;
    237. UNICODE_STRING          deviceNameUnicodeString;
    238. UNICODE_STRING          deviceLinkUnicodeString;
    239. RtlInitUnicodeString(&deviceNameUnicodeString,deviceNameBuffer);
    240. RtlInitUnicodeString(&deviceLinkUnicodeString,deviceLinkBuffer);
    241. ntStatus = IoCreateDevice(DriverObject,0,&deviceNameUnicodeString,FILE_DEVICE_SWAP,0,TRUE,&g_HookDevice);
    242. if (!NT_SUCCESS(ntStatus))
    243. {
    244. DbgPrint(("Failed to create device!\n"));
    245. return ntStatus;
    246. }
    247. ntStatus = IoCreateSymbolicLink(&deviceLinkUnicodeString,
    248. &deviceNameUnicodeString);
    249. if (!NT_SUCCESS(ntStatus))
    250. {
    251. IoDeleteDevice(DriverObject->DeviceObject);
    252. DbgPrint("Failed to create symbolic link!\n");
    253. return ntStatus;
    254. }
    255. DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] =
    256. DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
    257. DriverObject->MajorFunction[IRP_MJ_CLOSE] =
    258. DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchControl;
    259. DriverObject->DriverUnload = OnUnload;
    260. GetPspAddr();
    261. if (MyPspTerminateProcess == NULL)
    262. {
    263. DbgPrint("PspFunc Not Find!\n");
    264. }
    265. return STATUS_SUCCESS;
    266. }
    复制代码


    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    346

    帖子

    693

    积分

    高级会员

    Rank: 4

    积分
    693
    发表于 2024-3-25 00:11:12 | 显示全部楼层
    thans you
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    134

    帖子

    277

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    277
    发表于 2024-3-25 02:53:02 | 显示全部楼层
    感谢,正要找呢..
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    116

    帖子

    232

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    232
    发表于 2024-3-26 05:13:46 | 显示全部楼层
    感谢,楼主辛苦了
    回复

    使用道具 举报

    该用户从未签到

    4

    主题

    82

    帖子

    168

    积分

    注册会员

    Rank: 2

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

    使用道具 举报

    该用户从未签到

    0

    主题

    100

    帖子

    195

    积分

    注册会员

    Rank: 2

    积分
    195
    发表于 2024-3-26 12:50:06 | 显示全部楼层
    可以看看,学习一下
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    92

    帖子

    194

    积分

    注册会员

    Rank: 2

    积分
    194
    发表于 2024-3-27 01:23:37 | 显示全部楼层
    应该好好学习下啊
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    319

    帖子

    637

    积分

    高级会员

    Rank: 4

    积分
    637
    发表于 2024-3-27 11:17:27 | 显示全部楼层
    非常不错的资料
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    106

    帖子

    221

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    221
    发表于 2024-3-28 06:34:13 | 显示全部楼层
    支持一下支持
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    316

    帖子

    629

    积分

    高级会员

    Rank: 4

    积分
    629
    发表于 2024-3-28 06:34:16 | 显示全部楼层
    学习学习,保存一下
    回复

    使用道具 举报

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

    本版积分规则

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