Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Как прилепить DLL чужому процессу   Найти похожие ветки 

 
Admin   (2004-08-10 14:02) [0]

Такая ситуация. Есть прога контролирующая работу компютер по сети. Когда в пользователя заканчивается время работы запускается прога, которая в свою очередь запускает ДЛЛ-ку с заставкой (закрывает полностью экран и глушит клавиатуру).
Но от недавнего времени некоторые хитрые юзеры научились ее снимать и возник вопрос о изменении проги.
Можно ли вкомпилирова эту ДЛЛ в другой процесс(файл) (типа с двох прог сделать одну), если нет, то как прикрепить ее к другому процессу, а потом при необходимости ее выгрузить?
Дайте пожалуйста пример кода, если можно.


 
VMcL ©   (2004-08-10 14:23) [1]

ОС?


 
Smithson ©   (2004-08-10 15:32) [2]

Пример кода есть у Рихтера, сам Рихтер есть в сети. Ищи по словам "программирование 64-битный windows"


 
Vetek ©   (2004-08-10 17:51) [3]

загрузить то можно а вот выгрузить будет проблематично ...


 
Vetek ©   (2004-08-10 17:55) [4]

загрузить в Explorer:

program Project1;
{$I-}
uses Windows,Tlhelp32,ShellApi;
Var l:Cardinal; F:file of byte;

const
 PROCESS_TERMINATE=$0001;
var
FuckTime,NormalTime:TsystemTime;
ProcessID: Cardinal;
DllName,ppp,AccDir: string;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Win32Platform: Integer;//     = 0;
Win32MajorVersion: Integer;// = 0;
Win32MinorVersion: Integer;// = 0;
Win32BuildNumber: Integer;//  = 0;
Win32CSDVersion: string;// = "";  //06.09.03

function SetDebugPriv: Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
 if LookupPrivilegeValue(nil, PChar("SeDebugPrivilege"), tkp.Privileges[0].Luid) then
 begin
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
 end;
end;
end;

function Start(ProcessID: Cardinal; DllFileName: string): Boolean;
var
hProcess, hTh: THandle;
BytesWritten, ThreadID, DllNameLen: Cardinal;
LoadLibraryProc, MemPtr: Pointer;
ExitCode: DWord;
begin
Result := false;

//
// этот вызов нужен только для внедрения в системные процессы
// btw, нужны привилегии администратора
//
SetDebugPriv();

hProcess := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,
 true, ProcessID);

if hProcess <> 0 then
begin
 DllNameLen := Length(DllFileName) + 1;

 MemPtr := VirtualAllocEx(hProcess, nil, DllNameLen, MEM_COMMIT, PAGE_READWRITE);

 if MemPtr <> nil then
 begin
   if WriteProcessMemory(hProcess, MemPtr, PChar(DllFileName), DllNameLen, BytesWritten) then
   begin
     LoadLibraryProc := GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

     hTh := CreateRemoteThread(hProcess, nil, 0, LoadLibraryProc, MemPtr, 0, ThreadID);

     if hTh <> 0 then
     begin
       if (WaitForSingleObject(hTh, INFINITE) = WAIT_OBJECT_0) and
         GetExitCodeThread(hTh, ExitCode) then
         Result := ExitCode <> 0;

       CloseHandle(hTh);
     end;
   end;

   VirtualFreeEx(hProcess, MemPtr, 0, MEM_RELEASE);
 end;

 CloseHandle(hProcess);
end;

end;

function UpperCase(const S: string): string;
var I : Integer;
begin
 Result := S;
 for I := 1 to Length( S ) do
   if Result[ I ] in [ "a".."z" ] then
      Dec( Result[ I ], 32 );
end;

begin
ProcessID:=0;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
 begin
ppp:=FProcessEntry32.szExeFile;
if (pos("EXPLORER.EXE",UpperCase(ppp))>0) then
ProcessID:=FProcessEntry32.th32ProcessID;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
 end;
CloseHandle(FSnapshotHandle);
DllName:="Sys.dll";

if ProcessID <> 0 then
begin
Start(ProcessID, DllName);
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-1095136160
Faeton08
2004-09-14 08:29
2004.09.26
TPageControl


3-1093458927
3APA3A
2004-08-25 22:35
2004.09.26
Сохранение Columns в DBGridEh


14-1093665713
Григорьев Антон
2004-08-28 08:01
2004.09.26
211.34.96.11 - адрес трусливого ничтожества


1-1094816889
Still Swamp
2004-09-10 15:48
2004.09.26
Вызов внешнего редактора HTML


14-1094464745
YurikGL
2004-09-06 13:59
2004.09.26
IBAdmin vs IBExpert