![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
Если не знаешь, то не пиши! Пишите только по делу!!!!!!!!!!
Вопрос заключается в следующем: способ работы с заголовком экзешника(чтение заголовка, замена его на новый) Например мне надо изменить в сегменте данных размер моего экзешника, и т.д. Я надеюсь вы поняли что я хотел вам сказать. Ответ может заключатся, как в исходнике, так и в ссылке на сайт! Я надеюсь увидеть ваши исходники с детальным обьяснением! Вы спросите зачем мне это надо, отвечаю - я прикрепляю к экзешнику свою процедуру в конце, что-бы она работала при запуске требуется изменить адреса, размер загружаемой секции и т.д. Потом когда я запустил свою программу и выполнил все действия, при выходе из нее должна запускаться основная(первая) для этого также изменяется заново заголовок и в стек очереди процессора вносится ссылка на выполнение первой! Я надеюсь вы поможите мне, если что то задавайте вопросы! Всем заранее благодарен!!!!!!!!!!!!! |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
интересно что такое "стек очереди процессора " ?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
он пишет защиту типа ASProtect...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
ваше не вижу проблемы поднятой в вопросе
разве трудна зачитать N количество байт с начала файла в буффер и разобрать по полочкам формат РЕ ехе давно уже не секрет -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
Пишу я действительно программу типа ASProtect!!!! |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Все о формате PE можно узнать тут.
Доступ к отдельным полям можно получить, например, используя указатели:
Это сообщение отредактировал(а) <Spawn> - 6.9.2003, 12:04 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
kostik_16, куда пропал? на чем остановился или в чем конкретно проблема?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
Сейчас я остановился на том, что мне надо изменить заголовок экзешника, тоесть я прикрепил свю процедуру в конец файла и мне надо изменить заголовок так, что-бы при запуске экзешника запускалась моя программа, которая находится в конце. Я думаю ты понял, что я имел в виду. Далее после выполнения определенных действий запускается сама программа( тело программы к которому я прикрепился). Вот пожалуй и все! |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
каким образом ты добавил процедуру в конец? Расширил последнюю секцию или создал новую секцию? От этого зависит что делать дальше.
з.ы. давай далее на форуме общаться, а не почтой. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
procedure MyProc; begin messagebox(0,'','',0) end; procedure EndMyProc; begin end; begin od.Execute; fn:= od.FileName; procSize := cardinal(@EndMyProc) - cardinal(@MyProc); h := CreateFile (PChar(fn), GENERIC_WRITE, FILE_SHARE_READ+FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); getfilesize(h,@tmp); SetFilePointer (h, 27, nil, FILE_BEGIN); buf := @MyProc; WriteFile (h, buf^, procSize, tmp, nil); CloseHandle (h) end; |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
kostik_16, а почему ты считаешь, что запись происходит в конец файла?
это вроде 27-ой байт от начала файла, таких маленьких PE EXE не бывает, в такой объем только заголовок DOS EXE влезет Кроме того при простом дописывании в конец файла ни чего не выйдет, есть такая штука называется секция. В екзешнике их может быть несколько. Все данные и код кроме заголовков должны находится в какой либо секции. Простое дописывание не приведет к попаданию кода в последнюю секцию. Для того что бы это произошло надо подправить размер последней секции или создать еще одну секцию в которой будет твой код. Надеюсь ты читал описание формата PE EXE? Мне кажется, что нет -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| kostik_16 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
На счет 27 это я просто не то скопировал! Там GetFilesize(). А на счет секций читал, но чет не понял наверное, просто все пишут на своем языке, но он не до всех доходит. Мне надо приписать мою процедуру к экзешнику! Как это сделать? |
||||
|
|||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
взять исходник какогонить виря под w9x и поглядеть как там сделано
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
kostik_16, буду расказывать, т.к. писать за тебя не собираюсь
Для начала немного о формате PE EXE. Описание формата можно найти в инете, но довольно сложно в нем разобраться. Я после первого прочтения, признаюсь честно, ни фига не понял. Ну дык лана, схематичная структура: DOS заголовок (нам не нужен) Stub (заглушка, та прграмма котороя показывает при запуске под DOS'ом сообщение о том, что данный экзешник работает только под windows) PE заголовок (без коментариев) Таблица секций (кол-во вхождений N указано в PE заголовке) Секция 1 Секция 2 ... Секция N Вот и все..., теперь подробнее о каждой части. Намерено не буду приводить описание структур, их ты должен изучить сам. DOS заголовок Содержит в себе информацию о параметрах stub'а. Нам не нужен. После загловка идет выравнивание и информация о программе. И самое интересное -- поле указывающее смещение PE загловка от начала файла. Т.е. для того что бы считать PE заголовок надо читать со смещения равного значению этого поля. Stub не важно PE заголовок Описывает характеристики и структуру экзешника. Отсюда можно подчерпнуть такую информацию: 1. Кол-во записей в таблице секций (Num Objects) . 2. Адрес по которому загружается программа (Image Base). То что указывается в дельфях в опциях проекта. Для exe это обычно 00400000h. 3. Точка входа (Entry point RVA). RVA рашифровывается как Relative Virtual Address. Такого рода адреса указываются относительно Image Base, т.е. для того что бы во время работы программы получить данные по RVA 123456h надо к 123456h прибавить Image Base. Зачем так сделано? Для того что бы у программы не было привязки к конкретному Image Base. Также есть VA, т.е. Virtual Address, это RVA к которым прибавлен Image Base. По VA и происходят все обращения во время работы программы. Таблица секций Для каждой секции здесь указаны: имя, физические/виртуальные смещения и размеры. Физичиские смещения и размеры -- это смещения и размеры в файле. Виртуальные -- в памяти, когда программа уже загружена. Следует учесть, что все физические смещения и размеры должны быть кратны полю File Align из PE заголовка, а виртуальные полю Object Align или, как стали называть позднее, Section Align. Итого для того что бы дописать свой код в конец последней секции надо: 1. Определить смещение PE заголовка. 2. Считать PE заголовок. 3. Считать данные о последней секции. 4. Модифицировать данные о последней секции с учетом размера нашего кода, File Align и Object Align. 5. Поменять точку входа предварительно сохранив старую для того что бы потом сделать прыжок на начало программы. 6. Записать свой код в конец. 7. Может чего забыл И напоследок огорчу -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
К слову: подобная проблема обсуждается здесь: http://pascal.sources.ru/cgi-bin/forum/YaB...;num=1063033050
-------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |