Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› DLL выше 2 Gb
Посл.ответ Сообщение


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

Создано: 24 октября 2006 06:40 · Поправил: Hellspawn
· Личное сообщение · #1

вот понадобилась состряпать длл с imagebase > 80000000 (экспереминтирую над WinME),
но дельфовый компилятор ругается:

[Error] Project1.dpr(1): Imagebase is too high - program exceeds 2 GB limit

если задать в ручную пе-едитором, то длл не грузиться и вылетает с ошибкой
кто-нибудь сталкивался с этим? (чем можно замутить такую библу?)

-----
[nice coder and reverser]




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

Создано: 24 октября 2006 07:28
· Личное сообщение · #2

Адреса с 80000000h отведены под ядро. И если ты правишь длл-ку пеэдитором, просто меняя ImageBase, то тебе надо править и адреса в релоках с поправкой на новую Image Base... Короче, юзерскую библиотеку ты не сделаешь.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 24 октября 2006 07:34
· Личное сообщение · #3

Можно дизассемблировать компилятор дельфи, смотреть где он выдает такую ошибку\код ошибки и изменить переход после сравнения.
Я так делал с менеджером для Siemens - он не хотел отправлять файлы с расширениями, не входящих в его список.




Ранг: 105.9 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 24 октября 2006 07:51
· Личное сообщение · #4

MoonShiner пишет:
Адреса с 80000000h отведены под ядро

В 9X это не ядро.
Адреса с 0x00400000-0x7FFFFFFF в 9x отведены для кода и данных пользовательского режима.
А вот адреса 0x80000000 - 0xBFFFFFFF для общих MMF (файлов, проецируемых в память). Так что, загружай свою dll в ручную через MMF.



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 24 октября 2006 07:55
· Личное сообщение · #5

Hellspawn
Руссинович рулит! обычно выделяется как:

1 случай:
1. Юзеру - 2ГБ
2. Ядру - 2Гб

2й случай:
1. Юзеру - 3ГБ
2. Ядру - 1Б

2й случай в 9х не попрет! Попрет только на NT со спец.ключем в boot.ini в самом начале об этом в книге Руссиновича!

-----
My love is very cool girl.




Ранг: 17.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 октября 2006 07:55 · Поправил: Sax0n
· Личное сообщение · #6

MoonShiner, theCollision
Адреса с 0x80000000 по 0xBFFFFFFF в 9х отведены под Shared Memory-Mapped File (MMF).

Hellspawn
попробуй EDITBIN /REBASE:BASE=0x80000000 myfile.dll




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

Создано: 24 октября 2006 08:19 · Поправил: Hellspawn
· Личное сообщение · #7

просто есть библа APISpy9x.dll, она как раз так и делает...

Sax0n пишет:
EDITBIN /REBASE:BASE=0x80000000 myfile.dll


нашёл, какую то ошибку выдаёт =( лан буду разбираться...

HoBleen пишет:
Можно дизассемблировать компилятор дельфи, смотреть где он выдает такую ошибку\код ошибки и изменить переход после сравнения.
Я так делал с менеджером для Siemens - он не хотел отправлять файлы с расширениями, не входящих в его список.


походу не прокатит, хотя я попробую..

seeq пишет:
Так что, загружай свою dll в ручную через MMF.


чуть поподробнее

-----
[nice coder and reverser]





Ранг: 105.9 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 24 октября 2006 08:37
· Личное сообщение · #8

Hellspawn пишет:
чуть поподробнее


Запуск файла из памяти
www.wasm.ru/print.php?article=memfile

Загрузчик PE-файлов (на delphi) в атаче

88d0_24.10.2006_CRACKLAB.rU.tgz - Загрузчик PE-файлов.chm



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

Создано: 24 октября 2006 09:40
· Личное сообщение · #9

Сорри, не заметил, что тема про WinME
MMF - Memory-mapped files. Подробностей, к сожалению, не помню, но насколько помню, все достаточно просто реализовано



Ранг: 17.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 октября 2006 09:45
· Личное сообщение · #10

Hellspawn
editbin - тулза мелкомягких идет с ихним линкером. ей нужен Link.exe и MSPDB60.DLL. делаешь ребейс ей и все чикипоки. ... хотя нет, не все ;) есть мелкая хитрость даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000

Если не интересно поправить это самому ( типа крякми - фиксит ), то пиши.




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

Создано: 24 октября 2006 09:51
· Личное сообщение · #11

Sax0n

ещё она в поставке с масм32 идёт...
и та и та тулза выдаёт: "LINK: error : Internal error during SetupPhase" пробовал разные длл

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

-----
[nice coder and reverser]




Ранг: 17.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 октября 2006 09:56
· Личное сообщение · #12

а... еще способ придумал (правда этот лень проверять). В PETools и LordPE и иже с ними, есть такая штука как ребилд PE и в опциях этого ребилдера можно повый ImageBase прописать

попробуй и отпиши.




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

Создано: 24 октября 2006 10:15 · Поправил: Hellspawn
· Личное сообщение · #13

хм, странно... после шаманство с пе-туулз выяснилось,
что после смены imagebase на $BFF70000, длл грузиться, но по странному
адрессу $00CD0000, хотя при компиляции указано $10000000
я прям в шоке, мистика да и только...

-----
[nice coder and reverser]




Ранг: 17.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 24 октября 2006 10:18 · Поправил: Sax0n
· Личное сообщение · #14

я про это писал )
есть мелкая хитрость даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000
Если не интересно поправить это самому ( типа крякми - фиксит ), то пиши.


) ну че, берешь звонок другу? ) я минут 20 промучился

Лордом ПЕ зайди в свойствах секции .data поставь в флагах галку на Shareable in memory



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 24 октября 2006 21:14
· Личное сообщение · #15

Зашел на сайт по поводу StraceNT - мож тоже кому пригодится
www.intellectualheaven.com/Projects/Tools/StraceNT/0.8/StraceNT.zip
www.intellectualheaven.com/Articles/StraceNT.pdf

заодно вот статейку встретил
www.intellectualheaven.com/Articles/WinMM.pdf



Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 24 октября 2006 22:46
· Личное сообщение · #16

если хочешь сменить image base у DLL, то нужно и релоки перебазировать. вот, есть такая утилита ReBase (из комплекта Pelles C).

http://slil.ru/23299974 http://slil.ru/23299974

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 24 октября 2006 22:58
· Личное сообщение · #17

Tim
Скажи, а на фига релоки перебазировать?

ImageBase на фига вобще нужен? И что релоки хранят?

Релоки хранят рва!

И на сколько я помню, загрузчик загружая dll по адресу отличному от ImageBase начинает юзать релоки! Только тогда,когда ImageBase <> адрес загрузки и править релоки не надо, они же хранят RVA, т.е. они относительны!!! Нужно праить только ImageBase, ну еще парочку, вобщем упаковщики и Мэтт Питрек!

-----
My love is very cool girl.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 октября 2006 23:14
· Личное сообщение · #18

theCollision че то тебя понесло куда то... Если у ДЛЛ ImageBase = 0x00400000 и в коде есть такие команды:
[HIGHLIGHT=asm]
push 00410000
retn
[/HIGHLIGHT]
То по твоему если ты поменяешь ImageBase на 0x00700000 и не поправиш релоки, то код сам станет таким?
[HIGHLIGHT=asm]
push 00710000
retn
[/HIGHLIGHT]
гг, учи матчасть...

-----
Yann Tiersen best and do not fuck




Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 октября 2006 00:44
· Личное сообщение · #19

PE_Kill
Для меня релоки это секция в которой содержатся массив значений, каждой значение это RVA того места где надо править, если изменился адрес загрузки!!!

-----
My love is very cool girl.




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

Создано: 25 октября 2006 01:12
· Личное сообщение · #20

Считается, что релоки не настраиваются (то есть НИЧЕГО в коде не меняется) если реальный адрес загрузки совпадает с предпочтительным (тот, что указан в Image Base). А если же меняешь предпочтительный адрес загрузки руками, то релоки не будут настраиваться при загрузке по новому адресу. Предположим длл-ка читает ворд по своей Image Base. Ясно, что она должна считывать MZ. В коде длл-ки, у которой предпочтительный адрес 10000000h пусть стоит mov ax, [10000000h]. При загрузке длл-ки по другому адресу, например 11000000h команда правится на mov ax, [11000000h] с помощью релоков. Если же сменить Image Base не трогая релоков на 11000000h, то команда то не сменится, и при загрузке по адресу 11000000h (равному текущему предпочтительному) команда будет иметь вид mov ax, [100000000h], что есть плохо Релоки хранят кэшна РВА, но РВА без учета адреса загрузки. И они указывают смещение относительно адреса загрузки некоторого значения (абсолютного), которое надо поправить. Отсюда следует, что править нуна не сами релоки, а значения, на которые они указывают, обрабатывая тип релока и в случае HIGHLOW - прибавляя к ним разницу между новой и старой Image Base.



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 25 октября 2006 01:31
· Личное сообщение · #21

MoonShiner
В точку! Я потому и смутился когда сказали, что править надо релоки!

-----
My love is very cool girl.





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

Создано: 25 октября 2006 01:50 · Поправил: Hellspawn
· Личное сообщение · #22

мля, так мне и не удалось добиться этого... все ребилдеры пишут дескать ок,
но длл упорно грузиться по $00CD0000 даже установка флага "shareable in memory"
для секции "дата" не помогает. Хотя если убрать этот флажок у APISpy9x.dll, то она тоже будет
грузиться по $00CD0000 я так понимаю дело во флагах? или на дельфях не
получиться такую длл намутить..

-----
[nice coder and reverser]




Ранг: 17.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 25 октября 2006 08:42
· Личное сообщение · #23

Hellspawn
для твоей длл я LordPE сделал ребейс на базу 0x90900000 после тупо нафтыкал во флаги ВСЕХ секций shareable in memory и сменил на всякий случай Characteristics в PEheder на 210E. это дзен... но вроде работает




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

Создано: 25 октября 2006 11:48
· Личное сообщение · #24

тупо, для всех секци я не делал... но всё работает, что мне и нужно было, тема закрыта

-----
[nice coder and reverser]



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


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