Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Как прилепить 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.031 c
3-1093964749
Morrison
2004-08-31 19:05
2004.09.26
Как изменить структуру таблицы (програмно)?


4-1092329531
Dextor
2004-08-12 20:52
2004.09.26
Текст, активного окна.


3-1093420285
andrey__
2004-08-25 11:51
2004.09.26
TADOQuery редактир. уже изменённой записи!


8-1088624004
Gorilka
2004-06-30 23:33
2004.09.26
Из *.mid в *.mp3 или *.cda


8-1088803416
Pa5ha
2004-07-03 01:23
2004.09.26
Самопальный рендер на канве





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский