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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вытаскивание строк из PE-файла 
V
    Опции темы
ASGDeveloper
Дата 6.12.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Может кто знает вытащить из exe-шника строчки?
На вроде того, как это делает PEId.
(First bytes->Strings)
PM MAIL   Вверх
dumb
Дата 6.12.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



PEiD не вытаскивает строчки - он сигнатурный поиск производит по своей базе и потом результат выдает.
тебе зачем строчки эти? есть какие-то программки мелкие - типа strings.exe или что-то вроде того...

edit: вот - Strings. там и принцип действия описан одной строкой... smile

Это сообщение отредактировал(а) dumb - 6.12.2006, 20:23
PM MAIL   Вверх
Sunvas
Дата 6.12.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Наверное ты сам толком над темой не работал! smile 

Копай сюда: %Delphi 7.0 folder%\Demos\ResXplor


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ASGDeveloper
Дата 8.12.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Честно говоря я не совсем понял принцип работы strtings.exe  smile 
Что касается просмотровщика ресурсов. В аттаче лежит файлик. Если его открыть просмотровщиком, то он ругнется. Дело в том, что я имею в виду не ресурсные строки. Кстати, PEId отлично показывает все строки из этого файла.

PS Переименуйте аттач в hello.rar

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  HELLO.jpg 0,41 Kb
PM MAIL   Вверх
W4FhLF
Дата 8.12.2006, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

На вроде того, как это делает PEId.
(First bytes->Strings)


Алгоритм там простой: Ищется первый печатаемый символ, за ним проверяется второй, если он тоже печатаемый, то проверяется 3ий и т.д. Т.о. если набирается определённое кол-во идущих подряд печатаемых символов PEiD делает вывод о том, что это строка.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ASGDeveloper
Дата 8.12.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


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

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



Цитата(W4FhLF @  8.12.2006,  16:41 Найти цитируемый пост)
Алгоритм там простой

Вот-вот, я замутил прогу по аналогичному алгоритму. Правда ограничитель поставить не догадался. smile
И все же алгоритм у ПЕЙда должен быть другой. Ведь если читать по-символьно, это будет ой как долго, а работу свою пейд выполняет быстро.
PM MAIL   Вверх
W4FhLF
Дата 8.12.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

И все же алгоритм у ПЕЙда должен быть другой.


Какой? Не вижу тут других вариантов. Насчёт скорости, то тут всё дело в оптимизации, и алгоритме использования этого алгоритма(пардонsmile)


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Voyager
Дата 9.12.2006, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да какая там скорость? Прочитать заголовок и все, современные компьютеры позволяют это делать довольно быстро. smile

Это сообщение отредактировал(а) Voyager - 9.12.2006, 02:11
PM   Вверх
W4FhLF
Дата 9.12.2006, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

Прочитать заголовок и все


Какой нафиг заголовок? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alexeis
Дата 9.12.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Еще можно узнать по спец признакам. Если это делфийская строка то перед самой строкой 4 байта это ее размер, а заканчивается она нулем. Если паскалевская то 1 байт размер и скорее всего тоже заканчивается нулем, если сишный char то 100% заканчивается нулем. если юникод, то размер делфийской строки (в байтах) будет в 2 раза больше указанного числа.

Цитата(W4FhLF @  9.12.2006,  06:30 Найти цитируемый пост)
Какой нафиг заголовок?  

заголовок EXE тоже нужно читать, но для того чтобы искать строки только внутри сегментов, а не лезть в таблицу импорта или в пространство между секциями или, например, залезть в секцию ресурсов и искать строку в записанной там картинке. Т.е. нужно разобрать экзешник на секции и искать только там где могут быть строки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 9.12.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

Еще можно узнать по спец признакам. Если это делфийская строка то перед самой строкой 4 байта это ее размер, а заканчивается она нулем. Если паскалевская то 1 байт размер и скорее всего тоже заканчивается нулем, если сишный char то 100% заканчивается нулем. если юникод, то размер делфийской строки (в байтах) будет в 2 раза больше указанного числа.


Зачем эти дополнительные проверки нужны? Т.е. ты предлагаешь сначала находить последовательность печатаемых символов, потом проверять не равна ли их длина значению dword'а(кстати по-моему там word) перед ними и только потом выдавать строку? Но если учесть, что делфийская строка может на конце иметь не $0, а выдавать последовательность большого числа(>3) идущих подряд печатаемых символов по логике придётся в любом случае, то все эти признаки идут лесом, они просто ни к чему.

Цитата

заголовок EXE тоже нужно читать, но для того чтобы искать строки только внутри сегментов, а не лезть в таблицу импорта или в пространство между секциями или, например, залезть в секцию ресурсов и искать строку в записанной там картинке. Т.е. нужно разобрать экзешник на секции и искать только там где могут быть строки.


Я прекрасно понимаю что такое PE формат и его заголовки, я имел ввиду другое. И тут я могу столько опровержений твоим словам найти, что можно сделать вывод о твоей некомпетентности в этом вопросе.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alexeis
Дата 9.12.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(W4FhLF @  9.12.2006,  14:18 Найти цитируемый пост)
Зачем эти дополнительные проверки нужны?
 Подсчитайте вероятность случайного совпадения и вы поймете, что кроме полезных строк у вас будет еще куча ;%"@ вот такой фигни.

Цитата(W4FhLF @  9.12.2006,  14:18 Найти цитируемый пост)
кстати по-моему там word

Че спорить почитаете делфийский хелп.

Цитата(W4FhLF @  9.12.2006,  14:18 Найти цитируемый пост)
Но если учесть, что делфийская строка может на конце иметь не $0, а выдавать последовательность большого числа(>3) идущих подряд печатаемых символов по логике придётся в любом случае, то все эти признаки идут лесом, они просто ни к чему.


Это все дополнительный проверки чтоб исключить эффект случайности. Кроме того строки в стиле делфи ВСЕГДА имеют на конце ноль. Строки в стиле паскаль могут не иметь нуля НО у них размер строки указывается числом ВСЕГО в 1 БАЙТ, потому их можно отличить! Все остальные строки имеют на конце ноль. 

Цитата(W4FhLF @  9.12.2006,  14:18 Найти цитируемый пост)
И тут я могу столько опровержений твоим словам найти, что можно сделать вывод о твоей некомпетентности в этом вопросе. 


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

Добавлено @ 15:05 
Цитата

A long string variable occupies four bytes of memory which contain a pointer to a dynamically allocated string. When a long string variable is empty (contains a zero-length string), the string pointer is nil and no dynamic memory is associated with the string variable. For a nonempty string value, the string pointer points to a dynamically allocated block of memory that contains the string value in addition to a 32-bit length indicator and a 32-bit reference count. The table below shows the layout of a long-string memory block.

Long string dynamic memory layout 
Offset      Contents
-8        32-bit reference-count
-4        length in bytes
0..Length - 1    character string
Length      NULL character


Добавлено @ 15:08 
Цитата

Short string types
-------------------------------------------------
A string occupies as many bytes as its maximum length plus one. The first byte contains the current dynamic length of the string, and the following bytes contain the characters of the string.

The length byte and the characters are considered unsigned values. Maximum string length is 255 characters plus a length byte (string[255]).



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 9.12.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



единственный тип строк не кончающийся нулем это 
Код

const 
  Digits: array[0..19] of Char = '01234567890123456789';


но тут уж ничего не поделать в памяти это выглядит как 
303132333343536373839303132333343536373839 т.е. чисто массив символов, но тем не менее в понимании делфи это тоже строка.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
W4FhLF
Дата 9.12.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Эх, alexeis1, не хочется мне поддерживать этот спор, который, я чувствую, надолго затянется, но вы меня вынуждаете(Чё это мы на Вы?smile). 

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

Цитата

 Подсчитайте вероятность случайного совпадения и вы поймете, что кроме полезных строк у вас будет еще куча ;%"@ вот такой фигни.


Вот это меня поразило до глубины души... вероятностью случайного совпадения, а точнее вероятность того, что это совпадение случайно равна вероятности обратного и утверждать, что в природе не бывает случаев, когда эти данные не есть фигня просто глупо.
Хорошо, предположим у нас программа на делфи и зная длину строки мы можем отсеить такой вот мусор, а если программа не на делфи? Исходя из Вашей позиции нам сначала нужно определить компилятор, я не буду расписывать как это можно сделать и какие подводные камни здесь можно встретить, т.к. и без этого ясно, что это не имеет никакого смысла(я думаю поэтому это и не реализуют опытные разработчики пеида).

Цитата

Че спорить почитаете делфийский хелп.


Убедился, действительно 4 байта.

Цитата

Это все дополнительный проверки чтоб исключить эффект случайности. Кроме того строки в стиле делфи ВСЕГДА имеют на конце ноль. Строки в стиле паскаль могут не иметь нуля НО у них размер строки указывается числом ВСЕГО в 1 БАЙТ, потому их можно отличить! Все остальные строки имеют на конце ноль. 


С этим тоже согласен, но всё-таки не с потолка я взял то, что не всегда там 0, может быть в старых версиях это условие было необязательым?

Цитата

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


Цитата

заголовок EXE тоже нужно читать, но для того чтобы искать строки только внутри сегментов, а не лезть в таблицу импорта или в пространство между секциями или, например, залезть в секцию ресурсов и искать строку в записанной там картинке. Т.е. нужно разобрать экзешник на секции и искать только там где могут быть строки.


Что ты подразумеваешь под сегментами, я так понимаю секции?
1. Таблица импорта может находится как внутри отдельной секции, так и в любой другой, совместно с любыми данными. Поэтому ориентироваться, если уж решил обойти таблицу, нужно на таблицу директорий, а не секции.
2. Какое может быть пространство между секциями? Нет, один очень известный человек проделывал как-то трюк, когда RawOffset+RawSize i-ой секции не равен RawOffset секции i+1, но на практике ни один из припоминаемых мною компиляторов/упаковщиков/протекторов не делает так, т.е. секции в файле идут друг за дружкой. Может показаться, что там есть какой-то пустое пространство из-за того, что они выравнены на значение FileAlignment, но фактически между ними нет пространства, которое бы не проецировалось на память лоадером винды.
К тому же, если допустить такую ситуацию, то можно сделать вывод, что сделано это в целях защиты, а мы просто возьмём и проигнорируем эти строки.
3. А строки могут быть везде... В том числе и в оверлее, который мы, исходя из Ваших понятий, благополучно пропустим, т.к. записей об оверлее в таблице секций естественно нет.



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Alexeis
Дата 9.12.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(W4FhLF @  9.12.2006,  17:57 Найти цитируемый пост)
Что ты подразумеваешь под сегментами, я так понимаю секции?

Конечно, это же синонимы. 

Цитата(W4FhLF @  9.12.2006,  17:57 Найти цитируемый пост)
но на практике ни один из припоминаемых мною компиляторов/упаковщиков/протекторов не делает так, т.е. секции в файле идут друг за дружкой. 

А вот делфи совсем так не делает. Есть спец программа StrepReloc, которая уменьшает размер делфийского экзешника за счет сокращения пространства между секциями, причем довольно существенно, значит что-то там есть. Оверлеи наверняка тоже можно найти. Ведь есть программы типа AsPack, которые предлагают сжимать или не сжимать оверлеи, значит их можно таки найти. Да аналогично и таблица импорта экспорта, пусть она расположена внутри другой секции, это же повод для того чтобы ее не искать. Надо ради пробы написать такую программку которая ищет без разбора строки. Я уверен что она выдаст их такое количество, что мало не покажется.

По поводу отличия программы на делфи от С++. Тут вообще не должно быть сложностей. Секция кода в делфи завется "CODE" а в Microsoft С++ ".code" . Признаков на самом деле много. Стоит глянуть хотя бы в ресурсы.

Цитата(W4FhLF @  9.12.2006,  17:57 Найти цитируемый пост)
К тому же, если допустить такую ситуацию, то можно сделать вывод, что сделано это в целях защиты, а мы просто возьмём и проигнорируем эти строки.


Для поиска защищенных строк это вообще дохлый пример, так как они наверняка зашифрованы и будут элементарно проигнорированы как символы не попадающие в таблицу.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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