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

 eXeL@B —› Вопросы новичков —› Вопрос по релокам
Посл.ответ Сообщение

Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 15 июля 2007 16:28
· Личное сообщение · #1

В dllке после секции релоков много нулей.
Добавляю в dll'ку 2 релока в секцию релоков там где нули в конце. Меняю соответственно размер директории релоков в pe editore, все работает отлично.

Но стоит только добавить еще один релок (третий) туда же где нули как возникает глюк.
При загрузке файла в olly когда там загружается эта dll пишется "Bad or unknown format of 32 bit executable...", но при этом все продолжает загружаться и третий релок правильно исправляется (но при этом релоки почему-то не подчеркиваются!).

Нулей еще дофига, следущая секция начинается через много байтов.

Что это за странный глюк? 2 релока - все ок 3 релока - глюк?



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

Создано: 15 июля 2007 18:28 · Поправил: Bitfry
· Личное сообщение · #2

Написал я тут какой-то бред .
Размер директории должен быть равен размеру суммы полей SizeOfBlock (то есть общему размеру блоков).
Если ты добавляешь блок, то делай это так:

Dword на RVA, dword на SizeOfBlock, и тут пошли релоки word,word,word...
Но не забывай исправлять SizeOfBlock и размер директории.

Сейчас пойду править свою доку по релокам.

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




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

Создано: 15 июля 2007 19:21
· Личное сообщение · #3

Прикрепляю то что успел написать (далеко не окончательный вариант).
Эта дока пишется для редактора релоков, но его релиз всё откладывается и откладывается.

66a5_15.07.2007_CRACKLAB.rU.tgz - Релокация в PE.doc

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




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 июля 2007 07:34
· Личное сообщение · #4

Так это я вроде и так все понял. Если я косячу с размером директории, или sizeofblock то Dll'ка даже не грузиться в память, а в моем случае она загружается все вроде работает, все ролоки релокятся но при этом Olly орет "Bad or unknown format of 32 bit executable...", не подчеркивает релоки и еще не работает сохранение (copy to executable).

У меня всего было 3 добавленых релока, каждый по отдельности вида XXXX XXXX 0AXX XXXX XX3X и возникал этот баг. Потом я попробовал склеить 2 из трех релоков и сделал XXXX XXXX 0СXX XXXX XX3X XX3X и баг пропал. Сейчас добавил еще 2 релока и снова баг появился...

Может релоки надо добавлять в каком-то особом порядке или еще чего? Может есть какая прога для автоматического добавления релоков?



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

Создано: 18 июля 2007 08:20
· Личное сообщение · #5

sliderZ пишет:
Может есть какая прога для автоматического добавления релоков?

Есть... Но она ещё не готова.

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

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




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 июля 2007 11:11
· Личное сообщение · #6

Вот файл, мои последние 5 релоков.

dump.ru/files/4/49840902771/



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

Создано: 18 июля 2007 11:39 · Поправил: Bitfry
· Личное сообщение · #7

sliderZ, ты не вкурил мою доку.

Что ты пытался сделать, создать блок для каждого релока отдельно - это не есть верно (в твоём случае).
Почему?
Потому что, во-первых каждый блок должен быть кратен 1000h, во-вторых для этих релоков уже есть блоки, а повторы приводят к глюкам.

В твоём случае нужно найти подходящее место в уже существующих блоках (31000,3А000,3В000). Соответственно нужно сдвинуть ниже всё что после и перебить размер изменяемых блоков.
Мой редактор всё это будет делать, но только не сегодня
А пока смотри как это выглядит в PE-explorer'e.

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




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 июля 2007 14:23
· Личное сообщение · #8

Попробовал так и сделать, добавил первый релок, который по 3A68E + 2, в блок 3A000. Причем поместил его (9036) строго по порядку возрастания.
Оставшиеся релоки передвинул на 2 байта, увеличил размер этого блока и размер директории на 2 байта.
Пробовал удалить .udd файл в olly, все равно лезет "Bad or unknown format of 32 bit executable".

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



Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 11 августа 2007 15:52
· Личное сообщение · #9

Разобралсо наконец еп-та.
Размер каждого блока должен быть кратен 4, именно поэтому в конце блоков у которых размер не кратен 4 добавляютсо абсолютные релоки 0000 чтобы стало кратно. Поэтому когда я добавлял один релок то возникал глюк, а когда 2 тогда работало.
У тебя в доке про это не написано Bitfry.

При этом чтобы блок был кратен 0x1000 вроде бы не обязательно, добавлял свои блоки на любые адреса, глюков вроде не заметил, главно чтобы размер блока делился на 4.



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

Создано: 12 августа 2007 09:20
· Личное сообщение · #10

sliderZ пишет:
Размер каждого блока должен быть кратен 4, именно поэтому в конце блоков у которых размер не кратен 4 добавляютсо абсолютные релоки 0000 чтобы стало кратно. Поэтому когда я добавлял один релок то возникал глюк, а когда 2 тогда работало.
У тебя в доке про это не написано Bitfry.

Спасибо.
А у меня даже наоборот написано, типа это не важно.
Когда писал – экспериментировал и, вроде бы, работало. Как освобожусь, буду разбираться.

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




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

Создано: 17 августа 2007 17:02
· Личное сообщение · #11

Эксперименты показали, что система ведёт себя по-разному.
Если dll прописана в импорте, то, например, размер директории не обязательно должен совпадать с суммой размеров блоков, а если загружать её через LoadLibrary, то при несовпадении размеров возникнет критический глюк. Это просто пример, есть и другие приколы.

Прикрепляю сюда примерчик из MASM32. CALLDLL.EXE - грузит либу через LoadLibrary, LOADDLL.EXE – завёт через импорт.
Но во всех случаях у меня TSTDLL.DLL прекрасно грузится (и даже Оля не ругается) несмотря на то, что я подправил размер блока и директории до 1Eh (никак не кратно 4).
Так что, возможно проблему ты решил чем-то другим?


87ee_17.08.2007_CRACKLAB.rU.tgz - test_dll.rar

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




Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 августа 2007 12:02
· Личное сообщение · #12

В твоей DLL только один блок, возможно это как-то влияет на загрузчик.
Попробуй сделать 2 или 3 блока подряд, размер которых не кратен 4.



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

Создано: 20 августа 2007 20:12
· Личное сообщение · #13

sliderZ пишет:
В твоей DLL только один блок, возможно это как-то влияет на загрузчик.

Да не-е, системному загрузчику пофигу, а вот у Ольки крыша действительно съезжает если блоков >1.

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



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


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