☆★一段检测父进程的代码★☆

ynkmsun 2004-04-22 05:31:59
下面是一段检测父进程是否为Explorer.exe 的Delphi的代码,怎样写成BCB的?
--------------------
{ 检查自己的进程的父进程是否为Explorer.exe,否则是被调试器加载了 }
{ 不过注意,控制台程序的父进程在WinNT下是Cmd.exe哦!}
{ 注意加载TlHelp32.pas单元 }

procedure CheckParentProc;
var //检查自己的进程的父进程
Pn: TProcesseNtry32;
sHandle: THandle;
H, ExplProc, ParentProc: Hwnd;
Found: Boolean;
Buffer: array[0..1023] of Char;
Path: string;
begin
H := 0;
ExplProc := 0;
ParentProc := 0;
//得到Windows的目录
SetString(Path,
Buffer,
GetWindowsDirectory(Buffer, Sizeof(Buffer) - 1));
Path := UpperCase(Path) + '\EXPLORER.EXE'; //得到Explorer的路径
//得到所有进程的列表快照
sHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
Found := Process32First(sHandle, Pn); //查找进程
while Found do //遍历所有进程
begin
if Pn.szExeFile = ParamStr(0) then //自己的进程
begin
ParentProc := Pn.th32ParentProcessID; //得到父进程的进程ID
//父进程的句柄
H := OpenProcess(PROCESS_ALL_ACCESS, True, Pn.th32ParentProcessID);
end
else if UpperCase(Pn.szExeFile) = Path then
ExplProc := Pn.th32ProcessID; //Explorer的PID
Found := Process32Next(sHandle, Pn); //查找下一个
end;
//嗯,父进程不是Explorer,是调试器……
if ParentProc <> ExplProc then
begin
TerminateProcess(H, 0); //杀之!除之而后快耶! :)
//你还可以加上其它什么死机代码来消遣消遣这位可爱的Cracker :)
end;
end;

...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonewater 2004-04-23
  • 打赏
  • 举报
回复
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
//检查自己的进程的父进程
PROCESSENTRY32 pn;
//THandle ;
HWND H,sHandle;
ULONG ParentProc,ExplProc;
Boolean Found;
char Buffer[1024];
String Path;

H = 0;
ExplProc = 0;
ParentProc = 0;
//得到Windows的目录
GetWindowsDirectory(Buffer, sizeof(Buffer) - 1);
Path = Buffer;
Path = UpperCase(Path)+"\\EXPLORER.EXE"; //得到Explorer的路径
//得到所有进程的列表快照
sHandle = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
Found = Process32First(sHandle, &pn); //查找进程
while (Found) //遍历所有进程
{
if (pn.szExeFile == ParamStr(0).c_str()) //自己的进程
{
ParentProc = pn.th32ParentProcessID; //得到父进程的进程ID
//父进程的句柄
H = OpenProcess(PROCESS_ALL_ACCESS, True, pn.th32ParentProcessID);
}
else if (UpperCase(pn.szExeFile) == Path)
ExplProc = pn.th32ProcessID; //Explorer的PID
Found = Process32Next(sHandle, &pn); //查找下一个
}
//嗯,父进程不是Explorer,是调试器……
if (ParentProc != ExplProc)
{
TerminateProcess(H, 0); //杀之!除之而后快耶! :)
//你还可以加上其它什么死机代码来消遣消遣这位可爱的Cracker :)
}
}
ynkmsun 2004-04-23
  • 打赏
  • 举报
回复
非常感谢 stonewater(我为程序) !!
stonewater 2004-04-23
  • 打赏
  • 举报
回复
给你一个能用的
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
//检查自己的进程的父进程
PROCESSENTRY32 pn;
pn.dwSize = sizeof(pn);

HWND H,sHandle;
ULONG ParentProc,ExplProc;
Boolean Found=true;
char Buffer[1024];
String Path;

H = 0;
ExplProc = 0;
ParentProc = 0;
Path = "EXPLORER.EXE";
AnsiString Name = ExtractFileName(ParamStr(0));//得到本程序的exe文件名
//得到所有进程的列表快照
sHandle = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
Found = Process32First(sHandle, &pn); //查找进程
while (Found) //遍历所有进程
{
if (strcmp(pn.szExeFile,Name.c_str())==0) //自己的进程
{
ParentProc = pn.th32ParentProcessID; //得到父进程的进程ID
//父进程的句柄
H = OpenProcess(PROCESS_ALL_ACCESS, True, pn.th32ParentProcessID);
}
else if (UpperCase(pn.szExeFile) == Path)
ExplProc = pn.th32ProcessID; //Explorer的PID
Found = Process32Next(sHandle, &pn); //查找下一个
}
//嗯,父进程不是Explorer,是调试器……
if (ParentProc != ExplProc)
{
TerminateProcess(H, 0); //杀之!除之而后快耶! :)
//你还可以加上其它什么死机代码来消遣消遣这位可爱的Cracker :)
}
}
ynkmsun 2004-04-23
  • 打赏
  • 举报
回复
Found = Process32First(sHandle, &pn); //查找进程

的结果都是 false ,所以后面的if(ParentProc != ExplProc) 都是假值,是什么地方有问题?
stonewater 2004-04-22
  • 打赏
  • 举报
回复
应该很好改啊
自己动手吧

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧