Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› DLL выше 2 Gb |
Посл.ответ | Сообщение |
|
Создано: 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] |
|
Создано: 24 октября 2006 07:28 · Личное сообщение · #2 |
|
Создано: 24 октября 2006 07:34 · Личное сообщение · #3 |
|
Создано: 24 октября 2006 07:51 · Личное сообщение · #4 |
|
Создано: 24 октября 2006 07:55 · Личное сообщение · #5 |
|
Создано: 24 октября 2006 07:55 · Поправил: Sax0n · Личное сообщение · #6 |
|
Создано: 24 октября 2006 08:19 · Поправил: Hellspawn · Личное сообщение · #7 просто есть библа APISpy9x.dll, она как раз так и делает... Sax0n пишет: EDITBIN /REBASE:BASE=0x80000000 myfile.dll нашёл, какую то ошибку выдаёт =( лан буду разбираться... HoBleen пишет: Можно дизассемблировать компилятор дельфи, смотреть где он выдает такую ошибку\код ошибки и изменить переход после сравнения. Я так делал с менеджером для Siemens - он не хотел отправлять файлы с расширениями, не входящих в его список. походу не прокатит, хотя я попробую.. seeq пишет: Так что, загружай свою dll в ручную через MMF. чуть поподробнее ----- [nice coder and reverser] |
|
Создано: 24 октября 2006 08:37 · Личное сообщение · #8 Hellspawn пишет: чуть поподробнее Запуск файла из памяти www.wasm.ru/print.php?article=memfile Загрузчик PE-файлов (на delphi) в атаче 88d0_24.10.2006_CRACKLAB.rU.tgz - Загрузчик PE-файлов.chm |
|
Создано: 24 октября 2006 09:40 · Личное сообщение · #9 |
|
Создано: 24 октября 2006 09:45 · Личное сообщение · #10 Hellspawn editbin - тулза мелкомягких идет с ихним линкером. ей нужен Link.exe и MSPDB60.DLL. делаешь ребейс ей и все чикипоки. ... хотя нет, не все ;) есть мелкая хитрость даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000 Если не интересно поправить это самому ( типа крякми - фиксит ), то пиши. |
|
Создано: 24 октября 2006 09:51 · Личное сообщение · #11 |
|
Создано: 24 октября 2006 09:56 · Личное сообщение · #12 |
|
Создано: 24 октября 2006 10:15 · Поправил: Hellspawn · Личное сообщение · #13 |
|
Создано: 24 октября 2006 10:18 · Поправил: Sax0n · Личное сообщение · #14 я про это писал ) есть мелкая хитрость даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000 Если не интересно поправить это самому ( типа крякми - фиксит ), то пиши. ) ну че, берешь звонок другу? ) я минут 20 промучился Лордом ПЕ зайди в свойствах секции .data поставь в флагах галку на Shareable in memory |
|
Создано: 24 октября 2006 21:14 · Личное сообщение · #15 |
|
Создано: 24 октября 2006 22:46 · Личное сообщение · #16 |
|
Создано: 24 октября 2006 22:58 · Личное сообщение · #17 Tim Скажи, а на фига релоки перебазировать? ImageBase на фига вобще нужен? И что релоки хранят? Релоки хранят рва! И на сколько я помню, загрузчик загружая dll по адресу отличному от ImageBase начинает юзать релоки! Только тогда,когда ImageBase <> адрес загрузки и править релоки не надо, они же хранят RVA, т.е. они относительны!!! Нужно праить только ImageBase, ну еще парочку, вобщем упаковщики и Мэтт Питрек! ----- My love is very cool girl. |
|
Создано: 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 |
|
Создано: 25 октября 2006 00:44 · Личное сообщение · #19 |
|
Создано: 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. |
|
Создано: 25 октября 2006 01:31 · Личное сообщение · #21 |
|
Создано: 25 октября 2006 01:50 · Поправил: Hellspawn · Личное сообщение · #22 мля, так мне и не удалось добиться этого... все ребилдеры пишут дескать ок, но длл упорно грузиться по $00CD0000 даже установка флага "shareable in memory" для секции "дата" не помогает. Хотя если убрать этот флажок у APISpy9x.dll, то она тоже будет грузиться по $00CD0000 я так понимаю дело во флагах? или на дельфях не получиться такую длл намутить.. ----- [nice coder and reverser] |
|
Создано: 25 октября 2006 08:42 · Личное сообщение · #23 |
|
Создано: 25 октября 2006 11:48 · Личное сообщение · #24 |
eXeL@B —› Программирование —› DLL выше 2 Gb |