Lucky patcher, comment puis-je m'en protéger?

Je sais que ce sujet a été ouvert à plusieurs reprises et j'ai beaucoup appris, mais j'ai rencontré un problème sur lequel j'ai vraiment besoin de conseils.

J'utilise LVL avec Obfuscation. J'ai modifié le LVL ALOT par défaut afin que l'anti-LVL ne le brise pas. Cependant, Lucky Patcher avec un clic le casse! J'ai essayé de voir la nouvelle APK cassée. Oui, il a simplement appelé ma méthode "allow".

  • Android - Comment afficher une ligne verticale sur l'arrière-plan d'un ListView (et selon la hauteur de la ligne)?
  • Obtenir le nom du package de la variante d'application dans le plugin gradle
  • L'application décède avec "Envoi de signal". Mais aucune exception ou autre information
  • Comment récupérer une chaîne depuis AsyncTask?
  • Comment configurer l'icône à côté du texte dans la tabulation
  • Console de développeur Google Play: applications beta testées gratuitement?
  • Ma question est de savoir si quelqu'un peut recommander un moyen d'empêcher Lucky Patcher de le casser? Je sais que je ne peux pas le rendre à l'épreuve des balles, mais je veux qu'il soit au moins aussi simple pour un logiciel à un clic.

  • Est-ce que quelqu'un d'autre a remarqué l'écran blanc qu'une transition de fenêtre diapositive crée lors de son démarrage?
  • Android: onSaveInstanceState n'est pas appelé de l'activité
  • Cloner la visualisation de texte pour l'ajouter à un ViewGroup
  • L'animation ne démarre pas dans les éléments ListView actuellement visibles
  • Peut-on avoir plusieurs applications dans un projet Android Studio?
  • Explorateur de fichiers dans Android Studio
  • 6 Solutions collect form web for “Lucky patcher, comment puis-je m'en protéger?”

    Code pour vérifier votre certificat

    public void checkSignature(final Context context) { try { Signature[] signatures = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; if (signatures[0].toCharsString() != <YOUR CERTIFICATE STRING GOES HERE>) { // Kill the process without warning. If someone changed the certificate // is better not to give a hint about why the app stopped working android.os.Process.killProcess(android.os.Process.myPid()); } } catch (NameNotFoundException ex) { // Must never fail, so if it does, means someone played with the apk, so kill the process android.os.Process.killProcess(android.os.Process.myPid()); } } 

    Et comment trouver lequel est votre certificat, simple aussi. Vous devez produire un APK, en mode Libération, car le certificat de débogage est différent de celui de la publication. Émettez votre chaîne de certificat à une vue temporaire pour le copier ou à un fichier texte avec l'appel suivant, IMPORTANT: NE PAS le sortir le logcat, car le cordon est trop grand et le logcat ne le montrera pas et coupera le dernier char personnages:

     signatures[0].toCharsString(); example: YourTextView.setText(signatures[0].toCharsString()); 

    Maintenant, rappelez-vous que lorsque vous revenez au mode de débogage, le certificat est encore différent, et peut-être différent, parfois, sur chaque version, de sorte que vous obtiendrez un débogueur. Ensuite, il est préférable d'utiliser la ligne suivante pour l'avoir plus facile lors du développement, et placez-le juste avant d'appeler le test de certificat:

     if ((context.getApplicationContext().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) { return; } 

    Évitez donc d'appeler ce code de certification en mode Débogage

    Et maintenant, le correcteur de patcher chanceux

    Ce code vérifiera son existence. J'ai décompilé toutes les versions de Lucky Patcher et j'ai découvert que son créateur utilisait 2 noms de paquets entre tous les realeases. Donc, il vous suffit de suivre les nouvelles versions et de continuer à ajouter les futurs noms de paquetages chanceux aux fonctions de contrôle.

    Aussi, une recommandation, chiffrer les chaînes de noms de paquets au lieu de simplement les coder comme dans l'exemple, donc lucky frappeur ne sort pas avec une nouvelle version qui vient de remplacer les chaînes en les rattrapant. Permet de créer des craquelins.

     private boolean checkLuckyPatcher() { if (packageExists("com.dimonvideo.luckypatcher")) { return true; } if (packageExists("com.chelpus.lackypatch")) { return true; } if (packageExists("com.android.vending.billing.InAppBillingService.LACK")) { return true; } return false; } private boolean packageExists(final String packageName) { try { ApplicationInfo info = this.getPackageManager().getApplicationInfo(packageName, 0); if (info == null) { // No need really to test for null, if the package does not // exist it will really rise an exception. but in case Google // changes the API in the future lets be safe and test it return false; } return true; } catch (Exception ex) { // If we get here only means the Package does not exist } return false; } 

    Chaque fois que Lucky Patcher crée un fichier APK modifié, il se termine toujours par un nom de package différent, car vous ne pouvez pas exécuter deux applications sous le même nom de package.

    Voici une solution simple qui vérifie si votre code est exécuté sous le mauvais nom du package:

     PackageManager pm = getPackageManager(); try { PackageInfo packageInfo = pm.getPackageInfo("YOUR_PACKAGE_NAME",PackageManager.GET_ACTIVITIES); } catch (PackageManager.NameNotFoundException e){ finish(); //If you get here, your code is running under a different package name... Kill the process! } 

    Je rappelle juste finish(); Sur mon application et je ne peux pas la casser, mais il pourrait être préférable d'utiliser android.os.Process.killProcess(android.os.Process.myPid()); Comme suggéré @PerracoLabs.

    À partir de la version actuelle (6.4.6), Lucky Patcher génère un jeton très court. Par exemple, un jeton d'achat réel:

     felihnbdiljiajicjhdpcgbb.AO-J1OyQgD6gEBTUHhduDpATg3hLkTYSWyVZUvFwe4KzT3r-O7o5kdt_PbG7sSUuoC1l6dtqsYZW0ZuoEkVUOq5TMi8LO1MvDwdx5Kr7vIHCVBDcjCl3CKP4UigtKmXotCUd6znJ0KfW 

    Et c'est Lucky Token:

     kvfmqjhewuojbsfiwqngqqmc 

    La solution assez simple consiste à vérifier la longueur de la chaine du jeton

     @Override public void onIabPurchaseFinished(IabResult result, Purchase info) { if (info.getToken().length < 25) { Log.wtf("PIRATE", "PIRATE DETECTED"); return; } } 

    Une façon, c'est de vérifier si le correcteur chanceux est installé et, dans l'affirmative, afficher un message à l'utilisateur et tuer votre processus par la suite. Si un utilisateur l'a, signifie qu'il essaie de briser votre logiciel ou celui d'un autre développeur. Alors, mieux ne pas permettre d'utiliser votre application dans un téléphone qui l'a installé. Lutte contre le piratage.

    Oui, et c'est la pointe de ma suggestion. Dans votre code, mettez en œuvre une fonction que vous serez appelé dans certaines actions, dans ces actions, vous devez vérifier le paquet de patcher chanceux, s'il est installé ou non. C'est assez facile à faire et je peux partager le code si vous ne savez pas comment. Si vous le détectez, arrêtez votre application. Ne permettez pas de l'utiliser même si l'utilisateur l'a payé, mieux sa mauvaise révision que 10000 exemplaires illégaux. Alors aussi, même si vos applications sont fissurées, ce ne sera que pour LVL, lucky patcher ne peut pas connaître chaque application sur le marché qui a un tel algorithme contre elle et rendrait impossible de faire une version de patcher chanceuse qui couvre toutes les applications Sur le marché, comme jamais le développeur l'écrirait comme moyen de le détecter. Donc, à la fin, votre application pourrait être fissurée et n'a plus la protection lvl, mais vous ne pourrez jamais l'exécuter si le téléphone a été doté d'un correctif chanceux. Maintenant encore plus loin, conservez un drapeau dans un fichier de configuration pour détecter si, lors de la première exécution de votre application, vous avez détecté un correcteur chanceux, au cas où il le fissurerait, puis désinstalle le correcteur chanceux. De cette façon, même si après l'utilisateur désinstalle luckypatcher, vous pouvez toujours arrêter d'exécuter votre application, l'utilisateur devra de nouveau réinstaller votre application non gravée. Et il va culpabiliser toujours le parfum chanceux.

    Lucky Patch supprime la vérification de la licence, mais ne supprime pas le code pour vérifier si Lucky Patch est installé. L'application ne fonctionnera pas à moins que l'utilisateur ne supprime Lucky Patch avant d'exécuter l'application fissurée.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.