сделайте свою Банку, которая не будет декомпилироваться

Попробуйте

public class AspnetDataCache : IDataCache
{
    private readonly Cache _cache;

    public AspnetDataCache(Cache cache)
    {
        _cache = cache;
    }

    public AspnetDataCache()
        : this(HttpRuntime.Cache)
    {

    }
    public void Put(string key, object obj, TimeSpan expireNext)
    {
        if (key == null || obj == null)
            return;
        _cache.Insert(key, obj, null, DateTime.Now.Add(expireNext), TimeSpan.Zero);
    }

    public object Get(string key)
    {
        return _cache.Get(key);
    }

6
задан danielad 24 November 2015 в 12:57
поделиться

3 ответа

Во-первых, вы не можете избежать перепроектирования вашего кода людьми. Байт-код JVM должен быть простым для выполнения, и есть несколько программ для его обратного проектирования (то же самое относится к .NET CLR). Вы можете только усложнить задачу поднять барьер (т.е. стоимость), чтобы увидеть и понять ваш код.

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

Рядом с обфускацией вы можете зашифровать файлы классов (все, кроме небольшого начального класса) каким-либо методом и использовать специальный загрузчик классов для их расшифровки. К сожалению, класс загрузчика классов не может быть зашифрован сам по себе, поэтому люди могут выяснить алгоритм дешифрования, прочитав декомпилированный код загрузчика классов. Но окно для атаки на ваш код стало меньше. Опять же, это не мешает людям видеть ваш код, а только усложняет его случайному злоумышленнику.

Вы также можете попытаться преобразовать Java-приложение в какой-нибудь Windows EXE, который скроет намек на то, что это вообще Java (в некоторой степени ) или действительно скомпилировать в машинный код, в зависимости от ваших потребностей в функциях JVM. (Я этого не пробовал.)

просто усложняет задачу случайному злоумышленнику.

Вы также можете попытаться преобразовать Java-приложение в какой-нибудь Windows EXE, который скроет намек на то, что это вообще Java (до некоторой степени), или действительно скомпилирован в машинный код, в зависимости от вашего потребность в функциях JVM. (Я этого не пробовал.)

просто усложняет задачу случайному злоумышленнику.

Вы также можете попытаться преобразовать Java-приложение в какой-нибудь Windows EXE, который скроет намек на то, что это вообще Java (до некоторой степени), или действительно скомпилирован в машинный код, в зависимости от вашего потребность в функциях JVM. (Я этого не пробовал.)

3
ответ дан 8 December 2019 в 13:48
поделиться

Вы не можете. Если JRE может запустить его, приложение может декомпилировать его.

Лучшее, на что вы можете надеяться, - это сделать его очень трудным для чтения (замените все символы комбинациями 'l', '1' и 'O' и '0', добавить много бесполезного кода и так далее). Вы будете удивлены, насколько нечитаемым можно сделать код даже с помощью относительно глупого инструмента перевода. Это называется запутыванием и, хотя и несовершенно, иногда достаточно.

Помните, вы не можете остановить решительного хакера не больше, чем решительного грабителя. Что вы пытаетесь сделать, так это очень усложнить задачу случайному злоумышленнику. Когда он представлен с символами O001l1ll10O , O001llll10O , OO01l1ll10O , O0Ol11ll10O и [1130l286ll] O00, [1130l286ll] O00] Кажется, что они не делают ничего полезного, большинство людей просто сдадутся.

10
ответ дан 8 December 2019 в 13:48
поделиться

GCJ - это бесплатный инструмент, который может компилироваться в байт-код или собственный код. Имея в виду, это в некотором роде противоречит цели Java.

2
ответ дан 8 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: