本程序實現的功能:
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).子程序 打開進程_強力, 整數型, 公開, 主要為NATIVE API.參數 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 + 1st = 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).子程序 進程結束_強力, 邏輯型, 公開, 主要為NATIVE API.參數 hProcess, 整數型.參數 ExitStatus, 整數型, , 0.局部變量 st, 整數型.局部變量 hJob, 整數型.局部變量 oa, OBJECT_ATTRIBUTES.局部變量 ret, 邏輯型ret = 假oa.Length = 24st = 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, 整數型.局部變量 handletid = -1hSnapShot = CreateToolhelp32Snapshot (4, 0)buffer.dwsize = 28End = 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)返回 (真)
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。
新聞熱點
疑難解答