易语言NTAPI进程操纵的代码
本程序实现的功能:
- 打开进程_强力
- 进程暂停
- 取api函数地址
- 进程结束
- 进程结束_强力
- 进程_NT内存清零
- 进程_取自进程ID
- 进程_提高权限
- Kill_Process命令
DLL命令表
.版本2 .DLL命令打开进程_,整数型,"kernel32.dll","OpenProcess",公开,将句柄返回给过程对象 .参数进程对象,整数型,,dwDesiredAccess .参数继承句柄,整数型,,bInheritHandle .参数进程标识符,整数型,,dwProcessId .DLL命令ZwOpenProcess,整数型,"ntdll.dll","ZwOpenProcess",公开 .参数hProcess,整数型,传址 .参数DesiredAccess,整数型 .参数ObjectAttributes,OBJECT_ATTRIBUTES .参数ClientId,CLIENT_ID .DLL命令ZwQuerySystemInformation,整数型,"ntdll.dll","ZwQuerySystemInformation" .参数SystemInformationClass,整数型,,未知类型:SYSTEM_INFORMATION_CLASS。 .参数SystemInformation,字节集,,any .参数SystemInformationLength,整数型 .参数ReturnLength,整数型,传址 .DLL命令取指针_字节集,整数型,,"lstrcpyn",公开,常规API .参数欲取其指针,字节集,传址 .参数欲取其指针,字节集,传址 .参数保留,整数型,,0 .DLL命令RtlMoveMemory3,整数型,,"RtlMoveMemory",公开,常规API,从地址读一个整数 .参数dest,整数型,传址 .参数Source,整数型 .参数len,,,4 .DLL命令RtlMoveMemory1,整数型,,"RtlMoveMemory",,常规API .参数dest,SYSTEM_HANDLE_TABLE_ENTRY_INFO .参数Source,整数型 .参数len .DLL命令ZwDuplicateObject,整数型,"ntdll.dll",,公开 .参数SourceProcessHandle,整数型 .参数SourceHandle,整数型 .参数TargetProcessHandle,整数型 .参数TargetHandle,整数型,传址 .参数DesiredAccess,整数型 .参数HandleAttributes,整数型 .参数Options,整数型 .DLL命令ZwQueryInformationProcess,整数型,"ntdll.dll","ZwQueryInformationProcess" .参数SystemInformationClass,整数型,,未知类型:SYSTEM_INFORMATION_CLASS。 .参数dd,整数型 .参数SystemInformation,PROCESS_BASIC_INFORMATION,,any .参数SystemInformationLength,整数型 .参数ReturnLength,整数型,传址 .DLL命令ZwClose,整数型,"ntdll.dll","ZwClose",公开,关闭进程句柄 .参数handle .DLL命令取函数地址_,整数型,"kernel32","GetProcAddress",,返回函数地址 .参数模块句柄,整数型 .参数函数名,文本型 .DLL命令取模块句柄_,整数型,"kernel32","GetModuleHandleA",,获取一个应用程序或动态链接库的模块句柄如执行成功成功,则返回模块句柄。零表示失败。会设置GetLastError .参数模块名,文本型,,指定模块名,这通常是与模块的文件名相同的一个名字。例如,NOTEPAD.EXE程序的模块文件名就叫作NOTEPAD; .DLL命令_动态调用子程序,整数型,,"CallWindowProcA" .参数动态调用代码,字节集,,字节集代码 .参数子程序,整数型,,子程序指针到整数(子程序指针) .参数参数,整数型,数组,为整数数组,参数1为成员1…类推;文本型和字节集型(自定义结构)为指针 .参数参数数目,整数型,,一定要和参数数组相符,不然会出错 .参数是否C调用,逻辑型,,真为cdecl调用方式,假为stdcall调用方式(即标准WINAPI方式) .DLL命令ZwCreateJobObject,整数型,"ntdll.dll",,公开 .参数JobHandle,整数型,传址 .参数DesiredAccess,整数型 .参数ObjectAttributes,OBJECT_ATTRIBUTES .DLL命令关闭内核对象_,整数型,"kernel32.dll","CloseHandle",公开,$(b)非零表示成功,零表示失败 .参数对象句柄,整数型,,hObject,欲关闭的一个对象的句柄 .DLL命令TerminateProcess_,整数型,"kernel32","TerminateProcess",,结束一个进程非零表示成功,零表示失败。会设置GetLastError .参数hProcess,整数型,,指定要中断的一个进程的句柄 .参数uExitCode,整数型,,进程的一个退出代码; .DLL命令ZwAssignProcessToJobObject,整数型,"ntdll.dll",,公开 .参数JobHandle,整数型 .参数ProcessHandle,整数型 .DLL命令ZwTerminateJobObject,整数型,"ntdll.dll",,公开 .参数JobHandle,整数型 .参数ExitStatus,整数型 .DLL命令ZwTerminateProcess,整数型,"ntdll.dll",,公开 .参数ProcessHandle,整数型 .参数ExitStatus,整数型 .DLL命令ZwProtectVirtualMemory,整数型,"NTDLL.DLL","ZwProtectVirtualMemory" .参数ProcessHandle,整数型 .参数BaseAddress,整数型 .参数RegionSize,整数型 .参数NewProtect,整数型 .参数OldProtect,整数型 .DLL命令ZwWriteVirtualMemory,整数型,"NTDLL.DLL","ZwWriteVirtualMemory" .参数ProcessHandle,整数型 .参数BaseAddress,整数型 .参数pBuffer,字节集 .参数NumberOfBytesToWrite,整数型 .参数NumberOfBytesWritten,整数型,传址 .DLL命令RtlAdjustPrivilegeA,整数型,"ntdll.dll","RtlAdjustPrivilege" .参数Privilege,整数型 .参数Enable,逻辑型 .参数Client,逻辑型 .参数WasEnabled,整数型,传址 .DLL命令API_CreateRemoteThread,整数型,"kernel32","CreateRemoteThread",,在另一进程中建立线索 .参数hProcess,整数型 .参数lpThreadAttributes,SECURITY_ATTRIBUTES .参数dwStackSize,整数型 .参数lpStartAddress,整数型 .参数lpParameter,整数型 .参数dwCreationFlags,整数型 .参数lpThreadId,整数型 .DLL命令CreateToolhelp32Snapshot,整数型,"Kernel32.dll","CreateToolhelp32Snapshot" .参数falg,整数型 .参数id,整数型 .DLL命令Thread32First,整数型,"kernel32","Thread32First" .参数hSnapshot,整数型 .参数lppe,THREADENTRY32 .DLL命令OpenThread,整数型,"kernel32","OpenThread" .参数h,整数型 .参数a,逻辑型 .参数b,整数型 .DLL命令TerminateThread,整数型,"NTDLL.DLL","ZwTerminateThread" .参数hThread,整数型 .参数dwExitCode,整数型 .DLL命令Thread32Next,整数型,"kernel32","Thread32Next" .参数hSnapshot,整数型 .参数lppe,THREADENTRY32 .DLL命令NtUnmapViewOfSection,整数型,"ntdll.dll","NtUnmapViewOfSection" .参数hProcess .参数addr .DLL命令LoadLibrary,整数型,"kernel32","LoadLibraryA",公开 .参数lpLibFileName,文本型 .DLL命令DebugActiveProcess,逻辑型,"kernel32","DebugActiveProcess" .参数dwProcessId,整数型
自定义数据类型表
.版本2 .数据类型CLIENT_ID,公开,CLIENT_ID结构包含进程和线程的标识符。 .成员UniqueProcess,整数型,,,进程标识符 .成员UniqueThread,整数型,,,线程标识符 .数据类型OBJECT_ATTRIBUTES,公开,OBJECT_ATTRIBUTES结构指定属性,可以应用于对象或对象处理的例程创建对象和/或返回对象的处理。 .成员Length,整数型 .成员RootDirectory,整数型 .成员ObjectName,整数型 .成员Attributes,整数型 .成员SecurityDescriptor,整数型 .成员SecurityQualityOfService,整数型 .数据类型SECURITY_ATTRIBUTES,,安全性结构; .成员nLength,整数型 .成员lpSecurityDescriptor,整数型 .成员bInheritHandle,整数型 .数据类型PROCESS_BASIC_INFORMATION,公开 .成员ExitStatus,整数型 .成员PebBaseAddress,整数型 .成员AffinityMask,整数型 .成员BasePriority,整数型 .成员UniqueProcessId,整数型 .成员InheritedFromUniqueProcessId,整数型 .数据类型MEMORY_BASIC_INFORMATION,公开 .成员BaseAddress,整数型 .成员AllocationBase,整数型 .成员AllocattionProtect,整数型 .成员RegionSize,整数型 .成员State,整数型 .成员Protect,整数型 .成员Type,整数型 .数据类型SYSTEM_HANDLE_TABLE_ENTRY_INFO,公开 .成员UniqueProcessId,短整数型 .成员CreatorBackTraceIndex,短整数型 .成员ObjectTypeIndex,字节型 .成员HandleAttributes,字节型 .成员HandleValue,短整数型 .成员pObject,整数型 .成员GrantedAccess,整数型 .数据类型THREADENTRY32 .成员dwsize,整数型 .成员cntusage,整数型 .成员th32threadID,整数型 .成员th32OwnerProcessID,整数型 .成员tpBasePri,整数型 .成员tpDeltaPri,整数型 .成员dwFlags,整数型
常量数据表
.版本2 .常量PROCESS_ALL_ACCESS,"2035711",公开 .常量STATUS_INFO_LENGTH_MISMATCH,"-1073741820",公开 .常量STATUS_SUCCESS,"0",公开 .常量PROCESS_QUERY_INFORMATION,"1024",公开 .常量STATUS_INVALID_PARAMETER,"-1073741811",公开 .常量OBJ_INHERIT,"2",公开 .常量DUPLICATE_CLOSE_SOURCE,"1",公开 .常量DUPLICATE_SAME_ACCESS,"2",公开 .常量DUPLICATE_SAME_ATTRIBUTES,"4",公开 .常量OB_TYPE_PROCESS,"5",公开 .常量ZwGetCurrentProcess,"-1",公开 .常量PROCESS_DUP_HANDLE,"64",公开 .常量PAGE_EXECUTE_READWRITE,"64" .常量JOB_OBJECT_ALL_ACCESS,"2031647",公开
NTAPI进程操纵代码
.版本2 .程序集主程序集 .子程序_启动子程序,整数型 进程_提高权限() 信息框(进程暂停(3796,假),0,,) 返回(0) .子程序打开进程_强力,整数型,公开,主要为NATIVEAPI .参数dwDesiredAccess,整数型 .参数bInhert,逻辑型 .参数ProcessId,整数型 .局部变量st,整数型 .局部变量cid,CLIENT_ID,,,CLIENT_ID结构包含进程和线程的标识符。 .局部变量oa,OBJECT_ATTRIBUTES .局部变量NumOfHandle,整数型 .局部变量pbi,PROCESS_BASIC_INFORMATION .局部变量i,整数型 .局部变量hProcessToDup,整数型 .局部变量hProcessCur,整数型 .局部变量hProcessToRet,整数型 .局部变量h_info,SYSTEM_HANDLE_TABLE_ENTRY_INFO .局部变量retlen,整数型 .局部变量a,字节集 .局部变量b,整数型 .局部变量c,字节集 .局部变量ret,整数型 .如果真(ProcessId=0) 返回(0) .如果真结束 oa.Length=24 .如果真(bInhert) oa.Attributes=位或(oa.Attributes,#OBJ_INHERIT) .如果真结束 cid.UniqueProcess=ProcessId+1 st=ZwOpenProcess(hProcessToRet,dwDesiredAccess,oa,cid) .如果真(st≥0) ret=hProcessToRet 返回(ret) .如果真结束 retlen=1 .循环判断首() a=取空白字节集(retlen) ret=ZwQuerySystemInformation(16,a,retlen,0) .如果(ret=#STATUS_INFO_LENGTH_MISMATCH) retlen=retlen×2 a=取空白字节集(retlen) .否则 跳出循环() .如果结束 .循环判断尾(ret=#STATUS_INFO_LENGTH_MISMATCH) b=取指针_字节集(a,a,0) RtlMoveMemory3(NumOfHandle,b,4) b=b+4 .计次循环首(NumOfHandle,i) RtlMoveMemory1(h_info,b,16) .如果真(h_info.ObjectTypeIndex=#OB_TYPE_PROCESS) cid.UniqueProcess=h_info.UniqueProcessId st=ZwOpenProcess(hProcessToDup,#PROCESS_DUP_HANDLE,oa,cid) .如果真(st≥0) st=ZwDuplicateObject(hProcessToDup,h_info.HandleValue,#ZwGetCurrentProcess,hProcessCur,#PROCESS_ALL_ACCESS,0,#DUPLICATE_SAME_ATTRIBUTES) .如果真(st≥0) st=ZwQueryInformationProcess(hProcessCur,0,pbi,24,0) .如果真(st≥0) .如果真(pbi.UniqueProcessId=ProcessId) st=ZwDuplicateObject(hProcessToDup,h_info.HandleValue,#ZwGetCurrentProcess,hProcessToRet,dwDesiredAccess,#OBJ_INHERIT,#DUPLICATE_SAME_ATTRIBUTES) .如果真(st≥0) ret=hProcessToRet .如果真结束 .如果真结束 .如果真结束 .如果真结束 st=ZwClose(hProcessCur) .如果真结束 st=ZwClose(hProcessToDup) .如果真结束 b=b+16 .计次循环尾() 返回(ret) .子程序进程暂停,逻辑型,公开,进程暂停(成功返回真,失败假) .参数PID,整数型 .参数状态,逻辑型,可空 .局部变量进程句柄,整数型 .局部变量a,整数型 进程句柄=打开进程_(2035711,0,PID) .如果真(进程句柄=0) 进程句柄=打开进程_强力(2035711,假,PID) .如果真结束 .如果真(进程句柄=0) 返回(假) .如果真结束 .如果(状态) a=API_ZwSuspendProcess(进程句柄) .否则 a=API_ZwResumeProcess(进程句柄) .如果结束 关闭内核对象_(进程句柄) 返回(a=0) .子程序API_ZwSuspendProcess,整数型,,NTDLL.DLL,API_ZwSuspendProcess .参数进程句柄,整数型 .局部变量地址,整数型 .局部变量参数,整数型,,"1" 地址=取api函数地址(“NTDLL.DLL”,“ZwSuspendProcess”)'取出NTDLL中函数ZwSuspendProcess的地址 参数[1]=进程句柄'ZwSuspendProcess的参数,ZwSuspendProcess是系统自带的挂起进程命令,动态调用防止钩子 返回(_动态调用子程序(#动态调用代码,地址,参数,1,假))'动态调用 .子程序取api函数地址,整数型,公开 .参数dll文件名,文本型 .参数dll命令名,文本型 返回(取函数地址_(取模块句柄_(dll文件名),dll命令名)) .子程序API_ZwResumeProcess,整数型,,NTDLL.DLL,API_ZwResumeProcess .参数进程句柄,整数型 .局部变量地址,整数型 .局部变量参数,整数型,,"1" 地址=取api函数地址(“NTDLL.DLL”,“ZwResumeProcess”)'取出NTDLL中函数ZwResumeProcess的地址 参数[1]=进程句柄'ZwResumeProcess的参数,ZwResumeProcess是系统自带的恢复进程命令,动态调用防止钩子 返回(_动态调用子程序(#动态调用代码,地址,参数,1,假))'动态调用 .子程序进程结束,逻辑型,公开,终止一个进程(成功返回真,失败返回假) .参数进程ID,整数型,,欲结束的进程ID .局部变量进程句柄,整数型 .局部变量a,整数型 进程句柄=打开进程_(进程ID) a=TerminateProcess_(进程句柄,0) 关闭内核对象_(进程句柄) 返回(a>0) .子程序进程结束_强力,逻辑型,公开,主要为NATIVEAPI .参数hProcess,整数型 .参数ExitStatus,整数型,,0 .局部变量st,整数型 .局部变量hJob,整数型 .局部变量oa,OBJECT_ATTRIBUTES .局部变量ret,逻辑型 ret=假 oa.Length=24 st=ZwCreateJobObject(hJob,#JOB_OBJECT_ALL_ACCESS,oa) .如果真(st≥0) st=ZwAssignProcessToJobObject(hJob,hProcess) .如果真(st≥0) st=ZwTerminateJobObject(hJob,ExitStatus) .如果真(st≥0) ret=真 .如果真结束 .如果真结束 ZwClose(hJob) .如果真结束 .如果真(ret=假) st=ZwTerminateProcess(hProcess,ExitStatus) .如果真(st≥0) ret=真 .如果真结束 .如果真结束 返回(ret) .子程序进程_NT内存清零,逻辑型,公开,注意,该命令十分强力,可以清除进程大部分残余命令和内存(注:速度太慢,CPU占量很高,请慎用!) .参数PID,整数型 .局部变量hprocess,整数型 .局部变量i,整数型 .局部变量内存填充物,整数型 hprocess=打开进程_强力(#PROCESS_ALL_ACCESS,假,PID) 内存填充物=取空白字节集(255) .变量循环首(0,40960000,4096,i) ZwProtectVirtualMemory(hprocess,i,4096,#PAGE_EXECUTE_READWRITE,0) ZwWriteVirtualMemory(hprocess,i,内存填充物,4096,0) .变量循环尾() ZwClose(hprocess) .子程序进程_取自进程ID,整数型,公开,取自身进程PID,成功返回进程ID,失败返回-1 置入代码({100,139,5,32,0,0,0,201,195}) 返回(-1) .子程序进程_提高权限,逻辑型,公开,NT强力提高权限,限自身 RtlAdjustPrivilegeA(20,真,假,0) 返回(真) .子程序Kill_Process,逻辑型,公开,包含8种杀进程方法 .参数PID,整数型 .局部变量hJob,整数型 .局部变量oa,OBJECT_ATTRIBUTES .局部变量H,整数型 .局部变量h_d,整数型 .局部变量sa,SECURITY_ATTRIBUTES .局部变量i,整数型 H=打开进程_(PID) .如果真(H=0) H=打开进程_强力(#PROCESS_ALL_ACCESS,假,PID) .如果真结束 .如果(H≠0) .如果真(ZwTerminateProcess(H,1)≥1) 返回(真) .如果真结束 .如果真(进程结束(PID)) 返回(真) .如果真结束 .如果真(进程结束_强力(H,0)) 返回(真) .如果真结束 oa.Length=24 .如果真(ZwCreateJobObject(hJob,2031647,oa)≥0) .如果真(ZwAssignProcessToJobObject(hJob,H)≥0且ZwTerminateJobObject(hJob,0)≥0) ZwClose(H) ZwClose(hJob) 返回(真) .如果真结束 ZwClose(hJob) .如果真结束 h_d=取api函数地址(“kernel32.dll”,“ExitProcess”) API_CreateRemoteThread(H,sa,0,h_d,0,0,0) 关闭内核对象_(H) .如果真(KillAllTheard(PID)) 返回(真) .如果真结束 .否则 H=打开进程_(8,0,PID) .如果真(H=0) H=打开进程_强力(8,假,PID) .如果真结束 i=NtUnmapViewOfSection(H,LoadLibrary(“kernel32.dll”))'强制卸载kernel32.dll i=NtUnmapViewOfSection(H,LoadLibrary(“USER32.dll”))'强制卸载USER32.dll i=NtUnmapViewOfSection(H,LoadLibrary(“GDI32.dll”))'强制卸载GDI32.dll i=NtUnmapViewOfSection(H,LoadLibrary(“KERNELBASE.dll”))'强制卸载KERNELBASE.dll i=NtUnmapViewOfSection(H,LoadLibrary(“ntdll.dll”))'强制卸载ntdll.dll ZwClose(H) .如果真(i≥0) 返回(真) .如果真结束 返回(DebugActiveProcess(PID)) .如果结束 返回(假) .子程序KillAllTheard,逻辑型 .参数pid .局部变量hSnapShot,整数型 .局部变量End,整数型 .局部变量buffer,THREADENTRY32 .局部变量tid,整数型 .局部变量handle tid=-1 hSnapShot=CreateToolhelp32Snapshot(4,0) buffer.dwsize=28 End=Thread32First(hSnapShot,buffer) .判断循环首(End≠0) .如果真(buffer.th32OwnerProcessID=pid) tid=buffer.th32threadID handle=OpenThread(2032639,假,tid) .如果真(TerminateThread(handle,0)=0) 关闭内核对象_(handle) 关闭内核对象_(hSnapShot) 返回(假) .如果真结束 关闭内核对象_(handle) 跳出循环() .如果真结束 End=Thread32Next(hSnapShot,buffer) .判断循环尾() 关闭内核对象_(hSnapShot) 返回(真)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接