Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с .map файлом 
V
    Опции темы
alexnef
Дата 18.2.2011, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



В .map файле нахожу адрес соответствующий строке начала процедуры, шифрую. Процедура должна выполнятся при нажатии на кнопку - следовательно приложение должно запустится - нажал - выскакивает ошибка. А приложение не запускается - ошибка выскакивает сразу. Подозреваю, что шифруется не тот участок, т. е. адрес в мап файле неверный (или относительный). Как найти реальный адрес процедуры?
PM MAIL   Вверх
CodeMonkey
Дата 18.2.2011, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



А теперь ещё раз и по-русски.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bems
Дата 18.2.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Если мне не изменяет память, оно там в формате секция:смещение, ну или на директории увязано. Не конечный VA точно, так что нужно еще в PE порыться чтобы найти относительно чего отсчитывать.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
alexnef
Дата 19.2.2011, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



bems
Спасибо. Буду искать инфу.
PM MAIL   Вверх
alexnef
Дата 28.2.2011, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



Опытным путем выяснил, что адреса в map файле даны для рантайма. В exe пришлось их искать сигнаурным поиском в hex редакторе. Сигнатуру находил выписывая первые байты функции в отладчике.

Добавлено через 2 минуты и 49 секунд
Адрес оказался смещенным на $00000400(магическое число?) дальше указанного в map файле. 
PM MAIL   Вверх
bems
Дата 28.2.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



Цитата(alexnef @  28.2.2011,  11:20 Найти цитируемый пост)
Адрес оказался смещенным на $00000400(магическое число?) дальше указанного в map файле.  
Да нет же. 
Смотри на список секций и на число до двоеточия в адресе функи. Делай выводы.



--------------------
Обижено школьников: 8
PM MAIL   Вверх
CodeMonkey
Дата 28.2.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Тебе по имени найти адрес через .map файл, что-ли?

Рекомендую использовать JclDebug.pas из JCL. Там всё есть.

Единственное волшебное число там - ModuleCodeOffset = $1000; - смещение секции кода от начала модуля. И то может оно вычисляется.

А так - смотрим начало .map-файла:

<= D2005
Код

 Start         Length     Name                   Class
 0001:00000000 00051C2CH .text                   CODE
 0002:00000000 00001194H .data                   DATA
 0002:00001194 00000C05H .bss                    BSS


или:

>= D2006
Код

 0001:00401000 000C1248H .text                   CODE
 0002:004C3000 00000CC8H .itext                  ICODE
 0003:004C4000 00002570H .data                   DATA
 0004:004C7000 000052B0H .bss                    BSS
 0005:00000000 0000003CH .tls                    TLS
 000A:00000000 00000000H .xdata                  PDATA


0001 - это номера сегментов. 00401000 - смещение. Если там 0000000 - то это смещение от секции кода и надо брать умалчиваемое (base + $1000; base для .exe обычно равна $400000).

Ну а далее - смотреть адреса:
Код

  Address         Publics by Name

...

 0001:00005A5C       OemToAnsi
 0001:00005A64       OffsetRect
 0001:00005A6C       OpenClipboard
 0002:00002978       OpenThemeData
 0002:00000B3C       OrientArray
 0002:00000B08       OuterStyles

...



0001 - номер сегмента из оглавления в начале .map.

Т.е. 
(D2005-) OemToAnsi = 0001:00005A5C = 00005A5C + 00000000 + $00400000 + $1000 = $00406A5C
(D2006+) OemToAnsi = 0001:00005A5C = 00005A5C + 00401000 = $00406A5C

$00406A5C - абсолютный адрес начала OemToAnsi в памяти.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
alexnef
Дата 28.2.2011, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



Извиняюсь за некорректно поставленный вопрос. Требовалось найти адрес процедуры в незапущенном exe файле, зашифровать процедуру внешней программой. Map файл показывает адреса процедур во время выполнения. Пока exe не загружен в память эти адреса(в map и фактический в exe) не совпадают. 
PM MAIL   Вверх
northener
Дата 1.3.2011, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(alexnef @  28.2.2011,  21:19 Найти цитируемый пост)
Требовалось найти адрес процедуры в незапущенном exe файле, зашифровать процедуру внешней программой.

А это как и для чего?
Понятно, что речь идёт о своей программе.
Аппаратные ключи осваиваем?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.