Сейчас на форуме: _MBK_, vsv1 (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Нахождение EP с HEX'ом или WinDbg
Посл.ответ Сообщение

Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 08 июня 2007 20:07 · Поправил: SeaMan
· Личное сообщение · #1

Сущесивует очень много разных утилит, с помощью которых можно EP и так "подглянуть" . Даже не нужно специальных инструментов для этого. Например в HIEW есть возможность посмотреть EP через функцию "Header". Но как быть с образованием? Ведь всё таки хочется узнать как эти вспомогательные инструменты это делают . Да и для начинающих неплохо узнать сначало как "оно" работает, прежде чем пользоваться. Не так ли? Я вам покажу как я это делаю, если под рукой нет нужной программки. Но можно и просто ради спортивного интереса. Да и иногда бывает быстрее найти его вручную чем сначала запускать что нибудь для этого.

Для этого нам понадобится информация о заголовке PE файлов (PE Header). Во - первых PE сокращение от Portable Executable что означает типа "Переносное исполняемое". Т.е программы с таким заголовком можно теоретически запускать не только на машине, где они были написанны, но и везде там, где есть по крайней мере похожая система. Но это только теория. Вернёмся к нашему заголовку.

Offset: 0000003C - Cдесь записывается адрес с которого начинается PE - заголовок. Т.е их больше чем 1. Сам файл начинается с MS-DOS заголовка. Адрес по которому находится начало PE-заголовка должен иметь длинну в 4 байта и если вы пользуютесь HEX-Редактором то нужно читать значения с зада на перед. Например: 0000003С: Е0 00 00 00 читается как 000000E0. Затем идём на этот адрес и прибавляем к нему значение 28h. В нашем примере получается E0+28h=108h. Идём на этот адрес (в нашем примере 00000108) и считываем там наш EP. Кстати адрес EP тоже написанн наоборот .

Этот пример был для тех, кто ищет EP через HEX.


Теперь для тех, кто пользуетсяWinDbg (если есть такие).

Запускаем WinDbg. Идём на File -> Open Executable... Ctrl+E и открываем нашу Exeсutable. Затем пишем в командной строке: d notepad+3C где notepad есть наша Executable для примера. Т.е. notepad.exe это наш файл в котором мы ищем EP.

О синтаксисе:
Команда d выдаёт нам дамп фрагмента памяти.
Затем следует информация о фрагменте. В данном случае notepad+3C. WinDbg берёт адрес памяти по которому загружен notepad.exe, затем прибавляет к этому адресу значение 3Ch и показывает нам дамп памяти по вычесленному им адресу.

Дальше читаем по этому адресу начало PE заголовка (допустим там адрес 000000E0) и пишем в командной стппоке: d notepad+E0+28 где 28 это смещение относительно началу PE заголовка (а он в нашем случае начинается по смешению 000000E0 относительно начала файла) по которому находится адрес EP. Вот и всё, спасибо за внимание.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 09 июня 2007 05:13
· Личное сообщение · #2

SeaMan пишет:
Но как быть с образованием?

Это не образование. Это слепое тыканье. Очень интересно, но бессмысленно когда есть документация и вопрос изучен.
Вот если бы ты ковырял загадки природы, про которые мало что известно, вот это была бы наука и образование... И то только если СИСТЕМНО, изучив большинство научных работ по теме.

А вообще я и сам такой. SeaMan, брат самоучка. =)
Пускай даже это бредовое описание, но это не главное. Важно, что ты сам ковыряешься.

Помню сам через несколько дней запутался во всех этих форматах и потом понял, что начинать лучше было не с того.
Лучше (быстрее) было бы освоить основные понятия в программировании и разобрать системные особенности PC:
- простые типы данных;
- структуры данных;
- адресация и т.д.
Покопаться немного с каким-нибудь языком программирования (какой нравится).
Потом с лёгкостью использовать Айсилоновские примеры по PE-формату (или что-то подобное).
Но с другой стороны, начинать-то лучше с чего-то "ощутимого". Так что и такой путь подойдёт.

Здесь ещё раз (уже, наверное, десятый) отсылаю начинающих к документам по PE-формату:
- PE.TXT. Написал Bernd Luevelsmeyer (лучшая дока)
- Здесь в разделе статей (или на wasm.ru) две части "Об упаковщиках в последний раз"
- На openRCE.org есть графическое представление внутренностей PE-файла (кажись "PE Format graph.pdf" называется)
- Исходники загрузчика PE-файлов на С++ (линуксовщикам респект): stanson.chat.ru/yaw_ru.html
- Статья на RSDN, название: "Загрузчик PE-файлов". www.rsdn.ru/?article/baseserv/peloader.xml
- И на (для тех у кого) худой конец от MS дебильная дока PECOFF.pdf

-----
Всем привет, я вернулся




Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 09 июня 2007 16:41 · Поправил: SeaMan
· Личное сообщение · #3

Bitfry пишет:
Это не образование. Это слепое тыканье. Очень интересно, но бессмысленно когда есть документация и вопрос изучен.


Вопрос:

Чему может научить документация на английском языке человека который не знает английского?
Только не надо говарить "она тебя заставит выучить английский". Я и так понял что рано или поздно английский учить надо. Но года 2 назад мне бы такая информация очень многому научила бы и продвинула меня гораздо дальше чем я сейчас.

Ты прав, вопрос исчерпан.

Но посмотри на это с другой стороны. Документаций по теме "заголовки" у меня море. Но ни в одной из них я не нашёл наглядных примеров или экспериментов, которые бы многое не понятное просветили.
Простой пример: где то было написанно в таблице по какому то смещению "размер заголовка в 512байтовых параграфах". Я например тогда ничё не понял пока не поэкспериментировал. Хотя ассемблер и как работает весь Хард уже давольно так и не плохо знал.
А что в документациях написанно? Табличка без примеров и куча текста не по теме. Да и устарели они все уже. Например информацию о Процессоре для выполнения программ мне пришлось искать у Microsoft, т.к на Windows Vista x64 программки скомпилированны для AMD64 (это я узнал уже потом). А в документах про PE формат такое не упоминается.

А вообще это для кого как. Меня например такие стоки как "чтобы найти EP включаем что то типа PE Utilities" ни чему полезному не учат. Разве что набор инструментов. Ну включил я его, ну показал он мне EP. А где суть то? можно тогда его вообще не искать. Включил отладчик в котором эта функция и так уже есть и всё, работай! Или ещё проще скачал кряк для игры из сети и потом ходишь и всем рассказываешь какой ты крэкер крутой

Если бы то, что я выше написал было бы что то новое, я бы его не стал бы писать в раздел для начинающих. Я просто подумал, что может кто нибудь тоже как я тогда мучается и ищет именно это.

Вобщем можно это видеть как подход к проблеме с "другой стороны" ;)



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 09 июня 2007 17:51
· Личное сообщение · #4

SeaMan пишет:
А что в документациях написанно? Табличка без примеров и куча текста не по теме.

В документации (в хорошей) должны быть именованные константы и члены структур, а не конкретные циферки и смещения.
А всё что ты описал, укладывается в выражение:

mov EDI,pFile
cmp word ptr [EDI+IMAGE_DOS_HEADER.e_magic], IMAGE_DOS_SIGNATURE ; проверка MZ-сигнатуры
jnz Fin
add EDI,[EDI+IMAGE_DOS_HEADER.e_lfanew] ; вычисляем указатель на PE-заголовок
cmp dword ptr [EDI+IMAGE_NT_HEADERS.Signature],IMAGE_NT_SIGNATURE ; проверка PE-сигнатуры
jnz Fin
mov EAX,[EDI+IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint] ; Получаем значение EP


-----
Всем привет, я вернулся





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 09 июня 2007 21:09
· Личное сообщение · #5

SeaMan напиши статейку. Хотя не уверен, что её везде разместят, так как вопрос действительно исчерпан.. Да и OEP сейчас найти - это проблема пожалуй возникает, когда прога протом каким-нибудь пожата. Вот по этой теме ручное нахождение OEP было бы интересно многим новичкам..

-----
radio uno in ibisa ...



 eXeL@B —› Вопросы новичков —› Нахождение EP с HEX'ом или WinDbg
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати