2009-11-09 5 views
4

У меня есть сторонняя dll, которую я хочу изменить именами символов. Это возможно? Я не хочу, чтобы конкурс знал, какой компонент использует мой продукт. У меня нет источника для dll.Изменение экспорта dll (таблица символов). Я хочу обфускать имена функций

+0

Является ли это третьей стороной DLL, которую вы разрешили перераспределять, в соответствии с ее лицензией? –

+0

Да. Они включают DLL для распространения. Дополнительная плата. – Memb

+1

Я думаю, что ваш алгоритм и идеи в вашем приложении важнее, чем вы используете конкретную DLL или нет. Тратить много времени на запутывание чего-то просто не помогает, люди все равно поймут это, если захотят. –

ответ

0

Не без изменения двоичного кода, и если DLL подписана, это приведет к аннулированию подписи.

Даже если он не подписан, он, вероятно, нарушит лицензионное соглашение, которое регулирует использование DLL.

+0

Знаете ли вы какую-нибудь программу, которая это делает? Лицензия ничего не говорит, и я сомневаюсь, что это все равно. Я заплатил за лицензию. Изменение нескольких имен безвредно. – Memb

+1

Я сомневаюсь, что для этого есть программы. «Самый простой» способ - это, вероятно, отредактировать таблицу экспорта DLL с шестнадцатеричным редактором и заменить имена на строки с одинаковой длиной. Вам также нужно будет отрегулировать экспортируемый lib, с которым вы также связываете. Весь инструмент, подобный http://texe.codeplex.com/, может помочь. –

+0

Спасибо. Я попробую редактор hex. – Memb

1

Таблица символов обязательна для связывания исполняемого файла с dll во время связывания и времени выполнения. Он обычно содержит декорированные имена функций и ординалы. Можно использовать только ординалы. Если вы создаете библиотеку, вы можете определить файл .def для управления таблицами символов. Но если это предварительно построенная сторонняя библиотека, это может быть очень трудный путь. Конечно, все возможно, но я сомневаюсь, что это стоит ваших усилий.

Если вы отступаете, я бы попробовал изменить букву в имени украшенной функции в шестнадцатеричном редакторе, найти это значение ординальной функции, а затем попытаться использовать GetProcAddress с порядковым номером этой функции.

1

Вы можете посмотреть PE Explorer. Я не уверен, что он будет делать то, что вы хотите, но, может быть.

Смежные вопросы