Привет народ! Для собственных нужд, пишу криптор экзешников .NET Framework. Цель - защита .NET прог от дизассемблирования недалекими кракерами Принцип работы такой: имеется stub, стандартное Win32 приложение, в нем создается секция в которую пишем зашифрованную EXE сборку. При запуске stub`а, сборка расшифровывается, копируется скажем в переменную, вычисляется размер полученного экзешника. После этого начинаем стучаться в .NET Runtime Execution Engine вызываем функцию _CorExeMain2 из mscoree.dll __int32 STDMETHODCALLTYPE _CorExeMain2( // Executable exit code. PBYTE pUnmappedPE, // -> memory mapped code DWORD cUnmappedPE, // Size of memory mapped code LPWSTR pImageNameIn, // -> Executable Name LPWSTR pLoadersFileName, // -> Loaders Name LPWSTR pCmdLine) // -> Command Line Передаем указатель на первый байт распакованного EXE ->pUnmappedPE, размер EXE в байтах -> cUnmappedPE, название сборки -> pImageNameIn, в качестве имени лоадера пишем NULL -> pLoadersFileName, Из WinMain stub`а копируем lpszCmdLine параметры -> pCmdLine А в ответ тишина... Т.е. функция _CorExeMain2 всегда возвращает -1, не запуская распакованный экзешник. Не понимаю почему. Хотя подозреваю, что сначала надо как-то инициализировать .NET монстра. Но примеров нет, в поисковиках тоже ничего не нашел... ( Если есть спецы по .NET подскажите, в чем тут может быть дело??? P.S. Меня смущает, что pUnmappedPE должен быть "memory mapped code", хотя чес слово не понимаю, чем отличается расположение полей маппированного в память PE файла, от просто загруженного в переменную. Или все же, при "отображении" EXE файла в память его структура в памяти меняется??
При маппировании PE - файла создается обьект "секция". Без нее ничего запускатся не будет. Кроме того секция должна создаватся с флагом SEC_IMAGE.
Ок, спасибо. Но дело в том, что и при маппировании файл не запускается. Уже все перепробовал кажется.. (