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

Вниз

Как загрузить программу из resource в память и запустить её отту   Найти похожие ветки 

 
Алексей222   (2006-08-20 01:58) [0]

Как загрузить программу из resource  в память и запустить её оттуда.

Есть exe, в нем вшит модуль обновления, его необходимо вытащить из файла, загрузить в память и запустить его оттуда.

hExe := LoadLibrary(pansichar(application.exename));
hRes := FindResource(hExe, "update.exe", "update");
hResLoad := LoadResource(hExe, hRes);
lpResLock := LockResource(hResLoad);

?


 
atruhin ©   (2006-08-20 08:21) [1]

Уже обсуждалось, документированно никак, есть хакерские методы, но работоспособность не гарантированна.


 
Алексей222   (2006-08-20 09:53) [2]

Да какие уж там хакерские, все проще простого, на уровне первого года изучения delphi, если с испоьзованием rxtypes или программирования .net. А без этого как сделать.


 
Алексей222   (2006-08-20 10:19) [3]

Почему вот это дело не пашет? 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.


 
atruhin ©   (2006-08-20 10:29) [4]

> Да какие уж там хакерские

Не вникал в код. Но это методы не документированные Microsoft. Т.е. например могут не работать в Viste. А чем тебя не устраивает простой вариант, сохранить файл на диск и запустить?


 
Ketmar ©   (2006-08-20 13:03) [5]

> [3] Алексей222   (20.08.06 10:19)
аднака. вот и видно, что на уровне первого года. ну зачем пытаться загрузить PE руками? а если уж пытаешься, так хоть бы relocs обрабатывал...


 
Leonid Troyanovsky ©   (2006-08-20 14:19) [6]


> Алексей222   (20.08.06 10:19) [3]

> Почему вот это дело не пашет?


Найди 10 отличий.

http://groups.google.com/group/fido7.ru.delphi/msg/dbf6083b8b7fbee4

--
Regards, LVT.


 
Сергей М. ©   (2006-08-21 11:31) [7]


> Алексей222   (20.08.06 10:19) [3]
>
> Почему вот это дело не пашет?


В общем случае это и не обязано "пахать".
Да и к оригинальному вопросу это не имеет отношения.


 
Leonid Troyanovsky ©   (2006-08-21 18:48) [8]


> Сергей М. ©   (21.08.06 11:31) [7]

> Да и к оригинальному вопросу это не имеет отношения.


Некоторое, все же, имеет.
Скажем, навеяно by Gary Nebbett.

--
Regards, LVT.



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

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

Наверх




Память: 0.47 MB
Время: 0.041 c
3-1161084645
safo
2006-10-17 15:30
2006.12.31
Как трассировать sql-запросы к ODBC?


15-1166047775
isasa
2006-12-14 01:09
2006.12.31
CreateObject в VBA Excell


15-1165600933
Piter
2006-12-08 21:02
2006.12.31
Использование "пустых" try .. except


2-1165536388
TImageList
2006-12-08 03:06
2006.12.31
Как узнать цвет фона у картинок в TImageList


15-1165089940
Cyrax
2006-12-02 23:05
2006.12.31
Java - это же не Yava...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский