Binary ARTist Releases

In order to give you something to try out without having to build parts of the ARTist ecosystem, we publish ready-made ARTist apk files here to be used directly on (rooted) supported Android versions. This includes ArtistGui packages that already ship with the compiler binaries for a certain hardware-Android OS pair and also some modules for testing purposes. After installation, you can import modules and use ArtistGui to recompile applications installed on your device. What the instrumentation in particular is doing depends on the module below.

If you wonder why the file size is a little higher than usual, the native libraries embedded in the apk files are not that small.

Disclaimer: Please keep in mind that ARTist is mostly targeted towards security researchers and experts. As we consider ARTist an academic prototype, we cannot give hard guarantees, so use at your own risk.

ArtistGui packages

You can download ArtistGui apk packages at the corresponding GitHub project here.

You can find the Android version your device is running in the settings app. Keep in mind that your device needs to be rooted to make use of ARTist.


We currently provide some modules for checking whether ARTist instrumentation works for you. None of those is really “helpful” for users, this is just meant for developers to check whether their ARTist setup works or to teach them how to build modules.

More user-friendly modules will follow in the future.

The trace module injects logging into each single method of a target so that the name of the invoked method is written to logcat at runtime. You can use this to observe what your favorite apps are doing or just to ensure yourself that the instrumentation is robust even on a larger scale.

The logtimization module module only prints some debug logs at compile time, so the runtime behavior of apps is not changed. Again, this is meant for debugging purposes.

And finally, we have the template module that serves as a template for new modules. It contains documentation on several utility methods and other boilerplate code of ARTist to give module developers a head start, so you can read the code first and then see the module in action.

How to use it

End to end, you have to do the following:

  • Install the correct ArtistGui package for your architecture. Don’t worry, if you pick the wrong one, chances are ArtistGui detects this and displays a warning that no ARTist binaries are available.
  • Save the modules of your choosing to your device
  • Start the ArtistGui app
  • Navigate to the Modules tab
  • Tap on the plus on the top right corner
  • Use the file picker to locate the modules you saved to the device earlier
  • long-tap on their names and tap on ok to import them
  • Now switch to the Instrumentation tab
  • Locate the application you want to instrument by either scrolling down or using the search on top
  • Tap on the package name of the app to reveal further options
  • Mark the modules you want to apply and tap on INSTRUMENT
  • Wait for the compilation to finish. Depending on the target, this might take a while.
  • Depending on whether you chose to start apps immediately after instrumenting them (see Settings), the instrumented app is either starting or you have to do this on your own
  • What happens next depends on the module. If you for example used the trace module, output similar to the following will pop up in logcat:
D/ArtistCodeLib: Caller -> de.infonline.lib.p.a(SourceFile)
D/ArtistCodeLib: Caller -> okio.RealBufferedSink.writeUtf8(
D/ArtistCodeLib: Caller -> de.infonline.lib.aa.e(SourceFile)
D/ArtistCodeLib: Caller -> de.infonline.lib.IOLSession$7.J(SourceFile:822)
D/ArtistCodeLib: Caller -> okhttp3.Headers.value(
D/ArtistCodeLib: Caller -> de.infonline.lib.q$a.a(SourceFile:44)
D/ArtistCodeLib: Caller -> com.squareup.picasso.PicassoExecutorService$PicassoFutureTask.compareTo(
D/ArtistCodeLib: Caller -> com.squareup.picasso.PicassoExecutorService$PicassoFutureTask.compareTo(
D/ArtistCodeLib: Caller -> de.infonline.lib.q.m(SourceFile:69)
D/ArtistCodeLib: Caller -> com.squareup.picasso.BitmapHunter.getPriority(
D/ArtistCodeLib: Caller -> okhttp3.Response$Builder.access$000(
D/ArtistCodeLib: Caller -> com.squareup.picasso.BitmapHunter.getPriority(
D/ArtistCodeLib: Caller -> com.squareup.picasso.PicassoExecutorService$PicassoFutureTask.compareTo(
D/ArtistCodeLib: Caller -> com.squareup.picasso.PicassoExecutorService$PicassoFutureTask.compareTo(