Скрыть\вырезать имена классов в бинарном файле

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Rang
новенький
Сообщения: 12
Зарегистрирован: 15.10.2015 14:44:16

Скрыть\вырезать имена классов в бинарном файле

Сообщение Rang »

В проекте существуют классы вида TMyObject, можно ли каким-либо образом скрыть\вырезать имена классов в бинарном файле (библиотека (Win).dll/(Linux/Android).so) после компиляции?
Есть ли стандартные средства компилятора для таких манипуляций?
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Rang писал(а):В проекте существуют классы вида TMyObject, можно ли каким-либо образом скрыть\вырезать имена классов в бинарном файле (библиотека (Win).dll/(Linux/Android).so) после компиляции?
Есть ли стандартные средства компилятора для таких манипуляций?

на оба вопроса ответ - "нет"
даже если не использовать RTTI, то всё-равно имя класса является частью его VMT таблицы. Т.е. имя будет записано как оно есть. Никакия оптимизаторы секцию .data вроде как не трогают (они занимаются кодом)
Судя по исходникам FPC (ncgvmt.pas) никаких возможностей для манипуляций не предусмотрено.

вычищать/маскировать руками? При этом, если имя будет вычещенно нельзя будет использовать .ClassName. Т.к. он как-раз и операется на сохранённое имя, как и модернистический метод .ToString(). Зато операторы "is" и "as" можно использовать без проблем.

переписать всё на объекты?

имхо, если не хранить в именах классов пароли, то всё нормально. А то хакеров скрытие имени класса не спасёт.
Rang
новенький
Сообщения: 12
Зарегистрирован: 15.10.2015 14:44:16

Сообщение Rang »

Спасибо за ответ и подсказки.

Задача стоит: максимально затруднить отладку приложения. При наличии названий модулей\классов эта задача упрощается в несколько раз.
Хотя имена классов и не содержат ничего опасного, но они подсказывают логику работы приложения.

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

В принципе тема исчерпывающая, и может быть закрыта.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

скалогрыз писал(а):на оба вопроса ответ - "нет"

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


.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

vitaly_l писал(а):Разве? А если написать оболочку над FPC, которая будет переименовывать когда переводит в машинный код?

очевидно, это уже не будет "стандартными средствами".
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

скалогрыз писал(а):это уже не будет "стандартными средствами".

В JS - обфускация, это уже давно норма (правда по другим соображениям).
Возможно автор топика сам захочет дописать обфускацию для FPC. Парсер там уже есть, его нужно только чуть дополнить.
stanilar
постоялец
Сообщения: 289
Зарегистрирован: 09.03.2010 18:09:02

Сообщение stanilar »

vitaly_l писал(а):Возможно автор топика сам захочет дописать обфускацию для FPC.


Хорошая идея. Количество людей, способных понимать asm давно стремится к нулю. А если еще и обфуксировать...
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

stanilar писал(а):Количество людей, способных понимать asm давно стремится к нулю. А если еще и обфуксировать...

То абсолютно ничего не изменится, но все названия - превратятся в "нечто". В JS - обфускацию давно уже ПРОГРАММНО делают, и в итоге обфускация на целый час удлиняет чтение JS кода.

В PHP - можно делать умную динамическую обфускацию, но в паскале это сдлать сложнее, т.к. PHP - это скрипт. Однако в паскале тоже можно запустить скрипт.

Обфускация, которая не программная - осложнит жизнь только автору. Поэтому, и предлагалось написать обёртку к FPC.

.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vitaly_l писал(а):Обфускация, которая не программная - осложнит жизнь только автору.


вообще-то, у автора должен быть файл с неустановленной защитой, а и исходники в наличии.

vitaly_l писал(а): но в паскале это сделать сложнее, т.к. PHP - это скрипт.



Вот как раз скрипт или не скрипт не влияет. В ехе файле можно сделать и расшифровку по мере выполнения... причем, код будет меняться по мере выполнения кода. К сожалению, создание вирусов и прочих нежелательных программ почти поставило точку на создании самомодифицирующихся программ.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Лекс Айрин писал(а):К сожалению, создание вирусов и прочих нежелательных программ почти поставило точку на создании самомодифицирующихся программ.

Я как раз в PHP вирусе - видел идею динамической обфускации, там автор вируса таким образом уходил от антивирусов. Так что, вирусы - иногда бывают полезны, в плане идей обфускации и краткости написания кода.
Лекс Айрин писал(а):В ехе файле можно сделать и расшифровку по мере выполнения... причем, код будет меняться по мере выполнения кода.

всё равно всё это читается, я же прочитал тогда PHP код вируса и смог понять, что он делает. Вирус работал по такому же принципу. Соответственно и в бинарнике можно прочитать ЛЮБОЙ код, просто будет чуть-чуть сложнее. Тот кто может читать бинарник, он всё равно при желании поймёт, что и как делает код. Обфускация - это не защита, я так думаю. Современные технологии - не позволяют защитить программы... :cry: :( :roll:
Rang
новенький
Сообщения: 12
Зарегистрирован: 15.10.2015 14:44:16

Сообщение Rang »

Обфускация - никогда не была 100% защитой, это лишь усложнение процесса понимания и восстановления кода. Этот метод защиты нужен только там, где в исполняемом файле\модуле есть связи\строки с исходным кодом. Если бы была возможность убирать любое упоминание названий классов\файлов модулей из бинарника сделанного в FPC - то и обфускация была бы уже неактуальна. Но так как проект буквально светится всеми названиями классов и файлов модулей - такая защита имеет место быть.

В маленьких проектах и простеньких утилитах эти методы защиты бесполезны, там весь код как на ладони, но что делать если проект на несколько сотен\тысяч классов? Если все перемешать в кучу, уже не так просто понять и найти нужный участок кода. таким образом мы отсеиваем добрую часть любителей ковыряться в asm и оставляем работу профессионалам, которые уже потребуют деньги за работу, и вероятно будет проще купить само приложение, нежели работу низкоуровневого программиста.

П.С. Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Rang писал(а):Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.

Ну вот... всё пропало... я только обрадовался, и понадеялся что, теперь-то уж, в IDE для FPC появится полезная кнопочка, с прекрасным названием: "Обфускация", но Вы меня обломили в самых моих чудесных мечтаниях. :cry: и художники остались без обфускации :evil: - злой Вы уйду я от Вас!
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Rang писал(а):П.С. Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.

а что за софт такой? стоит ли шкурка выделки?
может готовые решения по защите софта поискать?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

На геймдев.ру каждый второй пишущий "собираю команду для создания мега-игры" крайне беспокоится, как защитить свои бесценные идеи от кражи... :D Для меня это уже симптом!
Rang
новенький
Сообщения: 12
Зарегистрирован: 15.10.2015 14:44:16

Сообщение Rang »

vitaly_l писал(а):
Rang писал(а):Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.

Ну вот... всё пропало... я только обрадовался, и понадеялся что, теперь-то уж, в IDE для FPC появится полезная кнопочка, с прекрасным названием: "Обфускация", но Вы меня обломили в самых моих чудесных мечтаниях. :cry: и художники остались без обфускации :evil: - злой Вы уйду я от Вас!


Увы сроки жмут и нет времени разбираться в самом компиляторе. Дай бог чтобы начатое стало нечто большим, тогда глядишь и сбудется Ваша мечта. ;)

скалогрыз писал(а):
Rang писал(а):П.С. Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.

а что за софт такой? стоит ли шкурка выделки?
может готовые решения по защите софта поискать?


Оно того стоит. А вся суть в том, что бинарная библиотека собирается под разные платформы, и в частности под Android устройства, и готовых функциональных решений, удовлетворяющих всем требованиям - просто нет.
Ответить