Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/35: Рейтинг темы: голосов - 35, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 5
1

Run exe from memory (x64)

28.02.2014, 14:59. Показов 6456. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть необходимость запускать exe из памяти, а не с диска.
Может кто сталкивался с данным проектом? Сам находил много проектов, но они были Win32 и не работали под сборкой x64. А мне нужен именно x64, так как это проект будет использоваться в связки с другими 64-битными проектами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2014, 14:59
Ответы с готовыми решениями:

Run-time error '7': Out of memory
Здравствуйте. Установил PIC Simulator IDE, при запуске Basic компилятора вылетает эта ошибка....

Run time error 7. Out of memory
Добрый день. Помогите пож-та с кодом, выдает ошибку run time error 7. out of memory Dim v As...

Как побороть ошибку Run-time error 7: Out of memory ?
Всем привет! В приложении возникает такая ошибка! Она возникает в момент, когда я открываю...

Run-time error '9' на Windows x64
Есть дистрибутив некоего Проекта, создан в Visual Basic 6 под управлением Windows XP. Дистрибутив...

13
18 / 18 / 2
Регистрация: 21.09.2012
Сообщений: 78
28.02.2014, 17:01 2
Вот тут об этом вроде бы хорошо написано (англ)
http://msdn.microsoft.com/en-u... 00794.aspx
0
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
03.03.2014, 08:01 3
разбираться с этим https://sites.google.com/site/... 4bytestest
или переписать приложение под dll (при вызове dllmain она сама загрузиться в память).
1
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 5
03.03.2014, 13:51  [ТС] 4
Цитата Сообщение от severus-x Посмотреть сообщение
Вот тут об этом вроде бы хорошо написано (англ)
http://msdn.microsoft.com/en-u... 00794.aspx
Это не совсем то, что я имел ввиду. На сколько я понял, там описано, как собрать проект под 64 бита, но те проекты, которые я находил не совместимы с х64, в частности из-за ассемблерных вставок.

Добавлено через 6 минут
Цитата Сообщение от _lunar_ Посмотреть сообщение
разбираться с этим https://sites.google.com/site/... 4bytestest
или переписать приложение под dll (при вызове dllmain она сама загрузиться в память).
Натыкался на этот проект, но он же на delphi, насколько я понял, перевести его в с++ не получится. Или я что-то не понимаю?

Что касается переписывания приложения под dll. Я находил 2 проекта, которые реализуют загрузку dll из памяти и собираются под х64, но я не уверен, что их получится переписать. Проблема в том, что при загрузке dll из памяти необходимо загрузить их в уже имеющийся процесс, а в случае с exe - процесс необходимо создать. А в тех проектах, где была реализована загрузка exe из памяти под Win32, именно с этой частью возникали проблемы при попытки собрать проект под x64.
0
Эксперт С++
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
03.03.2014, 18:57 5
Цитата Сообщение от sirtheodor Посмотреть сообщение
он же на delphi, насколько я понял, перевести его в с++ не получится.
что есть такого в delphi чего нет в c++? Перевести можно спокойно. Другое дело переводить с delphi на, например, c# или java.

Цитата Сообщение от sirtheodor Посмотреть сообщение
Проблема в том, что при загрузке dll из памяти необходимо загрузить их в уже имеющийся процесс, а в случае с exe - процесс необходимо создать.
не вижу никаких проблем. Вы пишите, что ваш проект будет использоваться в связке с другим проектом, инжектите вашу dll в этот другой проект и всё.
1
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
03.03.2014, 19:11 6
Цитата Сообщение от sirtheodor Посмотреть сообщение
Есть необходимость запускать exe из памяти, а не с диска.
Может кто сталкивался с данным проектом?
Сталкивался. Но то было давно, в эпоху Win2K/WinXP.
На современных Виндах запуск exe - очень сложный и многоэтапный
процесс, полноценно сэмулировать его вряд ли получится.
Проще скинуть exe на диск, а затем оттуда уже запускать.
0
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 5
03.03.2014, 19:31  [ТС] 7
Цитата Сообщение от _lunar_ Посмотреть сообщение
что есть такого в delphi чего нет в c++? Перевести можно спокойно. Другое дело переводить с delphi на, например, c# или java.


не вижу никаких проблем. Вы пишите, что ваш проект будет использоваться в связке с другим проектом, инжектите вашу dll в этот другой проект и всё.
Нет, инжектировать dll в другой проект нельзя, так как это должно быть именно приложение, сейчас объясню поподробнее. Мне необходимо реализовать криптование exe, для этого, я беру исходной приложение и оборачиваю его специальным образом и на выходе получаю новое приложение. Это приложение запускается с диска, декриптует исходное приложения, которое зашито внутри нового приложения, делая при этом необходимые проверки и запускает исходное приложение из памяти. При этом исходное приложение может быть любым, но это должно быть именно приложение.

Добавлено через 2 минуты
Цитата Сообщение от Убежденный Посмотреть сообщение
Сталкивался. Но то было давно, в эпоху Win2K/WinXP.
На современных Виндах запуск exe - очень сложный и многоэтапный
процесс, полноценно сэмулировать его вряд ли получится.
Проще скинуть exe на диск, а затем оттуда уже запускать.
Нет, совсем не проще, как было описано ранее, цель проекта - реализовать криптование приложения. Какой смысл писать приложение на диск после его проверки и декриптования, чтобы любой мог его взять и использовать?
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
03.03.2014, 19:41 8
Цитата Сообщение от sirtheodor Посмотреть сообщение
Нет, совсем не проще, как было описано ранее, цель проекта - реализовать криптование приложения.
Возьмите какой-нибудь хороший протектор типа VmProtect и будет криптование.
А делать все это вручную, не имея нужного опыта - гиблое дело.

Кстати, запуск процесса из памяти все равно не спасет от снятия дампа,
так что криптование как защита - идея не самая лучшая.
0
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 5
03.03.2014, 19:54  [ТС] 9
Цитата Сообщение от Убежденный Посмотреть сообщение
Возьмите какой-нибудь хороший протектор типа VmProtect и будет криптование.
А делать все это вручную, не имея нужного опыта - гиблое дело.

Кстати, запуск процесса из памяти все равно не спасет от снятия дампа,
так что криптование как защита - идея не самая лучшая.
Нет это не вариант. Большая часть приложения реализована, не хватает только этого проекта. Что касается VmProtect, то это не подходит из-за нашего типа защиты. Мы используем HASP и проверки при декриптование связанные с ним необходимы.
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
03.03.2014, 20:54 10
Приведу две цитаты со StackOverflow:

1.
It's actually quite easy. Similar technique has been described in a paper I read like 3 years ago.

Windows allow you to call the CreateProcess function with CREATE_SUSPENDED flag, that tells the API to keep the process suspended until the ResumeThread function is called.

This gives us time to grab the suspended thread's context using GetThreadContext function, then the EBX register will hold a pointer to the PBE(Process Enviroment Block) structure, which we need to determine the base address.

From the layout of the PBE structure we can see that the ImageBaseAddress is stored at the 8th byte, therefore [EBX+8] will give us actual base address of the process being suspended.

Now we need the in-memory EXE and do appropiate alignment if the alignment of memory and in-memory EXE differs.

If the base address of suspended process and in-memory exe matches, plus if the imageSize of the in-memory exe is lesser or equal to the suspended process' we can simply use WriteProcessMemory to write in-memory exe into the memory space of the suspended process.

But if the aforementioned conditions weren't met, we need a little more magic. First, we need to unmap the original image using ZwUnmapViewOfSection, and then allocate enough memory using VirtualAllocEx within the memory space of the suspended process. Now we need to write the in-memory exe into the memory space of the suspended process using the WriteProcessMemory function.

Next, patch the BaseAddress of the in-memory exe into the PEB->ImageBaseAddress of the suspended process.

EAX register of the thread context holds EntryPoint address, which we need to rewrite with the EntryPoint address of the in-memory exe. Now we need to save the altered thread context using the SetThreadContext function.

Voila! We're ready to call the ResumeThread function on the suspended process to execute it!
2.
This is a major hack, and you should really avoid doing it. If you want to start a new process then the only guaranteed way to make it work without issue is to launch an executable that resides in the filesystem. Anything else is a hack and you can't rely on it working in the future.
В п.2 подписываюсь под каждым словом.
0
18 / 18 / 2
Регистрация: 21.09.2012
Сообщений: 78
04.03.2014, 00:24 11
Извините, не совсем понял вашу проблему(
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
04.03.2014, 14:17 12
А ты не боишься, что программой твоей невозможно будет пользоваться из-за этого? Я проверил пару способов для win32 и все они помечаются как подозрительные большинством современных антивирусов. Это значит что пользователь, скачав один раз такую программу и увидев реакцию антивируса, скорее всего больше никогда не будет ее ставить.
0
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 3
04.03.2014, 23:10 13
Нет, инжектировать dll в другой проект нельзя, так как это должно быть именно приложение, сейчас объясню поподробнее. Мне необходимо реализовать криптование exe, для этого, я беру исходной приложение и оборачиваю его специальным образом и на выходе получаю новое приложение. Это приложение запускается с диска, декриптует исходное приложения, которое зашито внутри нового приложения, делая при этом необходимые проверки и запускает исходное приложение из памяти. При этом исходное приложение может быть любым, но это должно быть именно приложение.
Т.е. по сути ты пытаешься прицепить защиту к стороннему приложению? Если приложение свое, то непонятно, зачем такая система наворочена.

А по существу вопроса - можно попробовать запускать раскриптованный EXE как DLL - по сути они не слишком отличаются, загрузил, настроил адреса, импорт/экспорт, прыгнул на точку входа, как-то так

Добавлено через 3 минуты
Нет это не вариант. Большая часть приложения реализована, не хватает только этого проекта. Что касается VmProtect, то это не подходит из-за нашего типа защиты. Мы используем HASP и проверки при декриптование связанные с ним необходимы
А в чем проблема? Делаете у себя в коде проверки наличия HASP'а, а сам код проверки защищаете VMProtect'ом - используете виртуализацию и мутацию кода, чтобы сложнее вскрыть было. А то, что вы сами наваяете, скорее всего будет для взлома гораздо проще, чем защита VMProtect'ом.

Добавлено через 3 минуты
Кстати, запуск процесса из памяти все равно не спасет от снятия дампа,
так что криптование как защита - идея не самая лучшая.
Кстати да. А если использовать VMProtect, то такой проблемы не возникает - он использует виртуализацию кода - выполняет защищенные части на своей виртуальной машине, которая при каждой обработке протектором разная. Виртуальная машина обеспечивает сложность вскрытия даже при наличии дампа памяти, а генерация новой VM при каждой обработке обеспечивает то, что поломать могут только какую-то конкретную версию, каждый новый релиз не будет совместим со старым кряком.
0
0 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 5
11.03.2014, 12:16  [ТС] 14
Цитата Сообщение от DrOffset Посмотреть сообщение
А ты не боишься, что программой твоей невозможно будет пользоваться из-за этого? Я проверил пару способов для win32 и все они помечаются как подозрительные большинством современных антивирусов. Это значит что пользователь, скачав один раз такую программу и увидев реакцию антивируса, скорее всего больше никогда не будет ее ставить.
Нет, у меня такой проблемы не возникало. У меня есть рабочая версия приложения Win32.

Добавлено через 2 минуты
Цитата Сообщение от tramvon Посмотреть сообщение
Т.е. по сути ты пытаешься прицепить защиту к стороннему приложению? Если приложение свое, то непонятно, зачем такая система наворочена.
Нет, защиту нужно подцеплять не к стороннему приложению, но она должна работать с любым приложением. Это связанно с тем, что мы рабочих приложений может быть несколько.
0
11.03.2014, 12:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2014, 12:16
Помогаю со студенческими работами здесь

X64 GetThreadContext Error 998: Invalid Access Memory Location
Доброго времени суток. При попытке получить контекст потока if (!GetThreadContext(handle, ref...

exe,ocx,dll,run-time в одном файле ?
Подскажите пожалуйста, есть-ли где программулька, которая могла-бы запихнуть в один exe-шник как...

Aspnet_wp.exe (PID: 528) was recycled because memory consumption exceeded the 613 MB (60 percent of available RAM).
При по попытке обратиться к скрипту имеем такой вот резалт: aspnet_wp.exe (PID: 528) was...

Win7-x64 - Не запускаются exe.
Видел на форуме такие темы уже, с этими же симптомами. 1. x32-приложения не запускаются, кроме...

Ошибка при запуске EXE: <Run-time error '13': Type mismatch>
Я протестировал рогу в режиме отладки - все о'кей!...Компилирую, запускаю экзешник и при загрузке...

Ошибка Faild to run IDL2CPP.exe. Не удается найти указанный файл
При нажатии на кнопку New CORBA Object Implementation выдает ошибку Faild to run IDL2CPP.exe. Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru