19 12
发新话题
打印

dll已经注入到Explorer.exe中,母程序已经死了,想用热键把DLL中的窗体显示出来

dll已经注入到Explorer.exe中,母程序已经死了,想用热键把DLL中的窗体显示出来

是这样的,母程序把DLL加载到了explore.exe中后,自己就死掉了,现在想用全局热键调出DLL中的窗体,但是写不出来了,以下是母程序把DLL加载到了explore.exe




unit toDllUnt;
   
interface   
   
uses   
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   
  StdCtrls, tlhelp32, ExtCtrls;
{type  
  TProcessEntry32 = record  
    dwSize: DWORD;  
    cntUsage: DWORD;  
    th32ProcessID: DWORD;  
    th32DefaultHeapID: DWORD;  
    th32ModuleID: DWORD;  
    cntThreads: DWORD;  
    th32ParentProcessID: DWORD;  
    pcPriClassBase: integer;  
    dwFlags: DWORD;  
    szExeFile: array[0..MAX_PATH - 1] of char;  
  end; }   
type
  TtoDllFrm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
{ Public declarations }
  end;   
   
var   
  toDllFrm: TtoDllFrm;   
implementation   
   
{$R *.DFM}
function EnableHideHook: BOOL; external 'HKPHide.DLL';
function DisableHideHook: BOOL; external 'HKPHide.DLL';

{ function GetDllChildForm:Tform; stdcall;external 'dll.dll';
  procedure InitDLL(App:TApplication);stdcall;external 'dll.dll';
  procedure FreeDLL;stdcall;external 'dll.dll';      }
  
procedure FindAProcess(const AFilename: string; const PathMatch: Boolean; var ProcessID: DWORD);   
var   
  lppe: TProcessEntry32;   
  SsHandle: Thandle;
  FoundAProc, FoundOK: boolean;   
begin   
  ProcessID :=0;   
  SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);   
  FoundAProc := Process32First(Sshandle, lppe);   
  while FoundAProc do
  begin   
    if PathMatch then   
      FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename)) = 0   
    else   
      FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile)), PChar(ExtractFilename(AFilename))) = 0;   
    if FoundOK then   
    begin   
      ProcessID := lppe.th32ProcessID;   
      break;   
    end;   
    FoundAProc := Process32Next(SsHandle, lppe);   
  end;   
  CloseHandle(SsHandle);   
end;   
   
function EnabledDebugPrivilege(const bEnabled: Boolean): Boolean;   
var   
  hToken: THandle;   
  tp: TOKEN_PRIVILEGES;   
  a: DWORD;   
const   
  SE_DEBUG_NAME = 'SeDebugPrivilege';   
begin   
  Result := False;   
  if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken)) then   
  begin   
    tp.PrivilegeCount := 1;   
    LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);   
    if bEnabled then   
      tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED   
    else   
      tp.Privileges[0].Attributes := 0;   
    a := 0;   
    AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, a);   
    Result := GetLastError = ERROR_SUCCESS;   
    CloseHandle(hToken);   
  end;   
end;   
   
function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD = 0): DWORD;   
var   
  hRemoteProcess: THandle;   
  dwRemoteProcessId: DWORD;   
  cb: DWORD;   
  pszLibFileRemote: Pointer;   
  iReturnCode: Boolean;   
  TempVar: DWORD;   
  pfnStartAddr: TFNThreadStartRoutine;   
  pszLibAFilename: PwideChar;   
begin   
  Result := 0;
  EnabledDebugPrivilege(True);
  Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);   
  StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 + 1);   
  if PID > 0 then   
     dwRemoteProcessID := PID   
  else   
     FindAProcess(HostFile, False, dwRemoteProcessID);   
  hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程}   
      PROCESS_VM_OPERATION + {允许远程VM操作}   
      PROCESS_VM_WRITE, {允许远程VM写}   
      FALSE, dwRemoteProcessId);   
  cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);   
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT, PAGE_READWRITE));   
  TempVar := 0;   
  iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, cb, TempVar);   
  if iReturnCode then   
  begin
    pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');
    TempVar := 0;
    Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);
  end;
  Freemem(pszLibAFilename);
end;

procedure TtoDllFrm.Button1Click(Sender: TObject);
begin
TRY
  AttachToProcess('Explorer.exe', extractfilepath(paramstr(0))+'sysinfo.dll');
//其中Project2.dll是想要注入到Explorer.EXE的进程,Explorer.exe也可以是别的进程.
  FInally
   //if EnableHideHook then
  //CLOSE;
   end;
end;

TOP

加载完DLL后母程序就自动关闭,然后当用户使用热键的时候就调出DLL的窗体,不知道我说明白没?现在就不知道咋弄,这个热键,我弄了几个没相应,窗体不出来

TOP

'sysinfo.dll'不知道如何写,才能相应用户的热键,调出DLL窗体供用户操作

TOP

写 explorer bho

TOP

又是个不学好的。
单如暴雨哗哗下
刀似长江滚滚来
横批:韩信点兵

TOP

引用:
原帖由 wandou 于 2008-3-9 14:23 发表
又是个不学好的。
一说DLL注入就是不学好,也不清楚背景,就乱说话

TOP

小心杀毒软件盯上你
菩提本无树,明镜亦非台;本来无一物,何处染尘埃?

TOP

引用:
原帖由 4980 于 2008-3-9 14:31 发表

一说DLL注入就是不学好,也不清楚背景,就乱说话
可能你是例外吧。有门不走,偏偏走窗户。行,算你有理。
单如暴雨哗哗下
刀似长江滚滚来
横批:韩信点兵

TOP

引用:
原帖由 wandou 于 2008-3-9 16:47 发表

可能你是例外吧。有门不走,偏偏走窗户。行,算你有理。
很明显。

TOP

是热键没响应,还是响应了,但窗体无法显示出来?

TOP

 19 12
发新话题