Tutorial reflection & cracking java

Mettez à disposition vos propres cours de cracking ou des cours que vous trouvez intéressant.

Tutorial reflection & cracking java

Messagepar S8N » 15 Février 2020, 20:56

/!\ Avant tout ! Ceci est un tuto à but éducatif pour analyser un système de protection, il n'a aucune visée commerciale. Il n'est en aucun cas fait pour inciter à la violation des droits d'auteur /!\




Je suis un amateur, donc je vais dire des conneries, c'est sûr.
je vais expliquer TOUTES ma réflexion sur le cracking d'un logiciel (donc avec les fausse bonne idée).

Les outils que nous allons utiliser seront :


Quelque site pour apprendre le bytecode :

1. Récupération d'information
L'information est le nerf de la guerre, nous devons donc trouver autant d'informations que possible.

1.1 Récupération des mots clés
Ouvrez votre cible et recherchez des mots-clés qui vous permettront de trouver le code pertinent pour craquer ce logiciel.
Utilisez un bloc-notes pour garder une trace des indices et des pistes potentielles.

ps: utilisez toujours la langue anglaise pour afficher les messages ou la langue natif de l'éditeur.

Image
Je vois le mot Free et Version donc je les garde

Image
L'une des premières choses que je fais est de tester la clé/licence pour obtenir le message d'erreur

Image
Voici le message d'erreur, généralement le code qui vous permet de vérifier si la clé est correcte et juste à côté du message d'erreur
donc je récupére key, registration et ---BEING-KEY---

Image
et pour finir skip

1.2 Récupération des jar
Je dois maintenant chercher les jar pertinent.

Image
Les deux carrés sont les jar que je ne connais pas, alors je vais les ouvrir. (seule XXXXXXXX.jar sera finalement utile)

1.3 Recherche dans les jar

Ouvrez bytecodeviewer puis placez les jar dans l'onglet "Files"
Image

Cherchez ensuite les mots-clés que vous avez trouvés précédemment.
Image

Je ne trouve rien dans foxtrot-core.jar, donc foxtrot-core.jar doit être inutile.

Je vois que dans la class cC, la variable permettant au logiciel de savoir les fonction autorisé ou non est "this.a"
Image
et je vois aussi que le "F" qui représente la version "Free" est le chiffre 70.
http://www.ltg.ed.ac.uk/~richard/utf-8. ... &mode=char
donc je devrais aussi trouver tout le numéro 70 pour trouver les conditions qui limitent la fonctionnalité

Je cherche dans cette class (cC) quelle méthode initialise cette variable this.a
Image
et la surprise, c'est le construct qui donne la valeur de this.a donc si je trouve l'initialisation de la class cC je devrais seulement mettre E (pour entreprise) au lieu de F je pense

En cherchant les autres mots-clés, je suis tombé sur la méthode qui permet de vérifier la clé.
Image

1.4 Les solutions

Voici les solutions possible :
  • A. Je cherche et je modifie toutes les conditions avec le numéro 70, cela me permettra d'avoir ls fonctionnalités "Enterprise Version" tout en restant en "Free version".
  • B. Je modifie l'appel cC pour obtenir directement la "Enterprise Version" et ne toucher à rien d'autre.
  • C. Je modifie les conditions de validation de la clé afin que toute clé devienne valide.
  • D. J'analyse la vérification de la clé pour la création d'un keygen ou permettant la génération d'une seule clé valide.

1.5 Choissir LA solution

Je préfère clairement les solutions les moins intrusives avec le moins de modifications possibles.

Les solutions par ordre de préférence :
  • D. J'analyse la vérification de la clé pour la création d'un keygen ou permettant la génération d'une seule clé valide.
  • B. Je modifie l'appel cC pour obtenir directement la "Enterprise Version" et ne toucher à rien d'autre.
  • A. Je cherche et je modifie toutes les conditions avec le numéro 70, cela me permettra d'avoir ls fonctionnalités "Enterprise Version" tout en restant en "Free version".
  • C. Je modifie les conditions de validation de la clé afin que toute clé devienne valide.

2. Let's go !

2.1 Solution Clé (solution D)
Cette solution est parfaite car même après une mise à jour de votre cible, la clé sera logiquement toujours valable.

Image
Ah !!, c'est une validation de clé RSA, le carré bleu est la clé publique je pense.
Mes connaissances ne sont pas assez solides pour cette piste.

2.2 Solution init cC (solution B)

Je cherche à savoir quand le code initialise la classe cC
Image
Comme il est beau le paramétre F dans la fonction

Je vais changer le F en E
donc j'ouvre Recaf (https://github.com/Col-E/Recaf)
et j'ouvre le jar XXXXXXXX.jar puis je recherche la class cE
Image

Image
Image
Comme vous pouvez le voir, il y a notre fameux numéro 70

Image
Je remplace le 70 par un 69 (E)

A CHAQUE modification je vérifie si le décompilateur interprète correctement
Image
Si ce n'est pas le cas, cela signifie que j'ai fait une erreur.

Maintenant nous sauvons ce nouveau jar modifié (Attention TOUJOURS faire un bakcup du jar originel)
Image

Puis testons
Image
ça marche, j'ai toutes les fonctionnalités.

Mais c'est moche, j'ai un message d'erreur
Image

Pour ne plus obtenir ce message d'erreur, je dois insérer une date dans le logiciel.

je vois dans la class cC, ce bout de code
Code: Tout sélectionner
public final Date a() {
        return new Date((long)this.c * 1000L);
    }


donc this.c doit être un timestamp
http://www.timestamp.fr/

this.c est initialisé avec le construct cC exactement comme this.a
Image
Je n'ai donc qu'à définir les bons paramètres mais bizarrement, c'est un string. ôÔ

Image
le paramètre que je dois modifier est un appel à une méthode actuellement

Image
1672534799 correspond au timestamp du 1/1/2023 à 0:59:59

Image
Supprimez ensuite l'appel à la méthode que vous remplacez.
Image

et dans un premier temps, après chaque modification, nous vérifions
Image

puis testons !

...

Ça ne marche pas, j'ai dû me tromper quelque part.
Je vais changer ma solution.

2.3 Solution COALITION, DESTRUCTION! (solution A)
c'est parti pour tout detruire

Image
Image
Image

tranformation d'un return false en return true
Image

Remplacer un F par n'importe quelle lettre
Image

Image

Image

Image
J'ai fait beaucoup de modifications du genre afin d'avoir toutes les fonctionnalités de la "Enterprise Version" et sans aucun message d'erreur au lancement.

Image


Ce logiciel est assez facile à pirater,
Je suis déçu de ne pas avoir réussi à créer une clé valide, si quelqu'un veut m'aider, je ne serai pas contre ;)
voici la classe avec la vérification de la clé RSA https://mega.nz/#!rFQ0QSoL!7FaMNTum2697 ... sl5bsTYzRQ
voici toutes les captures d'écran si un jour les liens ne fonctionnent plus https://mega.nz/#!XRI0GCyR!iRxKobGc5WBC ... RPEFcohCFM

S'il y a des erreurs, corrigez-moi !
S8N
Elève
Elève
 
Messages: 41
Inscription: 25 Juin 2012, 11:48

Re: Tutorial reflection & cracking java

Messagepar Arkan » 16 Février 2020, 11:57

C'est quoi le nom du soft ?
Avatar de l’utilisateur
Arkan
Mutation en crackeur...
Mutation en crackeur...
 
Messages: 99
Inscription: 03 Juin 2007, 16:53

Re: Tutorial reflection & cracking java

Messagepar S8N » 16 Février 2020, 16:47

Répondu en pm pour éviter de révéler le nom en public.
Le but de ce sujet est de découvrir comment je l'ai fait et par quelle réflexion.
S8N
Elève
Elève
 
Messages: 41
Inscription: 25 Juin 2012, 11:48

Re: Tutorial reflection & cracking java

Messagepar 0xdb » 20 Février 2020, 17:36

J'ai encore un doute mais très probablement
Image
je sais, c'est pas bien.. :aie:
Avatar de l’utilisateur
0xdb
Visiteur
Visiteur
 
Messages: 24
Inscription: 19 Novembre 2015, 16:52

Re: Tutorial reflection & cracking java

Messagepar S8N » 24 Février 2020, 08:25

Et merde.
tant pis l’erreur est humaine ;)
S8N
Elève
Elève
 
Messages: 41
Inscription: 25 Juin 2012, 11:48


Retourner vers Tutoriels

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité