eXeL@B —› Программирование —› Получить RSize директории в PE формате |
Посл.ответ | Сообщение |
|
Создано: 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,как его вычислить? |
|
Создано: 30 марта 2012 08:25 · Личное сообщение · #2 |
|
Создано: 30 марта 2012 09:00 · Личное сообщение · #3 |
|
Создано: 30 марта 2012 09:29 · Личное сообщение · #4 Hellspawn,мне перед тем как работать с секциями,нужно кое что проверить: 1)Есть ли в секции оверлей if(RSize>VSize) или в ней содержаться неинициализированые данные if(RSize<VSize),или же RSize==VSize 2)Мне секцию шифровать нужно только в пределах ROffset~ROffset+RSize; Короче,как не крути а нужно знать RSize(( |
|
Создано: 30 марта 2012 09:50 · Личное сообщение · #5 |
|
Создано: 30 марта 2012 09:58 · Личное сообщение · #6 |
|
Создано: 30 марта 2012 10:03 · Личное сообщение · #7 |
|
Создано: 30 марта 2012 10:13 · Личное сообщение · #8 Hellspawn так и есть.Ты меня немного не понял.Я же привел пример с Upx. например Upx-сом в одной секции содержитться несколько секций,например в ехе упакованом Upx в секции .rsrc содержиться секция инициализированых данны,а также секция имопрта и ресурсов Например мне нужно зашифровать секцию инициализированых данны,а ее реального размера я незнаю.Может быть покоцана секция импорта,если ROffset+VOffset секции с данными будет больше чем ROffset секци импорта.Я понимаю конечто,что можна проверять долго и уныло не выходит ли каждая директория за границу следующей,но может есть более нормальный способ? |
|
Создано: 30 марта 2012 10:18 · Поправил: vnekrilov · Личное сообщение · #9 Мне, при распаковке программ, упакованных PEP, Themida и т.п., часто приходится восстанавливать оригинальные секции файлов. Для этих целей, я определяю, на каком языке была написана программа, нахожу неупакованные программы, написанные на этом языке, и путем тупого сравнения, нахожу нужные секции с их размерами. Для этих целей, я даже написал скрипт, который, перед дампированием памяти программы, корректирует PE-заголовок файла. Правда, в этот скрипт, начало каждой секции я ввожу вручную, а дальше скрипт сам вычисляет размеры секций, и корректирует PE-заголовок. b6d1_30.03.2012_EXELAB.rU.tgz - Themida - Корректировка PE-заголовка и дампирование распакованного файла.osc | Сообщение посчитали полезным: Sawyer |
|
Создано: 30 марта 2012 10:32 · Личное сообщение · #10 |
|
Создано: 30 марта 2012 11:00 · Поправил: Veliant · Личное сообщение · #11 Sawyer, тебе лень проверить что тебе Hellspawn сказал? на примере блокнота под upx Code:
Code:
Code:
Что мы видим? 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 |
|
Создано: 30 марта 2012 11:19 · Поправил: Sawyer · Личное сообщение · #12 Veliant ну а например как бысть с WinSpy++,собран в Visual C++ 6.0 Code:
BaseOfCode RVA=00001000;VA=4000001000;ROffset=400; SizeOfCode вобще равен 0,и что теперь делалать? |
|
Создано: 30 марта 2012 11:26 · Поправил: Veliant · Личное сообщение · #13 Sawyer пишет: SizeOfCode вобще равен 0,и что теперь делалать? Пробежаться по всем секциям и посмотреть, у которых стоят IMAGE_SCN_MEM_EXECUTE и IMAGE_SCN_CNT_CODE Если боишься нарваться на импорт, ресурс и прочее, то почему бы не посмотреть их адреса, и не лезть за них Не спорю, есть exe у которых и эти биты затерты. Получается нужно смотреть размер секции на которую указывает baseofcode и пропускать в ней все остальные данные при шифровании | Сообщение посчитали полезным: Sawyer |
|
Создано: 30 марта 2012 11:41 · Поправил: Sawyer · Личное сообщение · #14 |
|
Создано: 30 марта 2012 13:35 · Личное сообщение · #15 Sawyer А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 30 марта 2012 13:41 · Личное сообщение · #16 |
|
Создано: 30 марта 2012 15:29 · Личное сообщение · #17 ARCHANGEL пишет: А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается. Да тут ненадо ничего изобретать после расскриптовки-расспаковки файла в памяти поставит атрибуты c помощью VirtualProtect на чтение,запись,исполнение и всё будет воркать ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 30 марта 2012 20:57 · Личное сообщение · #18 ARCHANGEL пишет: А вот я не уловил. Получается, я при компиляции собираю свой софт с указанием линкеру слить всё в одну секцию (опция /merge), потом выставляю всем секциям одинаковые атрибуты, и затираю неиспользуемые Base of Code/Data, и чё - протектор такой файл не упакует? Хреновый какой-то у вас протектор получается. ARCHANGEL я пока алгоримт общий подбираю,чтоб для всех ехе работал. |
|
Создано: 30 марта 2012 23:20 · Личное сообщение · #19 |
|
Создано: 31 марта 2012 01:18 · Личное сообщение · #20 |
|
Создано: 31 марта 2012 10:05 · Личное сообщение · #21 |
|
Создано: 05 апреля 2012 22:42 · Личное сообщение · #22 |
|
Создано: 05 апреля 2012 22:56 · Личное сообщение · #23 |
|
Создано: 06 апреля 2012 19:31 · Поправил: Sawyer · Личное сообщение · #24 |
eXeL@B —› Программирование —› Получить RSize директории в PE формате |