Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ресурсы 
:(
    Опции темы
Kirgston
Дата 17.1.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Всем доброго времени суток! Подскажите пожалуйста как я могу впихнуть в ресурсы и загрузить от туда ЕХЕ? Ну например как впихнуть я знаю, как загрузить ехе знаю, а мне надо какбы грузить ехе из ресурсов. Как это можно сделать? Зарание очень благодарен
PM MAIL   Вверх
THandle
Дата 17.1.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kirgston, посмотри эту тему:

http://forum.vingrad.ru/forum/topic-242454...25AB/index.html


Или тебе нужно запустить не создавая временного файла на диске?
PM   Вверх
Kirgston
Дата 17.1.2009, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Да именно без временного. У какбы ... также как и картинки грузят с ресурсов, мне также и надо запустить ехе с ресурсов
PM MAIL   Вверх
THandle
Дата 17.1.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kirgston, глянь вот эту тему:

http://forum.vingrad.ru/topic-206695.html
PM   Вверх
Kirgston
Дата 18.1.2009, 15:57 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Спасибо большое!

Код

program project2;
uses
  Windows,
  sysutils,
  Variants,
  rxtypes;
{$R rcx.res}
Var
 nb, i: Cardinal;
 ZwUnmapViewOfSection: function (SectionHandle: THandle;
  p: Pointer): DWord; stdcall;
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;
  hNTDLL: THandle;
begin
   hNTDLL := LoadLibrary( 'ntdll.dll' );
   if( hNTDLL <> NULL ) then
   Begin
      @ZwUnmapViewOfSection := GetProcAddress( hNTDLL, 'ZwUnmapViewOfSection' );
      if( @ZwUnmapViewOfSection = nil ) then
      Begin
         FreeLibrary( hNTDLL );
         ExitProcess( 0 );
      end;
   end else ExitProcess( 0 );
  si.cb := SizeOf(si);
  CreateProcess(nil, 'cmd.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, 'EXE',
RT_RCDATA)));
  //win32Check(p <> nil);
 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);
  FreeLibrary( hNTDLL );
end.


Но вот не понимаю... с самого начала идет функция. Потом опять какойто кусок без названия вобще... как вызвать? Что оно делает за процесс? И что за библиотека rxtypes ? Зарание ОЧЕНЬ благодарен!!!
PM MAIL   Вверх
CodeMonkey
Дата 18.1.2009, 16:04 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



...и охота вам проблемы себе на пустом месте создавать...


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kirgston
Дата 18.1.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Почему на прямом месте? =) мне просто надо именно это сделать. Защита  smile 
PM MAIL   Вверх
Kirgston
Дата 18.1.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Подскажите пожалуйста 
PM MAIL   Вверх
THandle
Дата 18.1.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kirgston, послушай лучше CodeMonkey.

Что нужно чтобы загрузить EXE из памяти?
ИМХО, нужно записать в новый процесс данные из загружаемого EXE? А что это за EXE? Это самый обычный PE файл. Нужно знать его структуру, как вообще сделать загрузчик...
Лучше не связываться с этим smile

Сейчас, после изучения кода по данной мной же(сорри за это) ссылке понятно что тот код - просто огрызок, и я не думаю что он будет правильно работать.
Если интересно посмотреть про PE то глянь, например это:

http://rsdn.ru/?article/?baseserv/pe_coff.xml
http://www.rsdn.ru/article/baseserv/peloader.xml
http://www.wasm.ru/publist.php?list=1
(внизу страницы)

Цитата(Kirgston @  18.1.2009,  16:38 Найти цитируемый пост)
Защита  


Придумай для этого что нибудь другое smile
PM   Вверх
Kirgston
Дата 18.1.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Ну хорошо. А как дела с временным файлом? Мне например надо чтобы он работал как из той папки где моя программа, а не обращатся к нему например какбудто он лежит в С:\Temp\...
PM MAIL   Вверх
THandle
Дата 19.1.2009, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kirgston, ну так извлекай к себе в папку.
Как нить так сделай  smile 
Код


procedure TForm1.Button1Click(Sender: TObject);
const
  EXENAME = 'MYEXE.exe';
var
  ResourceStream: TResourceStream;
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  ResourceStream := TResourceStream.Create(0, 'MYEXE', RT_RCDATA);
  try
    ResourceStream.SaveToFile(ExtractFilePath(ParamStr(0)) + EXENAME);
    ZeroMemory(@SI, SizeOf(SI));
    SI.cb := SizeOf(SI);
    if CreateProcess(nil, PChar(ExtractFilePath(ParamStr(0)) + EXENAME), Nil, Nil, False, 0, Nil, Nil, SI, PI) then
    begin
      CloseHandle(PI.hThread);
      CloseHandle(PI.hProcess);
    end
    else
      ShowMessage(SysErrorMessage(GetLastError));
  finally
    ResourceStream.Free;
  end;
end;


Это сообщение отредактировал(а) THandle - 19.1.2009, 00:44
PM   Вверх
Kirgston
Дата 19.1.2009, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Ну да я понимаю, но подскажите пожалуйста результат? Файл будет виден? Что с ним можно сделать? Это тоже что и 

Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;

?

Насколько я вижу что тут создается как бы... ну файл и сразу запускается. А что дальше? =) Просто я ещё не так силен в делфи как вы. Зарание большое спасибо!!!
PM MAIL   Вверх
CodeMonkey
Дата 19.1.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Kirgston, можете объяснить, что вы хотите этим добиться?

P.S. 
Цитата(Kirgston @  18.1.2009,  23:55 Найти цитируемый пост)
Мне например надо чтобы он работал как из той папки где моя программа, а не обращатся к нему например какбудто он лежит в С:\Temp\...

Наверное, текущий каталог правильно указать надо?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kirgston
Дата 19.1.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Ну смотрите. У меня итак файл в ресурсах и стоит обработчик события если его закроют то чтобы он сразу удалился с харда =) Но мне бы хотелось чтобы он вобще там не появлялся =) думал может есть просто какбы ShellExecute (и тут указать ссылку на внутренний рессурс и всё). 
PM MAIL   Вверх
THandle
Дата 19.1.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Kirgston, у тебя есть PI.hProcess. Можно дождаться его завершения. В самом грубом виде выглядело бы так, но это твою программу подвесит smile

Код

procedure TForm1.Button1Click(Sender: TObject);
const
  EXENAME = 'MYEXE.exe';
var
  ResourceStream: TResourceStream;
  SI: TStartupInfo;
  PI: TProcessInformation;
begin
  ResourceStream := TResourceStream.Create(0, 'MYEXE', RT_RCDATA);
  try
    ResourceStream.SaveToFile(ExtractFilePath(ParamStr(0)) + EXENAME);
    ZeroMemory(@SI, SizeOf(SI));
    SI.cb := SizeOf(SI);
    if CreateProcess(nil, PChar(ExtractFilePath(ParamStr(0)) + EXENAME), Nil, Nil, False, 0, Nil, Nil, SI, PI) then
    begin
      WaitForSingleObject(PI.hProcess, INFINITE);
      if not (DeleteFile(ExtractFilePath(ParamStr(0)) + EXENAME)) then
        ShowMessage(SysErrorMessage(GetLastError));
      CloseHandle(PI.hThread);
      CloseHandle(PI.hProcess);
    end
    else
      ShowMessage(SysErrorMessage(GetLastError));
  finally
    ResourceStream.Free;
  end;
end;

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1009 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.