Сейчас на форуме: ManHunter, rmn, _MBK_, tyns777 (+10 невидимых)

 eXeL@B —› Программирование —› Получить RSize директории в PE формате
Посл.ответ Сообщение

Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 07:55
· Личное сообщение · #1

Доброе утро всем!Возможно мой вопрос для вас покажеться глупым,или кто-то уже такой вопрос задавал,на форуме я подобного не нашел.((((

В некоторых exe собраных в Visual Studio,а также запакованых ехе,например Upx-сом в одной секции содержитться несколько секций,например в ехе упакованом Upx в секции .rsrc содержиться секция инициализированых данны,а также секция имопрта и ресурсов.Чтобы найти адреса этих секций,нужно посмотреть адреса их директорий через структуру DataDirectory,в которой только два параметра это VOffset и VSize,для code директории нет,для определения ее местоположения юзаються два поля из опционального заголовка-Base of Code и Size of Code.Мне нужно узнать ROffset и RSize.С ROffset-ом все понятно,там по формуле вычисляеться,а какая формула для RSize,как его вычислить?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 30 марта 2012 08:25
· Личное сообщение · #2

Вроде была такая тема, только давно. Кажись сошлись что только примерно и сигнатурно можно определить некоторые секции.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 марта 2012 09:00
· Личное сообщение · #3

не совсем воткнул в вопрос, чем Size of Code не устраивает? ну или как вариант, смотреть какой секции принадлежит Base of Code и считать её кодовой?

-----
[nice coder and reverser]




Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 09:29
· Личное сообщение · #4

Hellspawn,мне перед тем как работать с секциями,нужно кое что проверить:
1)Есть ли в секции оверлей if(RSize>VSize) или в ней содержаться неинициализированые данные if(RSize<VSize),или же RSize==VSize

2)Мне секцию шифровать нужно только в пределах ROffset~ROffset+RSize;

Короче,как не крути а нужно знать RSize((




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 марта 2012 09:50
· Личное сообщение · #5

Sawyer
в секции оверлей? оверлей идет после всех секций и им не принадлежит. обычно в кодовой секции находится только код.

-----
[nice coder and reverser]




Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 09:58
· Личное сообщение · #6

Ну я кодовую секцию так для примера привел.
Читал статью zOmbie,он там привел примеры ситуаций,которые я выше описал.
Вобщем суть в том чтобы зашифровать содержимое секции на диске,а так как я незнаю ее реального размера,то могу выйти за ее пределы,и покоцать следующую секцию.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 марта 2012 10:03
· Личное сообщение · #7

Sawyer ну в таблице секций же есть размер секции (виртуальный и реальный)

-----
[nice coder and reverser]




Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 10:13
· Личное сообщение · #8

Hellspawn так и есть.Ты меня немного не понял.Я же привел пример с Upx.

например Upx-сом в одной секции содержитться несколько секций,например в ехе упакованом Upx в секции .rsrc содержиться секция инициализированых данны,а также секция имопрта и ресурсов


Например мне нужно зашифровать секцию инициализированых данны,а ее реального размера я незнаю.Может быть покоцана секция импорта,если ROffset+VOffset секции с данными будет больше чем ROffset секци импорта.Я понимаю конечто,что можна проверять долго и уныло не выходит ли каждая директория за границу следующей,но может есть более нормальный способ?



Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 30 марта 2012 10:18 · Поправил: vnekrilov
· Личное сообщение · #9

Мне, при распаковке программ, упакованных PEP, Themida и т.п., часто приходится восстанавливать оригинальные секции файлов. Для этих целей, я определяю, на каком языке была написана программа, нахожу неупакованные программы, написанные на этом языке, и путем тупого сравнения, нахожу нужные секции с их размерами. Для этих целей, я даже написал скрипт, который, перед дампированием памяти программы, корректирует PE-заголовок файла. Правда, в этот скрипт, начало каждой секции я ввожу вручную, а дальше скрипт сам вычисляет размеры секций, и корректирует PE-заголовок.

b6d1_30.03.2012_EXELAB.rU.tgz - Themida - Корректировка PE-заголовка и дампирование распакованного файла.osc

| Сообщение посчитали полезным: Sawyer

Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 10:32
· Личное сообщение · #10

vnekrilov спасибо,но это все не то.Я начал писать свой протектор,так что он должен быть универсальным для всех PE файлов,реальный размер нужно автоматически определить.Просто думал что есть какой то документированый способ,формула что ли.(((((



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 30 марта 2012 11:00 · Поправил: Veliant
· Личное сообщение · #11

Sawyer, тебе лень проверить что тебе Hellspawn сказал?
на примере блокнота под upx
Code:
  1. Size of code                         00005000
  2. Size of init data                    00008000
  3. Size of uninit data                  00010000
  4.  
  5. Base of code                         00011000
  6. Base of data                         00016000
  7. Image base                           01000000

Code:
  1. 1 UPX0     00010000 00001000 00000000 00000400 E0000080
  2. 2 UPX1     00005000 00011000 00004600 00000400 E0000040
  3. 3 .rsrc    00008000 00016000 00007200 00004A00 C0000040

Code:
  1. Import       0001CE24 0000024C
  2. Resource     00016000 00006E24

Что мы видим? Base of code = VAddr UPX1, Size of code = VSize UPX1.
Отсюда RAddr= RAddr UPX1, RSize = min(Size of code, RSize UPX1)
Импорт и ресурсы лежат уже в следующей секции, и не попадают в Base of code+Size of code



Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 11:19 · Поправил: Sawyer
· Личное сообщение · #12

Veliant ну а например как бысть с WinSpy++,собран в Visual C++ 6.0

Code:
  1. 00400000   00001000   WinSpy++              PE header                                               
  2. 00401000   00002000   WinSpy++   .rdata     code,imports                                             
  3. 00403000   00015000   WinSpy++   .data      SFX,data                                                 
  4. 00418000   00007000   WinSpy++   .rsrc      resources 


BaseOfCode RVA=00001000;VA=4000001000;ROffset=400;

SizeOfCode вобще равен 0,и что теперь делалать?



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 30 марта 2012 11:26 · Поправил: Veliant
· Личное сообщение · #13

Sawyer пишет:
SizeOfCode вобще равен 0,и что теперь делалать?

Пробежаться по всем секциям и посмотреть, у которых стоят IMAGE_SCN_MEM_EXECUTE и IMAGE_SCN_CNT_CODE

Если боишься нарваться на импорт, ресурс и прочее, то почему бы не посмотреть их адреса, и не лезть за них

Не спорю, есть exe у которых и эти биты затерты. Получается нужно смотреть размер секции на которую указывает baseofcode и пропускать в ней все остальные данные при шифровании

| Сообщение посчитали полезным: Sawyer

Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 11:41 · Поправил: Sawyer
· Личное сообщение · #14

Veliant все я суть уловил.Благодарю




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 30 марта 2012 13:35
· Личное сообщение · #15

Sawyer
А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 марта 2012 13:41
· Личное сообщение · #16

ARCHANGEL кстати верная мысль, посмотреть как поступают другие пакеры/проты,
например тот же упх

з.ы. антивирус на такой файл будут верещать будь здоров

-----
[nice coder and reverser]





Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 30 марта 2012 15:29
· Личное сообщение · #17

ARCHANGEL пишет:
А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается.

Да тут ненадо ничего изобретать после расскриптовки-расспаковки файла в памяти поставит атрибуты c помощью VirtualProtect на чтение,запись,исполнение и всё будет воркать

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 марта 2012 20:57
· Личное сообщение · #18

ARCHANGEL пишет:
А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается.


ARCHANGEL я пока алгоримт общий подбираю,чтоб для всех ехе работал.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 30 марта 2012 23:20
· Личное сообщение · #19

Нет такого алгоритма. Лучше ответь на вопрос, для чего нужно принциально обрабатывать только код?



Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 марта 2012 01:18
· Личное сообщение · #20

Archer пишет:
Лучше ответь на вопрос, для чего нужно принциально обрабатывать только код?


Несовсем понял вопрос.Ты в плане зачем нужно шифровать секцию с кодом?Или что ты имееш в виду?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 31 марта 2012 10:05
· Личное сообщение · #21

Зачем шифровать ТОЛЬКО код и закидывать ногу за ухо, пытаюсь отделить его секции. Почему бы не зашифровать весь образ, размеры которого вполне фиксированы, как это все делают.



Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 апреля 2012 22:42
· Личное сообщение · #22

Разобрался с данным вопросом.Спасибо всем кто принимал участие!



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 05 апреля 2012 22:56
· Личное сообщение · #23

К чему в итоге пришел? Шифровать все и восстанавливать образ полностью? Или все таки шифровать только часть как задумывалось?



Ранг: 5.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 апреля 2012 19:31 · Поправил: Sawyer
· Личное сообщение · #24

Veliant пишет:
К чему в итоге пришел? Шифровать все и восстанавливать образ полностью? Или все таки шифровать только часть как задумывалось?


шифровать только часть как задумывалось.Все-таки коректный алгоритм подобрал.


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


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