通过应用层分析,ARTistGUI的主要处理函数在/ArtistGui/app/src/main/java/saarland/cispa/artist/artistgui/instrumentation/InstrumentationTask.java中,代码如下:
@Override
public void run() {
Log.i(TAG, "Run() compiling and starting " + mRunConfig.app_package_name);
Log.i(TAG, "> apkPath: " + mRunConfig.app_apk_file_path);
Log.i(TAG, "> codeLibName: " + mRunConfig.codeLibName);
Log.i(TAG, "> Keystore: " + mRunConfig.keystore);
try {
ArtistThread.checkThreadCancellation();
prepareReporter();
reportProgress(10, "Preparing build environment");
String pathDex2oat = mInstrumenationStages.prepareEnvironment();
ArtistThread.checkThreadCancellation();
mInstrumenationStages.probePermissionAndDeleteOatFile();
ArtistThread.checkThreadCancellation();
reportProgress(40, "Merging CodeLib");
mInstrumenationStages.mergeCodeLib();
ArtistThread.checkThreadCancellation();
mInstrumenationStages.backupMergedApk();
ArtistThread.checkThreadCancellation();
reportProgress(50, "Compiling: " + mRunConfig.app_package_name);
mInstrumenationStages.runDex2OatCompilation(pathDex2oat);
ArtistThread.checkThreadCancellation();
reportProgress(90, "Compilation done, setting file permissions");
mInstrumenationStages.setOatFilePermissions();
} catch (InstrumentationException | ArtistInterruptedException e) {
reportResult(false);
return;
}
reportResult(true);
}
其中主要的函数为:
- mInstrumenationStages.probePermissionAndDeleteOatFile();
- mInstrumenationStages.mergeCodeLib();
- mInstrumenationStages.backupMergedApk();
- mInstrumenationStages.runDex2OatCompilation(pathDex2oat);
- mInstrumenationStages.setOatFilePermissions();
这五个函数位于/ArtistGui/app/src/main/java/saarland/cispa/artist/artistgui/instrumentation/stages/InstrumentationStagesImpl.java,主要完成了对APK文件的处理,先看probePermissionAndDeleteOatFile:
public void probePermissionAndDeleteOatFile() {
reportProgressDetails("Probing oat file permissions: " + mRunConfig