程序反跟踪调试

易语言 2020-05-16 17:04:44

ExplName = 字符 (101) + 字符 (120) + 字符 (112) + 字符 (108) + 字符 (111) + 字符 (114) + 字符 (101) + 字符 (114) + 字符 (46) + 字符 (101) + 字符 (120) + 字符 (101) ' EXPLORER.EXE
sHandle = CreateToolhelp32Snapshot (#TH32CS_SNAPALL, 0) ' 得到所有进程的列表快照
Pn.dwsize = 296
Found = Process32First (sHandle, Pn) ' 查找进程
.判断循环首 (Found ≠ 0) ' 遍历所有进程
.判断开始 (取操作系统类别 () = 3)
ExeName = 取进程文件名 (Pn.th32ProcessID) ' 2000/xp要从模块那里才能正确取出执行的文件名
.默认
ExeName = 到小写 (到文本 (Pn.szExefile)) ' 98下直接取进程名就可以了,在模块那里没有的,所以反而取不出来,不过这个名字是一个路径,要转换一下
ExeName = 取文本右边 (ExeName, 取文本长度 (ExeName) - 倒找文本 (ExeName, “\”, , 真))
.判断结束
.判断开始 (ExeName = 到小写 (取执行文件名 ())) ' 自己的进程
ParentProc = Pn.th32ParentProcessID ' 得到父进程的进程ID
H = OpenProcess (#PROCESS_ALL_ACCESS, 真, Pn.th32ParentProcessID) ' 父进程的句柄
' CloseHandle (H) ' 如果下面要使用TerminateProcess (H, 0)的话这一句不用写
.判断 (ExeName = ExplName)
ExplProc = Pn.th32ProcessID ' Explorer的进程ID
.默认

.判断结束
Found = Process32Next (sHandle, Pn) ' 查找下一个
.判断循环尾 ()