Как скрыть литералы в коде

Каковы основные существующие подходы, чтобы скрыть значение литералов в коде, чтобы их нелегко было отследить с помощью шестнадцатеричного демпфера или декомпилятора?

Например, вместо того, чтобы кодировать это:

    static final int MY_VALUE = 100;

Мы могли бы иметь:

    static final int MY_VALUE = myFunction1();

    private int myFunction1(){
        int i = 23;
        i += 8 << 4;
        for(int j = 0; j < 3; j++){
            i-= (j<<1);
        }
        return myFunction2(i);
    }

    private int myFunction2(int i){
        return i + 19;
    }

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

Отказ от ответственности: я знаю, что это вообще не обеспечит дополнительной безопасности, но делает код более непонятным (или интересным) для обратного проектирования. Цель этого - просто заставить злоумышленника отладить программу и тратить на это время. Имейте в виду, что мы делаем это просто для развлечения.

5
задан Mister Smith 29 September 2011 в 08:21
поделиться