Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Ocultar cadenas en código ofuscado

Acabo de ocultar mi código de Android usando proguard y luego descompilarlo. Hay una serie de cuerdas que me gustaría ocultar de miradas indiscretas. Cuando descompilaron mi código, las cuerdas estaban allí para que todos las vieran … y cambiar. Una de las cadenas es una URL a mi servidor de licencias y podrían cambiar la URL para apuntar a un servidor falso (ya que estaré liberando el código del servidor al público). ¿Cuál es la mejor manera de ocultar este tipo de información?

También, noté que las cadenas de la clase de R son todos los números al azar pero no puedo encontrar la clase de R en el código descompilado. ¿Dónde está?

Foe ejemplo Veo: new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);

2130903058 es un archivo de diseño, pero ¿qué se está haciendo referencia? El número no significa nada a menos que apunte a algún tipo de dirección.

  • Al ofuscar con ProGuard, ¿hace -keepattributes SourceFile, LineNumberTable hacer el apk resultante más fácil de ingeniería inversa?
  • Minify la aplicación para Android, pero no la ofusque
  • Kotlin y Proguard
  • Android form build: proguard no puede encontrar el método de referencia en la clase ViewConfigurationCompatFroyo
  • Eliminar actividad de apk a través de Proguard
  • Error de ProGuard para Android con org.xmlpull.v1.XmlPullParser
  • Cómo decirle a ProGuard que mantenga campos privados sin especificar cada campo
  • Cómo mantener a mi clase de ofuscar por proguard
  • 6 Solutions collect form web for “Ocultar cadenas en código ofuscado”

    Asumiendo que usted es feliz con obscuro en lugar de seguro, hay una serie de mecanismos que podría utilizar, pero obfuscaters como proguard no va a ser capaz de ayudarle.

    Para lograr esto, necesitará hacer la codificación o el cifrado de la cadena usted mismo, el enfoque que utiliza depende de lo que está tratando de defenderse, si sólo está tratando de ocultar de la inspección obvia, que la codificación puede ser suficiente (ver android .util.Base64, http://developer.android.com/reference/android/util/Base64.html ). Tenga en cuenta que la codificación está en NO WAY SECURE y todo lo que va a es quitar la referencia obvia a su sitio.

    Si usted está tratando de defenderse de algo más, entonces podría pasar a cifrar realmente la cadena, para ello usaría una cifra simétrica como AES a través de javax.crypto.Cipher, http://www.androidsnippets.org/snippets/ 39 / index.html proporciona un ejemplo de uso decente. Una vez más esto es más molesto que seguro para ser hackers, ya que tendrá que almacenar la clave en algún lugar de su jar, por lo tanto, la negación de cualquier seguridad criptográfica.

    Para aclarar esto, los pasos básicos serían:

    1. Cree manualmente una cadena cifrada usando una clave conocida.
    2. Convierta su código para usar una versión descifrada de esta cadena, ejemplo:

    Antes de:

     public class Foo { private String mySecret = "http://example.com"; ... } 

    Se convierte en:

     public class Foo { private String encrypted = "<manually created encrypted string>"; private String key = "<key used for encryption"; private String mySecret = MyDecryptUtil.decrypt(encrypted, key); ... } 

    Una (buena) alternativa a todo esto es considerar el uso de una solución de drm de terceros, como el servidor de licencias google proporciona http://android-developers.blogspot.com/2010/07/licensing-service-for-android.html . Esto puede ser más seguro que algo que usted rueda su uno mismo, pero está conforme a las limitaciones muy similares a lo que describí arriba.

    Hola a todos.

    1. Deje que el secret sea ​​el texto que desea ocultar

    2. Encuentra el keyhash de su depuración / release.keystore. Sea k1 esta clave.

    (Utilice las herramientas keytool + openssl: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 )

    1. Utilice una herramienta (externa al código androide) para cifrar secret con k1

      encrypted = encode (secret, k1)

    (Por ejemplo: https://jwt.io , para java: https://github.com/jwtk/jjwt ).

    1. En tu código java android escribe encrypted . Cuando se necesita la versión descodificada de encrypted (esto es, el secret original) escribir

    original = decode(encrypted, get_my_keyhash_programmatically() )

    Eso es todo. Esto funciona porque el secret original no se muestra en el código fuente de java, ni el k1 para decodificarlo. Y, si un hacker desea imprimir su secreto decodificado, debe cambiar el código y recompilar, firmando su .apk con su propio almacén de claves no el suyo, y por lo tanto no obtener el secret original correcto. (El punto "sólo" es si se puede calcular k1 desde su .apk original).

    Nota: get_my_keyhash_programmatically ():

     try { PackageInfo info = getPackageManager().getPackageInfo( "el nombre de su paquete por ejemplo com.tarea.u8", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

    Lo que hice fue crear una larga lista de cadenas estáticas en mi clase de utilidad global. En algún lugar dentro de la larga lista de cadenas he puesto mi clave en varios trozos.

    Con mi código es fácil ver lo que son los auténticos – pero una vez que el obfuscator se pone a trabajar todos los estáticos tendrá nombre como A, B, C, etc y no será fácil de detectar más.

    Utilicé ROT47. No es muy seguro, pero fácil de usar e implementar, porque es un codificador / decodificador simétrico

    Usted debe google para "Just another Perl hacker". Estos son los programas que imprimen una cadena con código ofuscado. También hay muchos ejemplos en otros idiomas, a continuación, Perl en la red.

    Entrada de Wikipedia

    Puede usar DexGuard para cifrar cadenas, probablemente más efectivamente de lo que podría lograr manualmente, y sin sobrecargar el código fuente.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.