content: package fuzion24.application.vulnerability.detector;
  
  import android.app.ProgressDialog;
  import android.content.Context;
  import android.content.pm.ApplicationInfo;
  import android.content.pm.PackageManager;
  import android.framework.util.jar.JarFileHelper;
  import android.os.AsyncTask;
  import android.util.Log;
  import android.util.Pair;
  
  
  import java.util.ArrayList;
  import java.util.List;
  
  public class ApplicationVulnerabilityTester extends AsyncTask<Void,Integer,List<ApplicationVulnTestResult>> {
          private final Context mCtx;
          private final ApplicationResultsCallback mCustomCallback;
          private final Boolean mShowWaitDiaglog;
  
          private ProgressDialog mProgressDialog;
  
          public ApplicationVulnerabilityTester(Context actv, Boolean showScanDialog, ApplicationResultsCallback callback){
              mCtx = actv;
              mShowWaitDiaglog = showScanDialog;
              mCustomCallback = callback;
          }
  
          @Override
          protected void onPreExecute()
          {
              if(mShowWaitDiaglog)
                  mProgressDialog = ProgressDialog.show(mCtx, "Application Vulnerability Checker", "Checking apps for various vulnerabilities", false);
          }
  
          protected void onProgressUpdate(String... progress) {
              if(mShowWaitDiaglog) {
                  Log.d("ANDRO_ASYNC", progress[0]);
                  mProgressDialog.setProgress(Integer.parseInt(progress[0]));
              }
          }
  
          @Override
          protected List<ApplicationVulnTestResult> doInBackground(Void... params)
          {
              PackageManager pm = mCtx.getPackageManager();
              List<ApplicationInfo> apps = pm.getInstalledApplications(PackageManager.GET_SHARED_LIBRARY_FILES | PackageManager.GET_META_DATA);
  
              List<ApplicationVulnTestResult> applicationVulnerabilityTestResults = new ArrayList<>();
              List<Pair<ApplicationInfo,Exception>> untestedApps = new ArrayList<>();
  
              for(int i = 0; i < apps.size(); i++) {
  
                  ApplicationInfo ai = apps.get(i);
  
                  String sourceApk = ai.publicSourceDir;
  
                  boolean apkExploitedBug13678484 = false;
  
                  try {
                      apkExploitedBug13678484 = JarFileHelper.isExploitingBug13678484(sourceApk);
                  }catch(Exception e){
                      untestedApps.add(Pair.create(ai,e));
                  }
  
                  if(apkExploitedBug13678484){
                      applicationVulnerabilityTestResults.add(ApplicationVulnTestResult.build(ai, null));
                  }
  
              }
  
              return applicationVulnerabilityTestResults;
          }
  
          @Override
          protected void onPostExecute(List<ApplicationVulnTestResult> appVulnerabilityResults)
          {
              super.onPostExecute(appVulnerabilityResults);
              if(mCustomCallback != null)
                  mCustomCallback.finished(appVulnerabilityResults);
  
              if(mShowWaitDiaglog)
                mProgressDialog.dismiss();
          }
  }