Memo pour reverse Android

Table des matières

Liens utiles

Snippet Smali

Instancier une classe

StringBuilder sb= newStringBuilder("str")
new-instance v1, Ljava/lang/StringBuilder;
const-string v2, "str"
invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

Afficher le contenu de variables dans logcat

const-string v0, "zog"
invoke-static {v0, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

Divers

Identifier les processus associés aux connexions sortantes

J’exclue le multicast et le traffic associé à la connexion adb

iptables -N LOGGING
iptables -I OUTPUT  -m state --state NEW -j LOGGING
iptables -A LOGGING -p tcp -m tcp --sport 5555 -j RETURN
iptables -A LOGGING -p tcp -m udp --dport 1900 -j RETURN
iptables -A LOGGING -j LOG --log-level 7 --log-prefix "SNIF : " --log-uid

Consulter en temps réel

dmesg -w | grep "SNIF "

Trouver les uid

pm list packages -U

Supprimer en masse un appel à une fonction

find . -name "*.smali" -type f | xargs sed -i -e '/LogHelper;->w(/d' 

Déplacer un certificat vers le trustore système

Filtrer les logs d’un package

adb logcat | grep "$(adb shell ps | grep 'android.apps.maps' | awk '{print $2}')"

Démarrer une activité

adb shell am start -n com.redteams/.secretActivity

Installer / désinstaller un package via adb

adb uninstall com.redteams.app
adb install -r dist/application-aligned.apk

Désassembler / recompiler avec apktool

apktool d "apk file"
apktool b "modified folder"

Editer une librairie système (jar)

adb pull /system/framework framework

unzip framework/services.jar -d extracted

baksmali d extracted/classes2.dex -o src/classes2
smali a src -o classes2.dex

zip -j ../services.jar classes*.dex

OAT <-> DEX

  • Deoptimize boot classes

    java -jar oat2dex.jar boot "boot.oat file"
  • Deoptimize application

    java -jar oat2dex.jar "app.odex" "boot-class-folder output from above"
  • Get odex from oat

    java -jar oat2dex.jar odex "oat file"

Applications utiles

ADB Manager

L’outil permet de se connecter via une connexion Wifi à adb.

https://f-droid.org/en/packages/com.matoski.adbm/

db connect 192.168.2.101:5555                                                
connected to 192.168.2.101:5555
adb shell                  

Blocker - App Component Controller

Permet de contrôler les activités / services.

https://play.google.com/store/apps/details?id=com.merxury.blocker

alt

alt
alt
alt

Proxy sur des applications précises

ProxyDroid :

https://play.google.com/store/apps/details?id=org.proxydroid

Coloration syntaxique sous Visual Studio Code

pour parcourir les sources j’utilise VisualStudio Code avec le plugin smali pour avoir une coloration syntaxique.

alt

Générer un keystore

echo y | keytool -genkeypair -dname "cn=reverse, ou=apk, o=redteams.fr, c=FR" -alias business  -keystore android.keystore -storepass ab987c -keypass ab987c -validity 20000  -keyalg RSA -keysize 2048

Extraire la signature d’un apk

java -jar getSignature.jar package.apk

Signer un apk

java -jar uber-apk-signer-1.1.0.jar  --ks android.keystore --ksAlias business --ksKeyPass ab987c --ksPass ab987c  -a com.google.android.gms_apkmirror.apk -o signed

apktool - No resource identifier found for attribute

La version du framework peut être obsolète

adb pull /system/framework/framework-res.apk <path_to_your_computer>
apktool  if framework-res.apk

Utiliser le signature spoofing

Il est nécéssaire d’avoir un services.jar patché.

<uses-permission android:name="android.permission.FAKE_PACKAGE_SIGNATURE"/>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
    <meta-data android:name="fake-signature" android:value="@string/fake_signature"/>

Dans le fichier values/strings.xml

<string name="fake_signature">3082[...]a789</string>

Modifier uniquement un DEX

Nécéssaire dans le cas où la décompilation/recompilation complète avec apktool se passe mal.

  1. Extraction via de la classe

    unzip -f com.google.android.gms_apkmirror.apk -d extracted
  2. Déssassemblage

    baksmali d classes2.dex -o classes2
  3. Modification des sources

  4. Recompilation

    smali a out
  5. Réintrégration de la classe dans l’apk

    cp out.dex classes2.dex
    zip com.google.android.gms_apkmirror.apk classes2.dex
  6. Alignement du zip et signature

    /usr/bin/zipalign  -p -v 4 gms.apk gms-aligned.apk

Le programme uber-apk-signer aligne mais pas les librairies

java -jar uber-apk-signer-1.1.0.jar  --ks android.keystore --ksAlias business --ksKeyPass ab987c --ksPass ab987c  -a com.google.android.gms_apkmirror-aligned.apk -o signed

Un module magisk entraine un bootloop

adb wait-for-device shell magisk --remove-modules

Patcher “Disable “Can’t take screenshot due to a security policy”

Dans services.jar éditer com/android/server/wm/ScreenshotController qui contient une méthode :

.method private updateScreenshotPolicyLocked(I)V

Apktool : invalid resource directory name

apktool b mysource

I: Using Apktool 2.4.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes2 folder into classes2.dex...
I: Checking whether resources has changed...
I: Building resources...
W: invalid resource directory name: mysource/res navigation
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_2875759753562249124.tmp, p, --forced-package-id, 127, --min-sdk-version, 21, --target-sdk-version, 29, --version-code, 950468672, --version-name, 7.5.7.4, --no-version-vectors, -F, /tmp/APKTOOL16878142926637484011.tmp, -e, /tmp/APKTOOL9086902964744789873.tmp, -0, arsc, -I, /home/eric/.local/share/apktool/framework/1.apk, -S, mysource/res, -M, mysource/AndroidManifest.xml]

Possiblement en raison de ressources pas compatible avec aapt1.

apktool b swiftkey --use-aapt2  

Odin FAIL! LZ4 is invalid

lz4 -B6 --content-size super.img super.img.lz4


--content-size
    Header includes original size (default:not present)

-B6
    Block size [4-7](default : 7)
    -B6= 1MB ; -B7= 4MB

Installer xposed sous magisk

  1. Install Latest Riru-Core Module(Magisk) ou sur mon mirroir

  2. Install Latest YAHFA Module(Magisk) ou sur mon mirroir

  3. Install Latest EdXposedManager ou sur mon mirroir

Related