Посл.ответ |
Сообщение |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор 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.04↘0 Статус: Участник
|
Создано: 24 октября 2006 07:28 · Личное сообщение · #2
Адреса с 80000000h отведены под ядро. И если ты правишь длл-ку пеэдитором, просто меняя ImageBase, то тебе надо править и адреса в релоках с поправкой на новую Image Base... Короче, юзерскую библиотеку ты не сделаешь.
| Сообщение посчитали полезным: |
![](img/s6.gif) Ранг: 240.5 (наставник) Активность: 0.19↘0 Статус: Участник Author of ACKiller
|
Создано: 24 октября 2006 07:34 · Личное сообщение · #3
Можно дизассемблировать компилятор дельфи, смотреть где он выдает такую ошибку\код ошибки и изменить переход после сравнения.
Я так делал с менеджером для Siemens - он не хотел отправлять файлы с расширениями, не входящих в его список.
| Сообщение посчитали полезным: |
![](img/s5.gif) Ранг: 105.9 (ветеран) Активность: 0.06↘0 Статус: Участник
|
Создано: 24 октября 2006 07:51 · Личное сообщение · #4
MoonShiner пишет:
Адреса с 80000000h отведены под ядро
В 9X это не ядро.
Адреса с 0x00400000-0x7FFFFFFF в 9x отведены для кода и данных пользовательского режима.
А вот адреса 0x80000000 - 0xBFFFFFFF для общих MMF (файлов, проецируемых в память). Так что, загружай свою dll в ручную через MMF.
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник 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.01↘0 Статус: Участник
|
Создано: 24 октября 2006 07:55 · Поправил: Sax0n · Личное сообщение · #6
MoonShiner, theCollision
Адреса с 0x80000000 по 0xBFFFFFFF в 9х отведены под Shared Memory-Mapped File (MMF).
Hellspawn
попробуй EDITBIN /REBASE:BASE=0x80000000 myfile.dll
| Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор 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] | Сообщение посчитали полезным: |
![](img/s5.gif) Ранг: 105.9 (ветеран) Активность: 0.06↘0 Статус: Участник
|
Создано: 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.04↘0 Статус: Участник
|
Создано: 24 октября 2006 09:40 · Личное сообщение · #9
Сорри, не заметил, что тема про WinME
MMF - Memory-mapped files. Подробностей, к сожалению, не помню, но насколько помню, все достаточно просто реализовано
| Сообщение посчитали полезным: |
Ранг: 17.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 24 октября 2006 09:45 · Личное сообщение · #10
Hellspawn
editbin - тулза мелкомягких идет с ихним линкером. ей нужен Link.exe и MSPDB60.DLL. делаешь ребейс ей и все чикипоки. ... хотя нет, не все ;) есть мелкая хитрость ![](img/smilies/s3.gif) даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000
Если не интересно поправить это самому ( типа крякми - фиксит ![](img/smilies/s1.gif) ), то пиши.
| Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 24 октября 2006 09:51 · Личное сообщение · #11
Sax0n
ещё она в поставке с масм32 идёт...
и та и та тулза выдаёт: "LINK: error : Internal error during SetupPhase" пробовал разные длл
з.ы. про маппирование понял ![](img/smilies/s1.gif) но раз уж взялся, надо довести... буду думать
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 17.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 24 октября 2006 09:56 · Личное сообщение · #12
а... еще способ придумал (правда этот лень проверять). В PETools и LordPE и иже с ними, есть такая штука как ребилд PE и в опциях этого ребилдера можно повый ImageBase прописать
попробуй и отпиши.
| Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 24 октября 2006 10:15 · Поправил: Hellspawn · Личное сообщение · #13
хм, странно... после шаманство с пе-туулз выяснилось,
что после смены imagebase на $BFF70000, длл грузиться, но по странному
адрессу $00CD0000, хотя при компиляции указано $10000000
я прям в шоке, мистика да и только...
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 17.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 24 октября 2006 10:18 · Поправил: Sax0n · Личное сообщение · #14
я про это писал ![](img/smilies/s1.gif) )
есть мелкая хитрость даж если сменишь базу, загрузчик будет грузить ее по адресам меньше 0x80000000
Если не интересно поправить это самому ( типа крякми - фиксит ), то пиши.
![](img/smilies/s1.gif) ) ну че, берешь звонок другу? ![](img/smilies/s1.gif) ) я минут 20 промучился
Лордом ПЕ зайди в свойствах секции .data поставь в флагах галку на Shareable in memory
| Сообщение посчитали полезным: |
Ранг: 191.8 (ветеран), 46thx Активность: 0.17↘0 Статус: Участник
|
Создано: 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.13↘0 Статус: Участник
|
Создано: 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.15↘0 Статус: Участник Packer Reseacher
|
Создано: 24 октября 2006 22:58 · Личное сообщение · #17
Tim
Скажи, а на фига релоки перебазировать?
ImageBase на фига вобще нужен? И что релоки хранят?
Релоки хранят рва!
И на сколько я помню, загрузчик загружая dll по адресу отличному от ImageBase начинает юзать релоки! Только тогда, когда ImageBase <> адрес загрузки и править релоки не надо, они же хранят RVA, т.е. они относительны!!! Нужно праить только ImageBase, ну еще парочку, вобщем упаковщики и Мэтт Питрек!
----- My love is very cool girl. | Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 793.4 (! !), 568thx Активность: 0.74↘0 Статус: Участник Шаман
|
Создано: 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.15↘0 Статус: Участник Packer Reseacher
|
Создано: 25 октября 2006 00:44 · Личное сообщение · #19
PE_Kill
Для меня релоки это секция в которой содержатся массив значений, каждой значение это RVA того места где надо править, если изменился адрес загрузки!!!
----- My love is very cool girl. | Сообщение посчитали полезным: |
Ранг: 186.8 (ветеран) Активность: 0.04↘0 Статус: Участник
|
Создано: 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], что есть плохо ![](img/smilies/s1.gif) Релоки хранят кэшна РВА, но РВА без учета адреса загрузки. И они указывают смещение относительно адреса загрузки некоторого значения (абсолютного), которое надо поправить. Отсюда следует, что править нуна не сами релоки, а значения, на которые они указывают, обрабатывая тип релока и в случае HIGHLOW - прибавляя к ним разницу между новой и старой Image Base.
| Сообщение посчитали полезным: |
Ранг: 271.5 (наставник), 12thx Активность: 0.15↘0 Статус: Участник Packer Reseacher
|
Создано: 25 октября 2006 01:31 · Личное сообщение · #21
MoonShiner
В точку! ![](img/smilies/s1.gif) Я потому и смутился когда сказали, что править надо релоки!
----- My love is very cool girl. | Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 25 октября 2006 01:50 · Поправил: Hellspawn · Личное сообщение · #22
мля, так мне и не удалось добиться этого... все ребилдеры пишут дескать ок,
но длл упорно грузиться по $00CD0000 ![](img/smilies/s1.gif) даже установка флага "shareable in memory"
для секции "дата" не помогает. Хотя если убрать этот флажок у APISpy9x.dll, то она тоже будет
грузиться по $00CD0000 ![](img/smilies/s13.gif) я так понимаю дело во флагах? или на дельфях не
получиться такую длл намутить..
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 17.7 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 25 октября 2006 08:42 · Личное сообщение · #23
Hellspawn
для твоей длл я LordPE сделал ребейс на базу 0x90900000 после тупо нафтыкал во флаги ВСЕХ секций shareable in memory и сменил на всякий случай Characteristics в PEheder на 210E. это дзен... ![](img/smilies/s1.gif) но вроде работает
| Сообщение посчитали полезным: |
![](img/s8.gif) Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 25 октября 2006 11:48 · Личное сообщение · #24
тупо, для всех секци я не делал... но всё работает, что мне и нужно было, тема закрыта
----- [nice coder and reverser] | Сообщение посчитали полезным: |