Каковы основные существующие подходы, позволяющие скрыть значение литералов в коде, чтобы их было нелегко отследить с помощью просто hexdumper или декомпилятора?
Например, вместо того, чтобы кодировать это:
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;
}
Это был просто пример того, что мы пытаемся сделать. (Да, я знаю, компилятор может оптимизировать его и предварительно рассчитать константу).
Отказ от ответственности: я знаю, что это вообще не обеспечит дополнительной безопасности, но делает код более неясным (или интересным) для обратного инжиниринга. Цель этого - заставить злоумышленника отладить программу и тратить на нее время. Имейте в виду, что мы делаем это просто для удовольствия.