package parser.apk; import com.googlecode.dex2jar.reader.DexFileReader; import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.zip.ZipException; /** * Created with IntelliJ IDEA. * User: lai * Date: 5/28/13 * Time: 11:50 AM */ public class APKTest { @Test public void testGetFileName() { APK apk = null; try { apk = new APK(new File("./test-apk/error.apk")); } catch (ZipException e) { System.out.println("Zip 异常 : " + e.getMessage()); return; } catch (IOException e) { System.out.println(e.getMessage()); return; } catch (Exception e) { System.out.println("异常:" + e.getCause()); return; } System.out.println("<><><><>ADASDASD"); System.out.println(apk.getCertificateInfos()); System.out.println(apk.getFileName()); System.out.println(apk.getPackageName()); System.out.println(apk.getActivities()); System.out.println(apk.getLabel()); System.out.println(apk.getPermissions()); System.out.println(apk.getReceivers()); System.out.println(apk.getServices()); System.out.println(apk.getVersionCode()); System.out.println(apk.getVersionName()); // System.out.println(apk.getStrings()); // System.out.println(apk.getMethods()); DexFileReader dexFileReader = apk.getDexFileReader(); if (dexFileReader == null) { System.out.println("dexFileReader is null"); } else { System.out.println(dexFileReader.loadStrings()); } apk.getMethods(); /* StringBuilder sb = new StringBuilder(); HashMap<String, String> methods = apk.getMethods(); for (String key : methods.keySet()) { sb.append(methods.get(key)); if (sb.indexOf("execute") != -1) { System.out.println(key); } if (sb.toString().contains("execute")) { System.out.println(key); } sb.delete(0, sb.length()); } */ // HashMap<String, HashSet<String>> set = apk.getStringsMap(); // for (String cls : set.keySet()) { // System.out.print(cls + " >>> "); // System.out.println(set.get(cls)); // } // List<ClassDefItem> classDefItems = apk.getDexClasses(); // // System.out.println(classDefItems.get(3).stringData); // DexFileReader dexFileReader = new DexFileReader(new File("/home/lai/Work/scan/20130521/test2.apk")); // System.out.println(dexFileReader.getClassSize()); // for (String str : dexFileReader.loadStrings()) { // System.out.println(str); // } // final List<ClassDefItem> classList = new ArrayList<ClassDefItem>(); // dexFileReader.accept(new ClassCollector(classList)); // Collections.sort(classList); // Collections.sort(classList, new ComparatorClass()); // for (ClassDefItem classDefItem : classList) { // System.out.print(classDefItem.className); // // dexFileReader.visitClass(new CodeCollector(classDefItem), classDefItem.classIdx, // DexFileReader.SKIP_DEBUG | DexFileReader.SKIP_ANNOTATION); // System.out.print("-" + classDefItem.fields.size()); // System.out.print("-" + classDefItem.methods.size()); // System.out.println("-" + classDefItem.methodMap.size()); // if (classDefItem.methods.size() > 0) { // for (Method mtd : classDefItem.methods) { // System.out.println("\t" + mtd.getName()); // } // } // // if (classDefItem.methodMap.size() > 0) { // for (String key : classDefItem.methodMap.keySet()) { //// System.out.println("\t" + key); // if(classDefItem.methodMap.get(key).contains("Lorg/apache/http/impl/client/DefaultHttpClient;.execute")) { // System.out.print(classDefItem.className); // System.out.println("\t" + key); // System.out.println(classDefItem.methodMap.get(key)); // } // // } // } } // class ComparatorClass implements Comparator<ClassDefItem> { // @Override // public int compare(ClassDefItem arg0, ClassDefItem arg1) { // final String name0 = arg0.className; // final String name1 = arg1.className; // return name0.compareTo(name1); // } // } @Test public void test360() { String path = "/home/lai/Public/20140708001244405088000114.apk"; APK apk; try { // apk = new APK(new File(path)); apk = new APK(path); // System.out.println(apk.getStringsMap()); DexFileReader dexFileReader = apk.getDexFileReader(); System.out.println(apk.getStrings()); } catch (IOException e) { System.out.println(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } } @Test public void testAPKSubAPK() { APK apk; try { apk = new APK("/Users/bin/Downloads/error.apk", true, false, true); System.out.println("--------------------------"); System.out.println(apk.getLabel()); System.out.println(apk.getCertificateInfos()); HashMap<String, String> hashMap = apk.getSubFilesMap(); ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("ANDROID_BINARY_XML"); arrayList.add("JPEG"); arrayList.add("PNG"); arrayList.add("OGG"); arrayList.add("XML"); arrayList.add("ANDROID_ARSC"); arrayList.add("US-ASCII text"); arrayList.add("GB2312 text"); for (String key : hashMap.keySet()) { String fileType = hashMap.get(key); if (!arrayList.contains(fileType)) { System.out.println(key + " : " + fileType); } } // apk = new APK("/home/lai/Work/samples/Exploit.AndroidOS.DroidDream/Test/" + // "2011-02-17-f49410d96e93822e44dfa1a45b55e250abca233a43f4afb0237a1a0f76b62e67.apk"); // System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); // HashMap<String, APK> hashMap = apk.getSubApkDataMap(); // for (String str : hashMap.keySet()) { // System.out.println(str); // System.out.println(hashMap.get(str).getCertificateInfos()); // System.out.println(hashMap.get(str).getPackageName()); // System.out.println(hashMap.get(str).getPermissions()); // // } // } catch (IOException e) { e.printStackTrace(); System.out.println(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } // System.out.println(apk.getStrings()); // System.out.println(apk.getMethods()); // DexFileReader dexFileReader = apk.getDexFileReader(); // if (dexFileReader == null) { // System.out.println("dexFileReader is null"); // } else { // System.out.println(dexFileReader.loadStrings()); // } // // System.out.println(apk.getMethods()); } }