|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 8, 2003 20:44:26 Есть две или более static LIB. В каждой из них определён символ 'X' (ф-ция, например). Если их одновременно включить в процесс линковки программы, использующей этот символ, линкер не сможет определить к какому из подключенных либов следует обратиться. Нельзя ли определить символ 'X' так, чтобы указать ещё и имя LIB, вроде externdef mylib!X SYSCALL ... Заранее спасибо. ЗЫ: Имя символа в либах менять нельзя. ЗЗЫ: Это я всё разбираюсь с глюками в Dll2Lib :-) |
|
|
Дата: Июл 8, 2003 21:17:04 · Поправил: volodya По-моему, не существует возможности указать линкеру на это. Тебе нужен какой-то редактор таких файлов, но и о них я не слышал (мы это уже обсуждали). Надо посмотреть. Посмотрел - пост http://www.wasm.ru/forum/index.php?action=vthread&forum=5&topic=1772 |
|
|
Дата: Июл 8, 2003 21:55:21 Не ручаюсь, но можно попробовать: расположить LIB-ы в разные директории, а LINK-еру указать эти директории в определенной последовательности - LINK-ер должен пришить функцию, которая попадется первой. |
|
|
Дата: Июл 8, 2003 22:33:02 Попытаюсь уточнить... Всё это связано с утилитой Dll2Lib, которая конвертирует библиотеку DLL в статическую либу, но, при этом, она меняет имена ф-ций на малозначащие символы: Первая экспортируемая ф-ция именуется 00000000 Вторая -- 00000001 Третья -- 00000002 и т.д. Все имена -- строковые константы (не числа). Поэтому, если сконвертировать две или более DLL для одного проекта, получатся два или более символов 00000000, 00000001 и т.д. Есть два радикальных решения: 1. Написать утилиту для изменения имён ф-ций в либах (я это уже сделал вручную, но повторять это при каждом конвертировании очень неудобно) 2. Добавить ещё один OBJ с переходниками, что собственно и делает незарегистрированная версия Dll2Lib. Только вместе с переходниками она ещё всовывает NAG-лые сообщения :-) В общем, без переходников код работает лучше, быстрее и без NAG. |
|
|
Дата: Июл 8, 2003 22:42:11 Тогда есть самый лучший вариант - трахнуть Dll2Lib! |
|
|
Дата: Июл 8, 2003 22:54:45 Верно подмечено. Кстати, Asterix как раз пошёл этим путём (Dll2Lib запакована, закриптована и т.д.), а я всё пытался возиться с полученной либой. НО, если в зарегистрированном (крякнутом) варианте Dll2Lib не будет выдавать по OBJ на каждую ф-цию, все наши труды пропадут напрасно... У меня баланс на данный момент такой:
НО размер EXE = размер самого кода + размер LIB!!! |
|
|
Дата: Июл 8, 2003 23:06:17 · Поправил: Asterix [ volodya: Тогда есть самый лучший вариант - трахнуть Dll2Lib!] Там не всё так просто, во-первых прога запакована ASPR'ом, я её распаковал в 98-й и ХР, и сравнил treeIAT с помощью ITCompare, блин там столько отличий, что уже плохо, но обе распакованные версии работают(!). Взломал за пару минут, но оказалось не всё так просто, я прошёлся по тем же граблям что и одна известная хакерская группа, кстати они потом сделали "fix". В сети я не нашёл ни одного нормального кряка, это уже говорит о некоторой устойчивости проги к взлому. Да и не особо удобно это ломать, т.к. результат виден только после компиляции какого-нибудь exe'шника с использованием сконвертированной lib'ы. |
|
|
Дата: Июл 8, 2003 23:16:02 · Поправил: volodya Мне, конечно, хорошо сидеть на стуле и умничать... А ты не пробовал посмотреть, ЧТО засовывает код в lib? Скажем, дизассемблить сам lib, найти опкода инструкций, выводящих NAG и потом поискать их в самой программе? |
|
|
Дата: Июл 8, 2003 23:33:13 ... А ты не пробовал посмотреть, ЧТО засовывает код в lib? Скажем, дизассемблить сам lib, найти опкода инструкций, выводящих NAG и потом поискать их в самой программе? Идея такая была :-) Но всё-же хотелось знать преимущества зарегённой версии, т.е. отсутствие NAG или ещё что-то. Но если зарегённая генерит точно такую же lib'у с одним obj, то кому оно такое надо ;-) Кстати присутствие ASPR'а наводит на мысль об отсутствии части нужного кода в незарегённой версии, тем более что прога не имеет ограничений по времени. |
|
|
Дата: Июл 8, 2003 23:34:52 Тогда мдя... |
|
|
Дата: Июл 8, 2003 23:34:59 volodya А ты не пробовал посмотреть, ЧТО засовывает код в lib? А это уже вопрос ко мне :-) Даже в самом либе есть некоторая защита от взлома, что уже о многом говорит. В общем, Dll2Lib поступает следующим образом: 1. Дампит DLL в ОДИН большой OBJ-файл 2. Анализирует экспорт и переименовывает ф-ции (я об этом уже писал) Например: ф-ция _FSOUND_Init@12 превращается в 0000008B. 3. Противный Dll2Lib создаёт ещё один OBJ и заполняет его примерно следующим образом:
FSOUND_Init:
call NAG
jne <0000008B> ; <- это не число, а символ (строка)
retn
Следующая_Функция:
call NAG
jne <0000008C>
retn
. . .
Последняя,Функция:
call NAG
jne <000000E2>
retn
NAG:
Длинный_цикл ; Для лишней загрузки проца
; при каждом вызове ф-ций из LIB
if(первый_раз == TRUE) Показать_NAG;
retn
Хотя я всё это уже пофиксил, осталась проблема с размером кода. |
|
|
Дата: Июл 8, 2003 23:36:52 Анализирует экспорт и переименовывает ф-ции (я об этом уже писал) Например: ф-ция _FSOUND_Init@12 превращается в 0000008B. Интересно, а что если в самой проге убрать эту ерундень нахрен? |
|
|
Дата: Июл 8, 2003 23:38:09 Забыл упомянуть, что единственная ф-ция без переходника -- это DllMain. |
|
|
Дата: Июл 8, 2003 23:41:10 volodya Интересно, а что если в самой проге убрать эту ерундень нахрен? Переходники я вообще убрал через INC (определил FSOUND_Init@12 как 0000008B и таблицу переходов вместе с NAG как рукой сняло :-) |
|
|
Дата: Июл 9, 2003 00:26:50 Могу бросить желающим покопаться распакованный exe'шник, но там есть таки покриптованный немалый кусок кода, только сейчас глянул ещё раз :-( |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068 |