2011-12-23 15 views
25

Acabo de lanzar una aplicación, una de pago, 4 días después, un usuario me dijo que hay otro sitio web en China que aloja mi aplicación. Lo descargué desde allí, ¡y funciona bien en mi dispositivo!Piratería, piratería, piratería. ¿Que puedo hacer?

Hay puestos aquí diciendo que la gente puede cambiar el nombre del paquete y volver a publicar un APK. Pero este no es mi caso, la versión crackeada todavía usa el mismo nombre de paquete. Utilicé Android Vending Licensing en el programa, pero la versión descifrada no revisa las licencias. Usé ProGuard para ofuscarlo, pero eso no desalienta a los piratas informáticos.

Pregunta # 1: firmé el archivo APK de acuerdo con las instrucciones de Google. Pero aún así, modificaron el código y sacaron la parte del cheque de licencia. ¿Me equivoco al señalar que la firma de un archivo apk está diseñada para evitar que la gente altere el contenido del archivo?

Pregunta # 2: Para los programas de Win32 .exe, solía utilizar una suma de comprobación para determinar si el archivo ha sido alterado. Así es como funciona: cuando se crea un .exe, utilicé una herramienta para calcular la suma del contenido de bytes del archivo, luego lo introduje en algún lugar del archivo, por ejemplo, 4 bytes después de un patrón de texto "MI FIRMA" . Luego, en tiempo de ejecución, el programa abre el archivo .exe y calcula la suma de bytes, la compara con el número entero después de la firma.

¿Alguien ha intentado este enfoque en los archivos apk? ¿Te importa compartir tus experiencias?

Respuesta

28

En última instancia el construido en la protección de las aplicaciones en Android es muy pobre. Estas son sus mejores prácticas.

1) Si la recomendación de Google para poder utilizar la ofuscación de código, firmado codificada, y su servidor de verificación de la licencia está diseñado para evitar el robo de software. Sin embargo, su implementación es muy defectuosa. El único requisito que debe ejecutar una APK es que se firme. Sin embargo, no importa quién lo haya firmado. No hay comprobaciones de que su firma sea la firma. Entonces, para resolverlo, simplemente elimine la verificación de licencia y vuelva a firmar con el certificado que desee. Luego, un usuario puede cargarlo en su teléfono con "permitir aplicaciones que no sean de mercado" marcadas.

No use las licencias de Google tal cual. Modificar el código en gran medida. Agregue algunos parámetros nuevos para usar al generar las claves. Mueva el código alrededor/vuelva a diseñarlo. No incluya la biblioteca de licencias de Google como un proyecto de biblioteca. Ponlo directamente en tu código. Haga el código tan delgado y kludgy como sea posible. Agregue funciones que no hagan nada, pero modifique los valores sobre la marcha. Realice otras funciones más adelante que los convierta de nuevo. Distribuya la verificación de la licencia en toda su base de códigos.

Si usted no hace esos pasos a continuación, el código puede ser violada de forma automática. Al hacer esos pasos, al menos el cracker necesita tomarse el tiempo para romperlo. Eso probablemente solo tomaría unas pocas horas como máximo. Pero unas pocas horas es mucho más tiempo que descifrar instantáneamente la capa de licencia de Google estándar. Existen herramientas de cracker que en realidad solo descargarán automáticamente los paquetes de Android recién lanzados y, si usan las licencias estándar de Android, agréguelos y cargue los APK agrietados a este tipo de sitios web. Al hacer que su implementación no sea la implementación estándar, usted hace las cosas mucho más difíciles, con solo unas pocas horas de esfuerzo de su parte.

2) Esta es una técnica común contra las grietas. Puedes hacer esto en Android si quieres. Pero puede romperse en unos 5 minutos. Si busca en Google, hay tutoriales sobre cómo descifrar esta técnica específica. Básicamente, solo busca la llamada CRC en el código y quita la verificación después de que vuelva el CRC.

Android no tiene seguridad inherente. Puedes rootear cualquier teléfono y descargar el APK. Puede hackear fácilmente una APK para habilitar la depuración y simplemente pasar el código para ver las claves que haya almacenado en el código. Así que al final no dedicaría demasiado tiempo a esto. Es imposible asegurar una aplicación de Android.Simplemente haría las cosas de sentido común en la lista de arriba y seguiría adelante.

3) Si es realmente paranoico, puede implementar su propia licencia en su propio servidor de licencias. Este es el enfoque que tomé, pero no tanto para proteger la aplicación por robo, ya que fue para darme un mecanismo para vender aplicaciones directamente desde mi sitio web para que los usuarios que no tienen Google Play todavía pudieran comprar mis aplicaciones.

+0

gran discusión chicos .... – himanshu

+0

@metalideath buena respuesta ....... + 1. –

+0

+1 buena información ... –

0

Mi comprensión al revisar los términos del mercado de Google es que no puede vender su aplicación directamente desde su propio sitio, ya que infringe las condiciones del mercado de la aplicación de Google. Creo que la implementación de protecciones personalizadas en tu código es la mejor manera de hacerlo. Los métodos estándar simplemente no son efectivos ya que el código se puede desmontar fácilmente

+2

¡Bienvenido a StackOverflow! Intente evitar declaraciones como "mi comprensión" y en su lugar intente vincularlas con declaraciones de hechos reales o documentación de respaldo. – ajacian81

+1

Te refieres a la parte sobre no poder vincular a una aplicación de Google Market/Play Store que no les da un recorte de los ingresos. Si no quiere darle una comisión a Google, simplemente puede hacer como Amazon App Store y configurar su propia distribución en su sitio sin vincularlo desde su aplicación en Google Play. Entonces, si no dependes de Google Play Store para que te descubran, entonces tu aplicación no infringe ninguno de sus términos. –

1

Me contacté con Google y me enviaron a una charla muy útil sobre cómo modificar la licencia básica LVL. Salida this talk de Google I/O 2011.

10

pasiva/agresiva hundimiento

Estoy de acuerdo con @metalideath que ofuscar y cludging el código de licencia no es infalible.

Aquí hay una técnica fácilmente oculta que llamo 'scuttling' que funciona para aplicaciones implementadas en Google AND Amazon. Scuttling es detección de piratería de front-end realizada por la aplicación. Una vez que se detecta lo que hay que hacer, se encuentra el creador de la aplicación.

  • Aggressive Scuttling: Eg. Terminación y/o alarmas en la aplicación pirateada. La comunicación de red no es necesariamente requerida.
  • Scuttling pasivo: Sin modificación de la aplicación. P.ej. habilitar el seguimiento.
  • Scuttling pasivo/agresivo: modificación sutil de la aplicación. P.ej. desactivar silenciosamente las funciones clave. Guíe a los piratas a pensar que cometieron un error y a que anulen la publicación de la aplicación pirateada.

Si su aplicación fue renombrada y/o instalada desde cualquier fuente que no sea Google o Amazon, scuttle() devuelve verdadero.

// Dont just copy/paste this code - that is what automated crackers look for - cludge it! 
// No network communication is required at runtime. 
// myPackageName should decode at runtime to "com.yourpackagename" 
// google  should decode at runtime to "com.android.vending"; 
// amazon  should decode at runtime to "com.amazon.venezia"; 

public boolean scuttle(Context context, String myPackageName, String google, String amazon) 
{ 
    //Scallywags renamed your app? 

    if (context.getPackageName().compareTo(myPackageName != 0) 
    return true; // BOOM! 

    //Rogues relocated your app? 

    String installer = context.getPackageManager().getInstallerPackageName(myPackageName); 

    if (installer == null) 
    return true; // BOOM! 

    if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0) 
    return true; // BOOM! 

    return false; 
} 

RESULTADOS

La siguiente captura fue tomada de Google analytics que muestran una aplicación gratuita rastreado pirateado de playstore (permiso com.android.vending) que se reasignó con hundimiento agresivo (no playstore instala detectado y terminado) . Caídas de seguimiento que no son de playstore (no configuradas). No se requirió el seguimiento, pero se habilitó para estas mediciones.

enter image description here

DISCUSIÓN

firma de servicio Nota juega un papel en echar a pique: El gestor de paquetes hace cumplir los nombres de paquetes únicos con firmas únicas.

Esto presenta la pregunta de qué hacer cuando la aplicación se hunde (pirate detectada por la aplicación). La piratería es una forma de viralización (distribución incontrolada) de su aplicación. Ya es detectable al habilitar el back-end de seguimiento de análisis. Scuttling permite al creador de la aplicación personalizar una respuesta de front-end con o sin seguimiento.

El pirateo agresivo es obviamente detectable por los piratas (BOOM!). Esto fomenta el agrietamiento adicional. El escurrimiento pasivo es mucho menos obvio, pero puede involucrar rastreo.

Es posible que la piratería no se pueda prevenir, pero es predecible, detectable y rastreable.

El seguimiento puede presentar problemas insuperables a los piratas, pero también presenta sus propios problemas éticos.

El escurrimiento pasivo/agresivo que no requiere comunicación de red como se describe anteriormente es quizás la mejor solución. Se oculta fácilmente (a diferencia de las licencias) y se puede adaptar para que sea lo menos obvia posible.

+2

+1 para la ilustración de efectos especiales. –

+1

¡La mejor respuesta que leí en mucho tiempo! Deberías llamarlo "embestir" ya que de hecho estás diciendo "¿quieres mi aplicación? ¡Aquí la tienes!" –

+0

Como se mencionó, el escabullimiento permite que el diseñador de la aplicación sea pasivo y/o agresivo al detectar un pirata. Como la piratería también es un canal de distribución viral, se debe pensar en las acciones que se tomen. Quizás redirigir al sitio web del creador o a la página de PlayStore sea lo mejor ... –

0

Lo mejor que puede hacer es no preocuparse. Las personas que lo piratean en China no son sus clientes, y nunca lo serán. Si no hubiera una versión pirata disponible, todavía no le pagarían una copia, con toda probabilidad. Además, si tu aplicación se vuelve popular, se clonará de todos modos, al igual que las aplicaciones iOS. Los sistemas de seguridad que ya ha implementado son todo lo que necesita, ya que impiden que la mayoría de los usuarios pirateen la aplicación.

Intentar hacer que su aplicación sea a prueba de piratería solo dañará la base de códigos y hará que sea más difícil de mantener, así como también puede presentar problemas a sus clientes que realmente pagan. En su lugar, enfóquese en promocionar su aplicación y haga que sea más fácil para los clientes pagarla y usarla. Al ser receptivo a las solicitudes de funciones y los informes de errores, agrega valor que las personas están dispuestas a pagar, en lugar de buscar alguna copia defectuosa de un sitio web chino que probablemente sea un troyano de todos modos.

Finalmente, informe las copias piratas a los proveedores de antivirus. Proporcione copias del APK. Agregarán firmas a sus bases de datos para que se marquen como potencialmente peligrosas.

Cuestiones relacionadas