Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2010, 16:36   #1
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
Вопрос Запуск программы из памяти

Делаю запуск программы вотаким спосабом, но почемута мая программа выдаёт ошибку, попробывал на калькуляторе оказалось что при таком запуске уберается всё офармление и не открывается справка


res.rc:
Код:
 
EXE RCDATA "mem.exe"
project1.dpr:
Код:
 
program project1; 

uses 
Windows, 
rxtypes; 

{$R res.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.
как я понял моя прога которая в ресурсе хочет потреблять какойта ресурс а неможит поэтаму вылазиет ошибка и вырубается

Для чего я это хочу зделать-если всё получится програмка запустится то я хочу сверху наклась интерфейс с вводом ключа к программе после чего запускать программу из памяти


Кто подскажет почему этот способ плохо работате !? и подскажите другой
jone вне форума Ответить с цитированием
Старый 12.03.2010, 16:47   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

>>> тырк...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.03.2010, 17:23   #3
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

всё точно также прога мая не запускается
и калькулятор также без windows интерфейса отрывается



может ещё есть вариатны?

как распакавать из ресурса и запустить в темпе потом удалить?

Последний раз редактировалось jone; 12.03.2010 в 17:26.
jone вне форума Ответить с цитированием
Старый 12.03.2010, 17:35   #4
Blourid
Форумчанин
 
Аватар для Blourid
 
Регистрация: 09.03.2010
Сообщений: 138
По умолчанию

Ужасно оформленный код. Ты хоть сам потом разбираешься в своем коде?!
Здесь все стили перемешены, от Венгерской до сamel не говорю уже о Pascal.

а вот это я никак не понял что ты имеешь в виду сверху
Цитата:
Сообщение от jone Посмотреть сообщение
я хочу сверху наклась интерфейс с вводом ключа к программе после чего запускать программу из памяти
Вчера

Последний раз редактировалось Blourid; 12.03.2010 в 17:39.
Blourid вне форума Ответить с цитированием
Старый 12.03.2010, 17:42   #5
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Чтобы мая программа запускалось первой к примеру prog.exe
в ней была ещё одна программа в ресурсах или ещё гденибуть,
После запуска prog.exe вылазил код введите пороль и логин,если всё верна prog.exe запускал бы программу из нутри

вот какраз запуск изнутри меня и волнует всё остальное уже делал не раз
jone вне форума Ответить с цитированием
Старый 12.03.2010, 17:53   #6
Blourid
Форумчанин
 
Аватар для Blourid
 
Регистрация: 09.03.2010
Сообщений: 138
По умолчанию

Хоть с трудом но все же понял тебя) Так, ты хочешь ограничить запуск программы и запускать только после ввода ключа, иначе программа выдавая сообщение о неверном пароле тут же закрывалась?!
По моему так.
Есть такие утилиты для шароварных программ который защищает не только запуск но и сжимает файл упаковщиком.
Погугли на тему ExeCryptor, ExePassword и т.д.
На CrackLab.ru таких программ до фига.

кстати что значит Запуск из внутри? ты что надумал из тело программы генерить екзешники при вводе пароля ))
Вчера

Последний раз редактировалось Blourid; 12.03.2010 в 17:56.
Blourid вне форума Ответить с цитированием
Старый 12.03.2010, 18:01   #7
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

Про эти программы я знаю но там обычный пороль а я делаю пороль с привязкой к железу ...
я нашёл выход только мне нужно ring0
неподскажешь где скачать можна? найти немагу
jone вне форума Ответить с цитированием
Старый 12.03.2010, 18:03   #8
Blourid
Форумчанин
 
Аватар для Blourid
 
Регистрация: 09.03.2010
Сообщений: 138
По умолчанию

Что??? RINQ0 )))) Улыбнул ))
Вчера
Blourid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск программы из оперативной памяти? G&R Win Api 2 22.12.2008 21:26
Запуск программы Vladya Помощь студентам 4 17.11.2008 11:38
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33
Запуск программы Egych Общие вопросы Delphi 4 04.05.2007 09:46