Подскажите пожалуйста
Очень интересует как из своей программы загрузить в память другую программу и передать ей управление?
ShellExecute
ShellExecute
Я наверно не совсем внятно объяснил свою мысль. Я хочу слить две свои программы: одну за другой. Получается один запускной файл.
При старте первая программа подготавливает место или сразу передает управление на вторую программу не сохраняя ее на диск.
Такое возможно? Обязательно использовать поток?
если у тебя нет исходника второй проги,то надо извращаться.
например, мы когда-то прикалывались тем, что просто втупую склеивали два exe-шника в один и запускали его - прокатывало, запускалась первая прога,когда из нее выходили, запускалась вторая.правда это были небольшие программки откомпилированные с С++ под UNIX...
а вообще, мне кажется вторую прогу можно засунуть в ресурсы первой, а потом в памяти развернуть и запустить... но сам таким еще не промышлял...
например, мы когда-то прикалывались тем, что просто втупую склеивали два exe-шника в один и запускали его - прокатывало, запускалась первая прога,когда из нее выходили, запускалась вторая.
А Деда Мороза, когда прикалыцвались, не видели?
Хорошая у вас трава... забористая.
правда это были небольшие программки откомпилированные с С++ под UNIX...
А ну тогда, конечно... ведь Юникс - это Вселенная, в нем все возможно...
Особенно с такой травой...
а вообще, мне кажется вторую прогу можно засунуть в ресурсы первой, а потом в памяти развернуть и запустить... но сам таким еще не промышлял...
Как отдельный процесс запустить не получится. В Windows процесс связан с физ.файлом.
Я наверно не совсем внятно объяснил свою мысль. Я хочу слить две свои программы: одну за другой. Получается один запускной файл.
При старте первая программа подготавливает место или сразу передает управление на вторую программу не сохраняя ее на диск.
Такое возможно? Обязательно использовать поток?
Вот нашел в Инете статью.
Но сам не пробовал.
Спасибо за ссылку, но к сожалению это не пойдет, так как там сохраняют второй файл на диск, а это нельзя. Просто хочу написать протектор для своих программ. Вот и ищу инфу...
Спасибо за ссылку, но к сожалению это не пойдет, так как там сохраняют второй файл на диск, а это нельзя. Просто хочу написать протектор для своих программ. Вот и ищу инфу...
Если для протекции, то так у тебя ничего не выйдет, ибо все джойнеры работают таким образом, что они сначала сохраняют экзешник на диске, а после запускают его (http://www.portalus.ru/modules/computers/special/xaker/xa065/044/1.htm)
Если для протекции, то так у тебя ничего не выйдет, ибо все джойнеры работают таким образом, что они сначала сохраняют экзешник на диске, а после запускают его (http://www.portalus.ru/modules/computers/special/xaker/xa065/044/1.htm)
Жаль... очень... значит только на ASM переходить?
Жаль... очень... значит только на ASM переходить?
Если делать самому - то да.
А что, обязательно защиту при помощи лоадера выполнять? Тем более самопальную? Решение для обхода скорее всего будет простое и незамысловатое. :) Хорошо выполненные защиты снимаются, а самопальные как правило занимают от часа до двух дней. Поэтому сначала посчитай - что будет дешевле - купить твою программу или оплатить N часов хорошего умельца.
Если твоя программа на столько дорога - обратись к непосредственно к разработчикам защит. Если в жабу - тогда внимательно проверь код и создай ок. 20-30 функций с РАЗЛИЧНЫМИ алгоритмами проверки и добавляй их в вызовы критичных и наиболее часто вызываемых функций. Только учти что алгоритм проверки не должен быть линейным - т.е. возвращать ДА/НЕТ - защита не ахти какая - но при определенном таланте и навыке работу сумеет осложнить более эффективно.
Если делать самому - то да.
А что, обязательно защиту при помощи лоадера выполнять? Тем более самопальную? Решение для обхода скорее всего будет простое и незамысловатое. :) Хорошо выполненные защиты снимаются, а самопальные как правило занимают от часа до двух дней. Поэтому сначала посчитай - что будет дешевле - купить твою программу или оплатить N часов хорошего умельца.
Если твоя программа на столько дорога - обратись к непосредственно к разработчикам защит. Если в жабу - тогда внимательно проверь код и создай ок. 20-30 функций с РАЗЛИЧНЫМИ алгоритмами проверки и добавляй их в вызовы критичных и наиболее часто вызываемых функций. Только учти что алгоритм проверки не должен быть линейным - т.е. возвращать ДА/НЕТ - защита не ахти какая - но при определенном таланте и навыке работу сумеет осложнить более эффективно.
Спасибо за совет. Просто хотелось попробовать себя в написании протера. Не для продажи, а просто, так сказать проба сил. :roll:
Спасибо за совет. Просто хотелось попробовать себя в написании протера. Не для продажи, а просто, так сказать проба сил. :roll:
Как я уже говорил в Windows каждый процесс связан с физ.файлом, т.о. на асме или не на асме отстыковать в памяти от программы некоторый код и запустить его отдельным процессом НЕ ПОЛУЧИТСЯ. Отстыковывать созданием на диске временного файла, из которого родится новый процесс, - работа впустую, т.к. сводит на нет всю протекцию. Есть вариант создавать временный файл не на жестком диске, а на некотором виртуальном устройстве, но я думаю, мало кто из пользователей для запуска программы будес согласен устанавливать драйвер некоего виртуального устройства.
Остается один вариант - не создавать новый процесс, а работать с существующим. Т.е. запускается программа, которая разворачивает в памяти особым образом запакованные секции и передает одной из них (содержащей код) управление. Так работают все существующие пакеры и протекторы (yoda, upx и т.п.). Вся сложность в том, как и какие секции упаковывать, как правильно настроить таблицу секций в заголовке PE и как скрыть таблицы импорта/экспорта. Все это можно посмотреть на конкретных примерах открытых упаковщиков: upx, yoda. При этом upx - многоплатформенный упаковщик, там в исходниках черт ногу сломит, а yoda хоть и написан коряво и неаккуратно, но вполне простой и понятный. Я как-то в целях практикования рефакторинга давал задание зарефакторить yoda, вполне простой код получается. Кстати, хорошее практическое задание, попробуй. Только не забудь сначала, перед рефакторингом, написать тесты.