Skip to content

SECFORCE/droidground-samples

Repository files navigation

DroidGround Samples

A simple collection of dummy applications to showcase DroidGround.

The following applications are currently available:

Application Description
Hidden Activity A simple application with an hidden activity that contains the flag
Multi Step An application with an exported activity with a state machine within it
Net Multi Step Same application as the previous one, which makes a network request instead of displaying the flag on the screen

Every sample app has the following:

  • a placeholder flag set to DROIDGROUND_FLAG_PLACEHOLDER
  • a config.json file in the root of the app directory that specifies:
    1. The file(s) that contain the placeholder flag
    2. The actual flag

Using this info the GitHub action can build two versions of each app (one with the placeholder flag and one with the actual flag). This simulates what should happen in a real CTF event, where the player are given the placeholder version while the real one is installed on the device accessible through DroidGround.

The release signing config is set as follows:

signingConfigs {
    getByName("debug") {
    }

    create("release") {
        // Only configure if all props are provided
        val storeFileProp = project.findProperty("android.injected.signing.store.file") as String?
        val storePasswordProp = project.findProperty("android.injected.signing.store.password") as String?
        val keyAliasProp = project.findProperty("android.injected.signing.key.alias") as String?
        val keyPasswordProp = project.findProperty("android.injected.signing.key.password") as String?

        if (
            storeFileProp != null &&
            storePasswordProp != null &&
            keyAliasProp != null &&
            keyPasswordProp != null
        ) {
            storeFile = file(storeFileProp)
            storePassword = storePasswordProp
            keyAlias = keyAliasProp
            keyPassword = keyPasswordProp
        } else {
            // Leave it untouched. Do NOT set bogus values.
        }
    }
}

buildTypes {
    getByName("debug") {
        signingConfig = signingConfigs.getByName("debug")
        isDebuggable = true
    }

    getByName("release") {
        signingConfig = signingConfigs.getByName("release")
        isMinifyEnabled = false
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard-rules.pro"
        )
    }
}

If you want to build them on your own you can use the build.sh script provided here in the root of the repo.