Как заменить исполняемый файл в каталоге программы
← →
B-S-G ( 2005-07-10 16:37 ) [0]
Возможно ли изменить исполняемый файл (Например, добавить Дазы данных в исполняемый .ЕХЕ файл программы во врем её работы) .
← →Palladin © ( 2005-07-10 23:49 ) [1]
Ну если исполняемый файл обращается к Дазе данных взятой из себя самого, то конечно можно.
← →evvcom © ( 2005-07-11 08:46 ) [2]
Что значит "изменить исполняемый файл"? Как "добавить Дазы данных в исполняемый .ЕХЕ файл программы во врем её работы"? И что такое "Дазы"?
На 2-ой вопрос, если я правильно телепатирую, ответ нет, потому как во время работы файл *.exe выполняется, потому открыт и заблокирован, и ничего в этот файл на диске записать нельзя. Да и зачем?
← →Sha © ( 2005-07-11 09:38 ) [3]
> evvcom © (11.07.05 08:46) [2]
> И что такое "Дазы"?
Дазы банных.
← →Fay © ( 2005-07-11 09:41 ) [4]
2 Sha © (11.07.05 9:38) [3]
Я выступаю категорически против использования Даз банных!
Высокая температура и влажность могут губительно повлиять на аппаратную часть!
evvcom © ( 2005-07-11 09:55 ) [5]
> Sha © (11.07.05 09:38) [3]
:-))
B-S-G ( 2005-07-11 19:06 ) [6]
> Ну если исполняемый файл обращается к Дазе данных взятой
> из себя самого, то конечно можно.
А как вложить в исполняемый файл .
B-S-G ( 2005-07-11 19:10 ) [7]
> во время работы файл *.exe выполняется, потому открыт и
> заблокирован, и ничего в этот файл на диске записать нельзя.
А как-нибудь обойти блокировку можно .
uny © ( 2005-07-11 19:15 ) [8]
кстати - можно же файлу сделать "mapped" - копию файла загрузить в память, даже создать в памяти копию своего запущенного приложения и читать его(например MD5 считать).
вопрос - а можно запустить на исполнение копию файла в памяти?
т.е. делаем копию файла, запускаем её из памяти, а после работы записываем изменённый exe опять на диск?
удобно бы - можно удалить файл exe с диска ещё при работе приложения
Sha © ( 2005-07-11 23:07 ) [9]
> B-S-G (11.07.05 19:06) [6]
> А как вложить в исполняемый файл .
Проще всего приписать данные в хвост exe append"ом из другого приложения. Затем в первом exe (после его запуска) данные будут доступны только для чтения.
Сегодня я расскажу вам об одном приёме, который, несомненно, вам пригодится. Этот приём называется "Замена Исполняемых Файлов". Не могу (и не хочу) говорить, что его придумал я, но то, что додумался до него сам - это 100%!
Зачем это вообще нужно?
Замена исполняемых файлов - это способ перехвата параметров командной строки передаваемых приложению (тобиш исполняемому файлу). Вот!
В чём заключается этот способ перехвата?
В том, что вместо "жертвы" (приложении, параметры которой надо узнать) мы помещаем свою прогу, которая сообщит вам обо всех параметрах.
Практика.
Этим приёмом я пользовался давно. Тогда я писал одну Интернетовскую программу, и мне срочно надо было узнать, как же можно из VB запустить окно "Установка Связи с Интернетом". Если бы дома была Сеть, то я мог бы найти ответ на каком-нибудь сайте, но в то время Интернет не работал, а я очень торопился. Тогда-то мне и пришла в голову мысль попробовать заменить файл.
Значит так. Нажал я на иконку "Установка связи с Интернетом" и запустил отлавливатель процессов. Кто не знает, это прога, которая показывает все текущие процессы в компьютере, а также сообщает, где находится запущенное приложение, (то есть путь к проге).
Итак, смотрим. Последний запущенный процесс - это программа RUNDLL32.EXE, находящаяся в папке C:/Windows/. Пробуем уничтожить процесс RUNDLL32.EXE и окно "Установка связи" исчезает. Путь мы узнали и даже проверили (закрыв процесс). Но вот проблема: приложение RUNDLL32.EXE используется не только для установки связи. RUNDLL32 - это общая программа. Она используется во многих системных процессах.
Попробуем запустить RUNDLL32 из её папки, и видим, что ничего не происходит. Первая мысль, что пришла в голову это конечно параметры командной строки. Видимо система сообщает RUNDLL32 о том, что именно ей надо, в данном случае надо показать окно установки связи. Но как узнать параметры, которые ей передаются?
Оказывается просто. Я уже говорил об этом выше - заменим файл на свой. Всё ОЧЕНЬ просто. Но во избежание лишних вопросов и недоумений вот вам код проги:
Private Sub Form_Load ()
If Len (Command) Then MsgBox Command, , "Command line parameters" _
Else MsgBox "Не передано никаких параметров командной строки!", , "Error"
End
End Sub
То есть прога запустится, сообщит о переданных ей параметрах (или об их отсутствии) и закроется.
Программу написали. Осталось заменить файл. Сначала проверьте, не запущен ли уже RUNDLL32.EXE и если запущен, то закройте все его процессы, иначе ничего не получится.
Если всё готово, то открываем папку C:/Windows/ и ищем файл RUNDLL32.EXE. Переименовываем его, например в 1RUNDLL32.EXE. Не бойтесь, если чего-то не получится, то мы спокойно вернём его обратно. Теперь компилируем нашу программу в VB в папку C:/Windows/ под именем RUNDLL32.EXE. Всё готово.
Осталось запустить "Установку связи". Запускаем и смотрим.
То есть для запуска окна "Установка связи" система сообщает проге RUNDLL32.EXE следующие параметры:
RUNDLL32.EXE RNAUI.DLL, RnaDial
Вот и всё! Всё что надо было, мы узнали. Теперь проверяем, может, мы получили неверный результат. Нажимаем Пуск/Выполнить, и вводим:
RUNDLL32.EXE RNAUI.DLL, RnaDial
Всё верно! Окно соединения запускается. Пробуем ввести другое название соединения - получается. А если не сообщить название?
RUNDLL32.EXE RNAUI.DLL, RnaDial
Тогда запускается одно из нескольких (обычно самое первое) соединений.
Теперь если в VB набрать RUNDLL32.EXE RNAUI.DLL, RnaDial, то запустится то, что нам надо.
Случай из личного опыта.
Прислал мне как-то на Бета-тестинг один "умный" программер свой, как он выразился, "оригинальный" проект. Он написал прогу, которая состояла из двух приложений. Первое приложение - это ввод пароля. Если вы ввели верный пароль, то первая прога запускала вторую, а если неверный, то об этом сообщалось. Я сообщил тому программеру, что это не лучший способ, но он мне ласково объяснил, что я ничего не смыслю в программировании. Я поблагодарил его за комплимент и сказал, что завтра отправлю ему крак к его программе.
Надо подумать, как вообще работает этот механизм. Скорее всего, здесь тоже параметры командной строки. Врядли передаются пароль и логин. Как же первая прога узнаёт от второй, что пароль неверный? А как узнаёт, что он верный и завершает свою работу? Наверное, просто передаются параметры о том, что пароль верный и вторая прога запускается, в противном случае нет.
Ну, я попробовал Замену Исполняемого Файла - заменил вторую прогу и вот что получил:
CheckForCorrectPassword=True
Теперь осталось написать крак, как я и обещал. Я написал прогу, при запуске которой она автоматически запускает вторую прогу (главную) и передаёт ей параметр CheckForCorrectPassword=True.
Практика.
Теперь я приведу вам небольшой пример использования приёма Замены Исполняемых Файлов. Редко мы запускаем неассоциированные файлы на компе, но если и запускаем, то (файл ведь неассоциирован) чаще нам надо его просмотреть в Блокноте или WordPad"e. Но я, по часто привычке просто открываю файл, забывая о том, что он неассоциирован. В результате запускается окно "открыть с помощью". И всё было бы в порядке, если бы это окно не запускалось 20 секунд (чем больше на компе программ, тем дольше оно грузится). Это происходит из-за того, что прога при запуске читает в реестре все ассоциации файлов на вашем компе.
Эту проблему, оказывается, легко решить с помощью нашего приёма. Мы знаем, что RUNDLL32.EXE (а она и запускает окно "открыть с помощью"), используется сразу для многих целей (в этой статье мы разбираем два примера работы этого приложения).
Наша цель - определить, когда запускается RUNDLL32.EXE для показа окна "открыть с помощью". Заменяем файл - эти действия нам известны и запускаем какой-нибудь неассоциированный файл. Получаем: shell32.dll,OpenAs_RunDLL , где - путь и имя файла.
Теперь пишем нашу программу. Какая она будет? Если система обращается к RUNDLL32 с просьбой показать окно "открыть с помощью", то мы показываем формочку, в которой спрашиваем "А может сразу открыть с помощью Notepad"а? Или будете дожидаться загрузки окна "открыть с помощью"?". Если юзер нажимает кнопку Да, то сразу запускаем файл в Notepad"е, а если нет, то видимо он решил открыть файл в другом приложении.
А что делать, если RUNDLL32 не будет запускаться для открытия окна "открыть с помощью", а, например, для установки связи? А мы переименуем RUNDLL32.EXE в 1RUNDLL32.EXE и если ваша прога получит иные параметры (например, для установки связи), то запускаем 1RUNDLL23.EXE с этими параметрами.
Показывать весь код проги я вам не буду - опытные уже, хотя если возникнут трудности - пишите.
Случай из личного опыта.
Однажды, при написании вируса для сайта visualbasic.boom.ru (для опубликования), я что-то наделал с моей системой. Потом при каждом запуске компьютера у меня появлялось окно "Настройка параметров системы" (я работаю в Windows Me, в других системах такое окно, кажется, не появляется). Что бы я ни делал, избежать появления этого окна я не мог. Тогда я заменил файл msconfig.exe на свой, и определил параметры командной строки. Затем, узнав, их я написал прогу, которая заменила мне msconfig.exe. Я переименовал msconfig.exe в 1msconfig.exe, а свою прогу сохранил как msconfig.exe. Если моя программа получала параметр, который сообщается при ошибках в системе, то никакого действия не совершалось (при запуске компа ничего лишнего не всплывало), если же передавались другие параметры (например, когда действительно нужно было настроить систему), то моя прога запускала 1msconfig.exe.
Вот и всё!
Перед вами - отличное средство (приём, оружие - называйте, как хотите), для определения параметров. Используйте его везде, где это возможно и у вас не возникнет вопросов о том, какие же параметры переданы проге.
через Thinstall Virtualization Suite создал portable программу. но она создалась одним exe файлом. теперь для кряка ее, нужно заменить исполняемый файл. возможно ли это. если да, то как. и на будущее подскажите пожалуйста, как создавать не одним файлом, а с папкой. заранее спасибо
блин зачем пользовалься Thinstall Virtualization Suite - это Г. но, для ехе файла ПОЛЬЗУЮТСЯ Installshield_ом скачай InstallShield Pro 2009 и там можно заменять, обновлять файлы ЛЮБЫЕ!
можно. Restorator 2009 4.00 build 1807
Restorator - редактор ресурсов для многих типов файлов (exe, dll, ocx, scr, и других. ) . С помощью Restorator можно русифицировать программы, изменять изображения, значки, меню, диалоги, звуки, мультипликацию и т. п. После всех изменений с файлом можно создать патч. Вы можете просматривать, извлекать и изменять изображения, иконки, тексты, диалоги, курсоры, звуки, видео, меню и другие ресурсы.
Кроме этого, вы можете создавать небольшие исполняемые программы-патчи для изменения приложений, но только для одного файла. Главной особенностью программы являются перевод и настройка внешнего вида приложений.
Возможности Restorator 2009:
Просмотр и редактирование ресурсов
Просмотрите ваши ресурсы и отредактируйте их непосредственно в Restorator`е или используйте приложения, которые Вы можете интегрировать в меню инструментов.
Визуальное редактирование диалогов
Теперь Вы можете редактировать диалоги на экране с помощью вашей мыши. Перемещайте элементы диалога, измените размеры и схему оформления с немедленным получением результатов и полным управлением. Это необходимая функция перевода приложений.
Добавление много-языковой поддержки в ваши приложения
Теперь Вы можете добавить несколько языков в одно приложение. Ваше приложение автоматически запустится на языке, который по умолчанию установлен в Windows. Многоязыковая поддержка может быть добавлена, используя именно Restorator. Вы можете не только переводить приложения, но также добавлять языки.
Создание программы автоматизированной модификации - ResPatcher
Используя Restorator Вы можете создать маленькую исполняемую программу - ResPatcher, которая содержит все, сделанные Вами изменения. Это дает Вам возможность перевести любое приложение и распространять перевод другим лицам.
Захват ресурсов в PE файлах с любого места Вашего жесткого диска
Захват ресурсов на вашем жестком диске. Этот инструмент найдет ресурсы везде, где бы они скрывались. Например Вы можете найти все курсоры на вашем диске и избавить себя от лишней ручной работы.
Мне надо чтобы этот файл упаковался вместе с моей программой в один файл.
Вы осознаете то, что h файлы подключаются на этапе препроцессора, а Вам похоже нужно на этапе исполнения? или вы хотите включить текстовый файл внутрь cpp на этапе препроцессора (компиляции)?
@ThreadShakur вам прямой путь в документацию почитать о файловом вводе выводе. P.S.: std::ifstream/std::ofstream
4 ответа 4
На основании Вашего комментария становится ясно, что нужно встроить текстовый файл непосредственно в исполняемый *.exe файл. Такого рода задачу можно решить разными способами, например:
Использовать файл ресурсов и компилятор ресурсов для соответствующей ОС (или IDE). Например, для Windows.
Преобразовать с помощью утилит типа xxd Ваш файл в массив данных и включить его непосредственно в код, например:
Какое решение будет для Вас оптимальным зависит от используемой ОС, IDE и необходимости в кросс-платформенности подхода.
1) Создаётся файл ресурсов.
2) В ресурсы добавляется новый файл (через контекстное меню) НЕИЗВЕСТНОГО ЕЩЁ КОМПИЛЯТОРУ типа, например BINARY. Если не уверены что добавилось, то заходите в .rc файл и правьте руками. Будет строка типа:
3) Во время работы программы обращаться стандартными средствами: Пример кода:
Мне кажется, что человек спрашивает по сути, как ему в проекте (как я понимаю, на Visual C++) обратиться к файлу, который лежит в папке с проектом. В этом случае - надо учесть, что текущим каталогом при запуске из IDE становится не папка, в которой лежит .sln -файл проекта, а в которой лежат исходники и .vcxproj (для Visual Studio). И именно в нее и надо укладывать этот 1.txt .
Если ошибся в трактовке вопроса - мои извинения, тогда смотрите ответ @Xambey.
Текущая папка для отлаживаемого проекта задается через Debugging - Working Directory (по умолчанию она установлена в $(ProjectDir), что попадает под ваш ответ).
Надо проверять отсутствие fail / bad битов. Проверка на eof приведет к зацикливанию, например, если файл вовсе не удалось открыть. Да и закрывать явно не обязательно, т.к. это сделает деструктор.
Да вы не поняли все, я знаю как файл считать.. про папку с проектом я имел ввииду папку с исходниками в проекте. то есть вот программа есть у нас 1.exe лежит в папке porga.. Мне надо файл читать не из папки proga а чтобы как бы этот файл упаковался вместе с моей программой в один файл
Замена файлов в игре может потребоваться в различных ситуациях. К примеру, вы хотите русифицировать игру, улучшить в ней графику или добавить новые возможности. Как бы то ни было, принцип замены файлов в большинстве случаев один и тот же.
- Как заменить файл в игре
- Как заменить файл
- Как редактировать сейвы
Во время работы приложение обращается к ресурсам с определенным именем, расположенным в определенном месте (чаще всего в директории с установленной игрой). Поэтому файлы, предлагаемые для замены, будут иметь то же имя, что и оригинальный файл. Прежде чем заменить оригинальный файл на пользовательский, примите меры предосторожности.
Откройте папку с файлом, который вы собираетесь заменить, скопируйте оригинальный файл в буфер обмена и вставьте его в папку, не относящуюся к ресурсам игры. Например, сохраните его на «Рабочем столе» или любом локальном диске. Главное, запомните директорию, в которую вы скопировали оригинальный файл. Это необходимо для того, чтобы в случае некорректной работы игры с новым файлом, вам не пришлось переустанавливать игру.
Перейдите в папку с файлом для замены, скопируйте его в буфер обмена и откройте папку с оригинальным файлом игры. Кликните правой кнопкой мыши в любом свободном месте папки и выберите в выпадающем меню команду «Вставить». Также вы можете воспользоваться для этого клавишами на клавиатуре или верхней строкой меню окна. Система вас оповестит, что в выбранной папке уже имеется файл с таким же именем. На вопрос «Заменить?» ответьте утвердительно.
В тех случаях, когда ваш новый файл находится в архиве (.zip, .rar), вы можете распаковать его сразу в нужную директорию, не копируя его в буфер обмена. Откройте архив, выделите нужный файл и укажите директорию, в которую его следует сохранить. Система так же предупредит вас о том, что в выбранной папке уже есть файл с таким именем. Подтвердите замену, закройте архив.
Если новый файл вызывает сбои в игре, просто замените его на оригинальный файл, который вы сохранили ранее. Для этого выполните все те же действия: скопируйте оригинал, перейдите в нужную папку и вставьте в нее из буфера обмена «рабочий» файл. На вопрос о замене ответьте утвердительно. Не переименовывайте файлы, иначе игра не распознает их и, следовательно, будет игнорировать.
Читайте также: