๐Ÿ”™Reverse engineering

Description

La rรฉtroingรฉnierie est un procรฉdรฉ par lequel on va comme son nom l'indique inverser le processus d'ingรฉnierie grรขce au code source de l'application testรฉ. On va alors tenter d'en comprendre tout ou une partie intรฉressante du fonctionnement de l'application pour en dรฉceler des vulnรฉrabilitรฉs qui pourront ensuite รชtre exploitรฉ en modifiant le code et en le recompilant.

L'ingรฉnierie inverse d'un fichier APK pourrait conduire ร  contourner diverses mesures de sรฉcuritรฉ. Les fichiers APK peuvent รชtre inversรฉs ร  l'aide d'outils open source tels que dex2jar, APKTOOL et autres.

Obtenir un APK

Tรฉlรฉchargement en ligne

APK Combo est un excellent site pour trouver et tรฉlรฉcharger des APK en ligne.

Extraire l'APK d'une application installรฉe

Une autre mรฉthode vise ร  extraire le fichier APK d'une application dรฉjร  installรฉe. Des outils tiers Android peuvent รชtre utilisรฉs pour exporter des fichiers APK. APK Export par exemple est une application Android qui exporte automatiquement le fichier APK d'une autre application et le stocke localement.

Directement depuis l'appareil

Lorsqu'une application est dรฉjร  installรฉe sur l'appareil, le fichier APK est stockรฉ dans le rรฉpertoire /data/app/<package name>.

Commande utile pour retrouver le nom du package souhaitรฉ:

$ adb shell pm list packages | grep <nom de l'application>

Une fois que nous obtenons le nom du package, nous tapons la commande suivante pour obtenir le chemin complet du fichier APK.

$ adb shell pm path com.example.myapp

Enfin, nous pouvons taper la commande suivante pour rรฉcupรฉrer le fichier apk.

$ adb pull /data/app/com.example.myapp-1/exemple.apk

Edition d'un APK

Avec Apktool:

Pour dรฉcompiler, entrer la commande:

$ apktool d exemple.apk

dans les rรฉpertoires et fichiers qui en ressortent, on retrouve un rรฉpertoire smali dans lequel on va trouver le code ร  compiler. C'est ces fichiers qu'il faut modifier.

Une fois les modifications voulus effectuรฉes, on peut recompiler l'apk avec la commande:

$ apktool b exemple.apk

Il nous faut ensuite signer le nouveau fichier avec un certificat auto-signรฉ comme ceci:

$ keytool -genkey -keystore exemple.keystore -validity 1000 -alias exemple

puis,

$ jarsigner -keystore exemple.keystore -verbose exemple/dist/exemple.apk exemple

puis,

$ zipalign -v 4 exemple.apk exemple-final.apk

Avant de lancer le nouvel apk, il nous reste alors ร  dรฉsinstaller l'ancien comme ceci:

$ adb uninstall com.example.demo

puis ร  installer le nouveau avec la commande:

$ adb install exemple.apk

Si l'application fonctionne normalement aprรจs modification, c'est ร  rapporter.

Debug

Si erreur "Failed to extract native libraries": Mettre extractNativeLibs="false" ร  "true".

Si erreur "Invalid certificate": utiliser un algorithme, exemple: keytool -genkey -keystore exemple.keystore -validity 1000 -alias exemple -sigalg SHA1withRSA -keyalg RSA -keysize 1024

Derniรจre mise ร  jour