![]() |
|
Модераторы: 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
-------------------- С уважением, г-н Посол. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
С начала так с начала! Первое, где можно достать ПОЛЕЗНУЮ информацию про PE, так как вы не подумайте, что я захотел, что-бы вы за меня все сделали, я до этого искал и нашел много чего про PE, но там они думают в своих описаниях, что все все знают и из-за этого получается неразбериха! Далее про структуру PE мне давно уже известно, у меня сейчас два полных и два неполных исходников вирусов на ASM, только первый не работает, а со вторым я никак не могу разобраться! Вот и выплывает проблема - много теории и 0 практики, так как я в своей квалифе использую только Delphi и ASM, а описания как работать с заголовком PE и так далее даются на C++! Вот и получается такая лажа!!!!!!!!!!!! Отсюда сделайте выводы и посоветуйте мне, что делать дальше? |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 14 Всего: 48 |
kostik_16, приведи пожалуйста структуру описывающую PE загловок на любом языке. Что тебе в ней не понятно выдели жирным. Может быть тебе не понятно как прочитать информацию из файла?
з.ы. все что необходимо для работы есть в windows.pas: _IMAGE_FILE_HEADER, _IMAGE_DOS_HEADER, _IMAGE_OPTIONAL_HEADER,... так что не надо ля-ля -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| kostik_16 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 23.7.2003 Репутация: -4 Всего: 1 |
Вот код вируса, который мне практически непонятен!:
Модератор: код удалён. Согласно правилам форума публикация таких кодов запрещена! Вот пожалуй пока-что все! Что ты мне дальше посоветуешь? |
|||
|
||||
| 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 |
Если я не ошибаюсь, то именно до этих пунктов мы дошли! Итак главной проблемой сейчас (для меня) является:
Я так понял модифицировать, тоесть увеличить для того, что-бы приписать свою секцию туда, но зачем нам это? Нельзя ли начать новую секцию, в которой будет содержаться процедура? Если да, то нам прийдется изменить в заголовке число секций, размер весго файла, точку входа. Может чет и забыл! Если я не ошибаюсь, то теорию я понял, но как это сделать на практике - это самая главная проблема Помогите, ведь осталось всего чуть-чуть! Всем заранее спасибо, а особенно cully и p0s0l! |
||||
|
|||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Модератор: Совершенно явственно идёт обсуждение написания вируса или вредоносной программы. Уже дошло до публикации кодов вирусов. Обсуждение таких тем и публикация таких кодов запрещена на данном форуме, а также нарушает законодательство стран имеющих отношение к данному форуму и его администрации. В связи с этим обсуждение прекращено. Тема закрыта.
У меня личная просьба к cully и p0s0l. Вы очень сильные программисты, особенно в области низкоуровневого программирования, поэтому я хочу обратить Ваше внимание на то ЧТО именно спрашивают на форуме, и каков уровень подготовки тех кто спрашивает. Я не могу прекратить обсуждение пока участник не перешагнёт некую грань, однако предлагаю впредь избегать делиться своими знаниями в таких скользких вопросах. К сожалению примерно раз в 3 месяца всплывает подобный топик, когда совсем слабенький программист пытается выпытать что-то явно относящееся к созданию вредоносного. Если это ясно на 100% я закрываю эту тему сразу, если же она замаскирована под что-то безобидное, то я предлагаю просто игнорировать такие топики. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "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. |