![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как загрузить программу из resource в память и запустить её отту
Алексей222 © (2006-08-20 01:58:00)Как загрузить программу из resource в память и запустить её оттуда.
Есть exe, в нем вшит модуль обновления, его необходимо вытащить из файла, загрузить в память и запустить его оттуда.
hExe := LoadLibrary(pansichar(application.exename));
hRes := FindResource(hExe, 'update.exe', 'update');
hResLoad := LoadResource(hExe, hRes);
lpResLock := LockResource(hResLoad);
?
Leonid Troyanovsky (2006-08-21 18:48:00) [1]
> Сергей М. © (21.08.06 11:31) [7]
> Да и к оригинальному вопросу это не имеет отношения.
Некоторое, все же, имеет.
Скажем, навеяно by Gary Nebbett.
--
Regards, LVT.
Сергей М. (2006-08-21 11:31:00) [2]
> Алексей222 (20.08.06 10:19) [3]
>
> Почему вот это дело не пашет?
В общем случае это и не обязано "пахать".
Да и к оригинальному вопросу это не имеет отношения.
Leonid Troyanovsky (2006-08-20 14:19:00) [3]
> Алексей222 (20.08.06 10:19) [3]
> Почему вот это дело не пашет?
Найди 10 отличий.
http://groups.google.com/group/fido7.ru.delphi/msg/dbf6083b8b7fbee4
--
Regards, LVT.
Ketmar (2006-08-20 13:03:00) [4]> [3] Алексей222 (20.08.06 10:19)
аднака. вот и видно, что на уровне первого года. ну зачем пытаться загрузить PE руками? а если уж пытаешься, так хоть бы relocs обрабатывал...
atruhin (2006-08-20 10:29:00) [5]> Да какие уж там хакерские
Не вникал в код. Но это методы не документированные Microsoft. Т.е. например могут не работать в Viste. А чем тебя не устраивает простой вариант, сохранить файл на диск и запустить?
Алексей222 (2006-08-20 10:19:00) [6]Почему вот это дело не пашет? rxtypes в каталоге resxplorer в делфи который встроен.
program Project1;
uses
Windows,
sysutils,
rxtypes in 'Rxtypes.pas';
{$R ResX.res}
Var
nb, i: Cardinal;
function ZwUnmapViewOfSection(SectionHandle: THandle;
p: Pointer): DWord; stdcall; external 'ntdll.dll';
function protect(characteristics: ULONG): ULONG;
const mapping: array [0..7] of ULONG =
( PAGE_NOACCESS, PAGE_EXECUTE, PAGE_READONLY, PAGE_EXECUTE_READ,
PAGE_READWRITE, PAGE_EXECUTE_READWRITE, PAGE_READWRITE,
PAGE_EXECUTE_READWRITE);
begin
Result := mapping[characteristics shr 29];
end;
var
pi: TProcessInformation;
si: TStartupInfo;
x, p, q: Pointer;
nt: PIMAGE_NT_HEADERS;
context: TContext;
sect: PIMAGE_SECTION_HEADER;
begin
si.cb := SizeOf(si);
CreateProcess(nil, 'update_m.exe', nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, si, pi);
context.ContextFlags := CONTEXT_INTEGER;
GetThreadContext(pi.hThread, context);
ReadProcessMemory(pi.hProcess,
PCHAR(context.ebx) + 8,
@x, sizeof (x),
nb
);
ZwUnmapViewOfSection(pi.hProcess, x);
p := LockResource(LoadResource(Hinstance, FindResource(Hinstance, 'update.exe', 'update')));
if p = nil then exit;
nt := PIMAGE_NT_HEADERS(PCHAR(p) + PIMAGE_DOS_HEADER(p).e_lfanew);
q := VirtualAllocEx( pi.hProcess,
Pointer(nt.OptionalHeader.ImageBase),
nt.OptionalHeader.SizeOfImage,
MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(pi.hProcess, q, p, nt.OptionalHeader.SizeOfHeaders, nb);
sect := PIMAGE_SECTION_HEADER(nt);
Inc(PIMAGE_NT_HEADERS(sect));
for I := 0 to nt.FileHeader.NumberOfSections - 1 do
begin
WriteProcessMemory(pi.hProcess,
PCHAR(q) + sect.VirtualAddress,
PCHAR(p) + sect.PointerToRawData,
sect.SizeOfRawData, nb);
VirtualProtectEx( pi.hProcess,
PCHAR(q) + sect.VirtualAddress,
sect.SizeOfRawData,
protect(sect.Characteristics),
@x);
Inc(sect);
end;
WriteProcessMemory(pi.hProcess, PCHAR(context.Ebx) + 8, @q, sizeof(q), nb);
context.Eax := ULONG(q) + nt.OptionalHeader.AddressOfEntryPoint;
SetThreadContext(pi.hThread, context);
ResumeThread(pi.hThread);
end.
Алексей222 (2006-08-20 09:53:00) [7]Да какие уж там хакерские, все проще простого, на уровне первого года изучения delphi, если с испоьзованием rxtypes или программирования .net. А без этого как сделать.
atruhin (2006-08-20 08:21:00) [8]Уже обсуждалось, документированно никак, есть хакерские методы, но работоспособность не гарантированна.