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

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

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

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

Сообщение Rang » 15.10.2015 17:16:35

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

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

Сообщение скалогрыз » 16.10.2015 06:50:41

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

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

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

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

имхо, если не хранить в именах классов пароли, то всё нормально. А то хакеров скрытие имени класса не спасёт.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Rang » 16.10.2015 16:54:52

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

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

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

В принципе тема исчерпывающая, и может быть закрыта.
Rang
новенький
 
Сообщения: 12
Зарегистрирован: 15.10.2015 15:44:16

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

Сообщение vitaly_l » 16.10.2015 20:54:43

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

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


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение скалогрыз » 16.10.2015 22:00:38

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

очевидно, это уже не будет "стандартными средствами".
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение vitaly_l » 16.10.2015 23:38:32

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

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

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

Сообщение stanilar » 17.10.2015 00:54:57

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


Хорошая идея. Количество людей, способных понимать asm давно стремится к нулю. А если еще и обфуксировать...
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

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

Сообщение vitaly_l » 17.10.2015 12:24:36

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

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

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

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

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение Лекс Айрин » 17.10.2015 14:12:30

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


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

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



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

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

Сообщение vitaly_l » 17.10.2015 20:29:49

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

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

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

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

Сообщение Rang » 18.10.2015 05:08:19

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

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

П.С. Не стал закапываться пока в дебри исходников компилятора FPC, понемногу пишу свою утилиту-обфускатор.
Rang
новенький
 
Сообщения: 12
Зарегистрирован: 15.10.2015 15:44:16

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

Сообщение vitaly_l » 18.10.2015 12:36:18

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

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

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

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

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

а что за софт такой? стоит ли шкурка выделки?
может готовые решения по защите софта поискать?
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

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

Сообщение Снег Север » 18.10.2015 20:10:44

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

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

Сообщение Rang » 19.10.2015 01:48:37

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

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


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

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

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


Оно того стоит. А вся суть в том, что бинарная библиотека собирается под разные платформы, и в частности под Android устройства, и готовых функциональных решений, удовлетворяющих всем требованиям - просто нет.
Rang
новенький
 
Сообщения: 12
Зарегистрирован: 15.10.2015 15:44:16

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 82

Рейтинг@Mail.ru
cron