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();
}
}