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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск из памяти 
:(
    Опции темы
Dimannn
Дата 21.4.2005, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

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



Пожно ли запустить экзешник из оперативки, на не с винда?
(Используя MapVievoffile)


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
_hunter
Дата 22.4.2005, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



можно. но только на нт.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Dimannn
Дата 25.4.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

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



Вопрос 1: 2000 = NT;
Вопрос 2: Если да, то как


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
_hunter
Дата 25.4.2005, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



если ты это на делфях собираешся реализовывать -- должен огорчить: мне не удалось такое даже под билдером ( только в студии ). так что о делфях можеш забыть...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Yanis
Дата 25.4.2005, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(_hunter @ 25.4.2005, 23:03)
если ты это на делфях собираешся реализовывать -- должен огорчить: мне не удалось такое даже под билдером  ( только в студии ). так что о делфях можеш забыть...

Может всё таки покажешь как ты это сделал? Очень интересно.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rouse_
Дата 26.4.2005, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исполняемый файл помещается ресуром в приложение, и из приложения выполяется примерно вот такой код:

Код

program project2;

uses
  Windows,
  sysutils,
  rxtypes in 'Rxtypes.pas';

{$R rcx.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, '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)));

 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.


Как можно увидеть из кода, запуск приложения осуществляет CMD.EXE и имя процесса будет также CMD.EXE
Но это самый простой способ...


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
wadim
Дата 30.12.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



Обрадовался найдя этот пример!
Ещё более обрадовался, когда реализовал его, переведя на другой язык (Clarion 55)
ОДНАКО!
Из 30 тачек на двух - не работает!
А именно: вызывает перезагрузку компа!
Ничего не понимаю! Как избавиться от перезгруза ?
Может быть, добрый автор подскажет ?
PM MAIL   Вверх
Romikgy
Дата 30.12.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



а операционки на них какие стоят?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
wadim
Дата 30.12.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



XP - SP2
PM MAIL   Вверх
CodeMonkey
Дата 30.12.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



PAGE_EXECUTE_READWRITE + DEP - ничё такого быть не может?


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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



wadim, попробуйте временно отключить антивирусы.

Добавлено через 4 минуты и 32 секунды
  Еще вариант попробуйте удаленную отладку на машинах где падает винда и узнайте какой вызов приводить к таким последствиям. Отключите автоматическую перезагрузку при отказе системы. Посмотрите в синем экране смерти виновника.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
wadim
Дата 30.12.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



1. Падает т.е. шустренько так ребутится ничего не говоря после размораживания потока
 ResumeThread(pi.hThread); (ДА, а в народившемся потоке стоит СТОП, до которого дело не доходит)
2. выяснял просто - расстановкой стопов в исходнике.
3. правильно работает на тачках с WinXP (Pro, Home), Win2K
4. первоначально баг проявился на AMD-шнике, думал - такая локализация и рыть в сторону различия в структуре CONTEXT,
    а сегодня уяснил, что и на INTEL тож багится
5. ща попробовать увидеть синий экран не могу, завтра - на работе.
6. то ж касается и DEP (кстати, не помню где глянуть - в boot.ini ?)
7. антивир стоит - NOD - он не мешает. каспер (к слову) - тот предупреждает, якобы, подозревает rootkit.
8. мысля: не может ли быть трабла со стеком?
    ведь в приведённом примере стек никак не трогается и запускаемому образу достаётся стек от CMD

Это сообщение отредактировал(а) wadim - 30.12.2008, 21:19
PM MAIL   Вверх
dumb
Дата 31.12.2008, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(wadim @  30.12.2008,  22:14 Найти цитируемый пост)
Падает т.е. шустренько так ребутится ничего не говоря

автоматическую перезагрузку(свойства системы-дополнительно-загрузка и восстановление-параметры) убери и смотри код bsod'а.

как бы там ни было, код в user-mode не должен приводить к таким фатальным последствиям, так что скорее всего вина на каком-либо ПО, имеющем kernel-составляющую - тот же nod, например.
PM MAIL   Вверх
wadim
Дата 31.12.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



1) Был снесён напрочь NOD.
2) DEP стоит по умолчанию - включено только для основных служб.
3) Был отключен авторебут.
4) синий экран смерти не показал ничего, кроме: 
STOP:0x0000008E (0xC0000005, 0x80529CDB, 0xB8A0F9FC, 0x00000000)
5) в дампе как искать виновника - не знаю

кто-нибудь может подсказать ?

Это сообщение отредактировал(а) wadim - 31.12.2008, 13:00
PM MAIL   Вверх
Alexeis
Дата 31.12.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



wadim, может так случиться, что на этом методе можно ставить крест. Насколько я помню одна из используемых в ней функций не документирована, потому MS оставляет за собой право менять такие функции без уведомления. Дата написания кода не позже начала 2005 го года, с тех пор могло многое поменяться, или же реализация зависит от железа.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
wadim
Дата 31.12.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



А вообще это фокус (с запуском из памяти/ресурса) мне потребовался только для одной цели:
чтобы пользователь не снимал через диспетчер задач программу.
То есть, есть два EXE-модуля, один из которых основное приложение (для связи). В нём есть поток, который контролирует наличие в памяти второго EXE-модуля (и запускает при отсутствии). А второй EXE-модуль только и делает, что контролирует наличие в памяти первого EXE-модуля (и запускает при отсутствии).
Всё бы хорошо, но TaskManager позволяет снимать дерево процессов. И в этом случае они оба умирают.
Хотел организовать запуск первого EXE-модуля из второго (и наоборот) через маленькую прокладку (из памяти), а не напрямую, чтобы TaskManager потерял информацию о том, кто чьим родителем является, и не сумел снять оба процесса "как дерево".

Может быть для этого есть иной путь?

Добавлено @ 13:25
Цитата(Alexeis @  31.12.2008,  13:07 Найти цитируемый пост)
или же реализация зависит от железа

думаю - не от железа. вот почему:
один из компов, где валится, имеет проц: Intel: 586 - Family 15 Model 2 Stepping 9.  (памяти 512, 2792мГц) - XP
на 3-х других компах с таким же ЦПУ - работает (количество памяти на них разное: 64, 256, 640) /где 64 - Win2K, на двух других XP/,
(1800мГц, 2000мГц, 2000мГц)


второй, где не работает: AMD Sempron: 586 - Family 15 Model 44 Stepping 2. (памяти 512, 1800МГц)


Это сообщение отредактировал(а) wadim - 31.12.2008, 13:26
PM MAIL   Вверх
dumb
Дата 31.12.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(wadim @  31.12.2008,  13:10 Найти цитируемый пост)
Хотел организовать запуск первого EXE-модуля из второго (и наоборот) через маленькую прокладку (из памяти), а не напрямую, чтобы TaskManager потерял информацию о том, кто чьим родителем является, и не сумел снять оба процесса "как дерево".
запускай "партнера" через .bat-файл(start bla-bla).

Alexeis, независимо от документированности, этот код не должен валить "чистую"(нет потенциально глюкавого ПО с kernel-mode составляющими) систему. иначе это просто мега-баг.

wadim, варианта два: если эти бсоды случаются только в момент запуска твоего приложения, то это баг защитного/руткитного драйвера, который похукал какие-либо из вызываемых в этом куске функций и одурел(не смог обработать) от "неправильного" запуска.
если же эти бсоды бывают и в другое время, то надо прогнать тесты железа - мемтесты всякие, да эвересты...
PM MAIL   Вверх
wadim
Дата 31.12.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



НЕТ, падений системы в другое время замечено не было.
А последний эксперимент был поставлен после полной деинсталляции антивиря.
Не может ли влиять настройка стека? - Ведь в приведённом коде указатель стека от CMD не меняется на тот, который хотел бы иметь ресурс EXE-файла. 
Может быть он в некоторых случаях указывает на недоступную память? 
Или, может быть мой компилятор (а это Clarion 55), где-то ещё у себя в теле имеет какую-либо зависимость от указателя стека?

(Насколько я знаю, он /Clarion/ организует псевдо-потоки, а не потоки Windows, по принципу примерно как в Windows-98. Кстати программа рассчитана на работу и в среде Win-98, но тогда она не использует многого, в том числе, обсуждаемого механизма. Т.е., под Win-98 проблема не стоит)

PM MAIL   Вверх
wadim
Дата 31.12.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



Цитата(dumb @  31.12.2008,  14:07 Найти цитируемый пост)
запускай "партнера" через .bat-файл(start bla-bla).

Это предложение, полагаю, убогое. Нужно записать на диск bat-файл, 2) стартовать его, например, через CreateProcess, 3) удалить его с диска.
Скорее альтернативой может быть: 1) записать на диск запускающую программу-прокладку, 2) стартовать её через CreateProcess, 3) удалить её с диска.
Но хотелось-то - не оставлять следов на диске! Зачем излишество писания/читания на/с диск(а) ?

PM MAIL   Вверх
Alexeis
Дата 31.12.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Можно "присоседиться" к чужому процессу (выделить память VirtualAllocEx), создать у него поток, который будет вести контроль. Желательно присоседиться к критичному для системы процессу, чтобы его нельзя было выгрузить. Вот только это тоже вирусоподобная деятельность. Правильнее всего сделать драйвер режима ядра, который будет мониторить. Это не попадает под вирусоподобную деятельность. Такой драйвер не выгрузить из юзермода.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
wadim
Дата 31.12.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 19.10.2006
Где: г.Тамбов

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



Alexeis, я пробовал связаться с тобой через icq. Это возможно, или ты всех посылаешь, кто не в твоём списке ?

Дело в том, что у рассматриваемого программного средства предусматривается возможность обновления. на данный момент 53 версия. Два EXE-модуля обновляются нормально. А смогу ли я обновлять ПО, если одна из его составляющих будет драйвером ?

И ещё: некоторые пользователи имеют права админа, а некоторые нет !

Это сообщение отредактировал(а) wadim - 31.12.2008, 16:49
PM MAIL   Вверх
Riply
Дата 1.1.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 21
Всего: 32



IMHO, ошибка заключается в самом алгоритме запуска.
Например, один из способов получения "имени" процесса
основан на работе с PEPROCESS.PSECTION_OBJECT.PSEGMENT.PCONTROL_AREA.PFILE_OBJECT
Каждая из структур в этой цепочке имеет кучу полей, 
которые должны быть корректно заполнены (или, по крайней мере, "обнилены").
Т.к. это не делается, то попытка работать с любым полем любой из этих 
подструктур (например, при аудите), может привести к BSOD. 
Что в общем-то и наблюдается smile

Но самое главное другое: все это едрунда по сравнению с Новым Годом !
А посему, всех поздравляю ! smile))

P.S.
 Первая часть поста написана искючительно для того, чтобы его не удалили
 как злостный флуд smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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