|
Вопрос # 5 150/ вопрос закрыт / |
|
Здравствуйте, эксперты! Мне задали такую интересную задачу:
нужно взять данные,код(как хотите называйте) из бинарного файла(exe) и вставить обратно в этот же файл. Поиск не нужен, мы знаем где находится файл, знаем что он делает. Главное, после всего программа должна быть рабочей. Простите, что задаю вопросы по бесполезной программе, но всётаки надо написать такое чудо.
Примечание #1 (3 апреля 2011, 20:55): ещё забыл сказать, что вставить он должен код в себя пустого, но я знаю как это сделать, проверял. Я использовал Rewrite перед записыванием в файл.
|
Вопрос задал: Кудя (статус: Посетитель)
Вопрос отправлен: 3 апреля 2011, 20:05
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 52; последнее сообщение — 7 апреля 2011, 19:59; участников в обсуждении: 7.
Страницы: [1] [2] [3] [Следующая »]
|
Вадим К (статус: Академик), 3 апреля 2011, 20:23 [#1]:
достаточно пространственная задача. В общем - нужно писать анализатор PE файлов, маленький дизассемблер. И просто так бездумно поменять нельзя. Или у Вас есть готовый бинарный кусок для замены?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 20:53 [#2]:
этот самый "бинарный кусок" - сам exe, из которого надо взять содержимое и вставить обратно. Может я неправильно понял вашего вопроса. Если это так, то простите моё непонимание и расшифруйте ваш вопрос.
Think Different. (c)
|
|
min@y™ (статус: Доктор наук), 3 апреля 2011, 21:24 [#3]:
А зачем?
Это как взять из мешка картошки 2 картофелины и тут же положить их обратно. Энергия затрачена, результат = 0. Ну нахрена?!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 21:31 [#4]:
уважаемые эксперты, я понимаю, что программа не нужная, но я используя в этой ненужной программе нужные процедуры, я смогу лучше изучать язык delphi. В книгах веть всё не запомнится, другое дело - практика.
Think Different. (c)
|
|
Мережников Андрей (статус: Абитуриент), 3 апреля 2011, 21:34 [#5]:
почему надо издеваться именно над exe файлом?
самый хороший способ учиться программированию - это брать РЕАЛЬНУЮ задачу и решать ее, а не делать ненужных программ.
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 21:41 [#6]:
ну так то интересно, можно ли достать содержимое exe и положить обратно, при этом он должен работать, я веть прежде чем задать вас вопрос, уважаемые эксперты, сам пытался, у меня получилось всё, но только программа стала нерабочей, она запустила DOC окно и закрылась тут же. Вот я и прошу вас посоветовать свой метод.
Ещё, Мережников Андрей, сначала вы спросили, почему именно издеваться над exe файлом. --- Потому что над ним работать труднее, так как он содержит бинарный код.
Think Different. (c)
|
|
Толяныч (статус: 4-ый класс), 3 апреля 2011, 22:11 [#7]:
Обычно так в прогу зловредины вставляют ( троянов, вирусов ) . Если это однократное и не деструктивное действие ( например, исправить ошибку в Caption ), то HEX - редактор справляется.
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 22:14 [#8]:
хм..Очень похоже, но всётаки тут идёт работа с один файлом, вставлять нужно сам exe в себя, а не другой exe.
Think Different. (c)
|
|
Толяныч (статус: 4-ый класс), 3 апреля 2011, 22:17 [#9]:
Самомодифицирующаяся прога - высший пилотаж, я думаю, и бесполезная, мягко говоря, если не хуже.
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 22:18 [#10]:
Блин, наверна спецально учитель задаёт такие задачки, которые никто не решит. Трудновато=(
Think Different. (c)
|
|
Кудя (статус: Посетитель), 3 апреля 2011, 22:29 [#11]:
Ладно, уважаемые эксперты, извините что беспокоил, попробую хотяб на 4 соскрябать программу. Спасибо, что хотяб пытались мне помоч=) Удачи.
Think Different. (c)
|
|
Death_Master (статус: Посетитель), 3 апреля 2011, 23:58 [#12]:
А почему к программе известного размера не добавить нужный кусок (как делается в sfx-архивах)?
Записывать прямо не получится, но можно перед записью скопировать файл, записать, создать батник (он удалит старый файл и переименует новый), запустить и только после этого закрыть программу.
Есть вариант - в самой программе создать этот кусок (нужно помнить, что если обращений к данным нет, то компилятор эти данные выкинет)
Обычно захожу по ночам... (60-70%)
Если нужно что-то написать, то беру оборудованием, деньгими и пивом(при личной встрече)...
P.S. Помогаю и рассказываю бесплатно ^_^.....Nyaaa!
|
|
Егор (статус: 10-ый класс), 4 апреля 2011, 04:39 [#13]:
Цитата (Кудя):
ещё забыл сказать, что вставить он должен код в себя пустого, но я знаю как это сделать, проверял. Я использовал Rewrite перед записыванием в файл.
не понял. это программа должна саму себя переписывать, что ли?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Вадим К (статус: Академик), 4 апреля 2011, 10:50 [#14]:
да, программа должна сама себя перезаписать
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Кудя (статус: Посетитель), 4 апреля 2011, 13:39 [#15]:
ну неважно, учитель сказал любой бинарный файл, если можно, то саму программу, это интересней, чем другой exe мучать=) Ну если легче другой exe, то я непротив.
Think Different. (c)
|
|
Егор (статус: 10-ый класс), 4 апреля 2011, 17:14 [#16]:
саму себя переписать нельзя. потому что программа уже запущена. когда программа выполняется, с exe-файлом сделать ничего нельзя (переименовать, удалить, перезаписать) - запрещено. во всяком случае, в винде.
вопрос. а файл если писать сам в себя, то как отличить, была перезапись или нет? вот напишу я программу, которая возьмёт, обновит дату создания файла и напишет, мол, всё готово, файл перезаписан. как пользователь проверит?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 4 апреля 2011, 17:53 [#17]:
так в Total Comander'е справа имени файла идёт тип, потом размер, потом ДАТА(время включено), если программа сделала свою работу, то дата поменяется на глазах. Мне об этом учитель говорил, но я и так знал. Жалко что нельзя саму программу перезаписать, было бы по интереснее. Ну тогда остаётся один вариант - другой exe.
Think Different. (c)
|
|
Вадим К (статус: Академик), 4 апреля 2011, 17:55 [#18]:
программа не может перезаписать сама себя, но никто ей не мешает скорировать себя в другое место, запустится оттудова, поменять себя старого, потом запустить снова уже изменненный файл и удалить копию?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Егор (статус: 10-ый класс), 4 апреля 2011, 18:06 [#19]:
я же говорю - можно обновить время создания файла. при этом файл перезаписываться не будет.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Кудя (статус: Посетитель), 4 апреля 2011, 18:21 [#20]:
Очень трудно, Вадим. Легче сделать это с другим exe. Егор, возможно я несовсем понимаю вас, но смысл обновления создания файла? Вся прелесть задачи в том, чтобы программа сумела вытащить бинарный код и положить обратно, НЕповредив саму программу после издевательством=)
Think Different. (c)
|
Страницы: [1] [2] [3] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|