如何知道exe文件是被哪个进程调用启动起来的?(50分)

  • 主题发起人 主题发起人 jsongy
  • 开始时间 开始时间
有没有谁知道,还是不可能?
 
这得要对系统有深刻理解的大虾才知道有没有可能.
关注.
希望刘麻子等强人说说.
帮你顶.
 
到现在还是没有高人出现
 
这个估计不可能,因为一个程序可能多次调用,再说,也没有这样的函数记录
 
这个对你有用吗?
调试器对我们的威胁很大,我们不会让Cracker们舒舒服服地使用SoftICE、TRW或OllyDbg来调试我们的程序。除了常用的MeItICE方法外,这里我给一个笔者写的方法:

  {检查自己的进程的父进程是否为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)+ '/EX PLORER.EXE';//得到Explorer的路径
  //得到所有进程的列表快照
  sHandle:= CreateToolHelp32Snap Shot(TH32CS_SNAPALL,0);
  Found:= Process32First(sHandle,Pn);//查找进程
  while Found do //遍历所有进程
  begin
  if Pn.szExeFile = ParamStr(0)then //自己的进程
  begin
  ParentProc:= Pn.th32ParentProcessID://得到父进程的进程ID
  //父进程的句柄
  H:= OpenProcess(PRO CESS_ALL_ACCESS,True,Pn.th32Parent ProcessID);
  end
  else if UpperCase(Pn.szExeFile)= Path then
  ExplProc:= Pn.th32ProcessID;//Ex plorer的PID
  Found:= Process32Next(sHandle,Pn);//查找下一个
  end;
  //父进程不是Explorer,是调试器……
  if ParentProc <> ExplProc then
  begin
  TerminateProcess(H,0);//杀之!除之而后快也! :)
  //你还可以加上其它什么死机代码来消遣消遣这位可爱的Cracker:)
   end??
  end??

  你可以在Delphi或者VC中试试,这样可以把Delphi和VC杀掉了,因为你现在用的是Delphi和VC的内置调试器来运行你的程序。调试的时候你还是把它的注释删掉吧,发布时别忘记激活哟!
 
ParentProcessID
 
后退
顶部