Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Robustness fixes #150

Merged
merged 2 commits into from
Feb 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.google.classyshark.silverghost.contentreader.dex;

import java.io.File;
import org.jf.dexlib2.DexFileFactory;
import org.jf.dexlib2.Opcodes;
import org.jf.dexlib2.dexbacked.DexBackedDexFile;
import org.jf.dexlib2.iface.DexFile;

import java.io.File;

// TODO inline class, looks redundant
public class DexlibLoader {
public static DexFile loadDexFile(File binaryArchiveFile) throws Exception {
// TODO optimize
DexFile newDexFile = DexFileFactory.loadDexFile(binaryArchiveFile,
19 /*api level*/, true);
DexBackedDexFile newDexFile = DexFileFactory.loadDexFile(binaryArchiveFile,
Opcodes.forApi(19));

return newDexFile;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import com.google.classyshark.silverghost.translator.apk.dashboard.ClassesDexDataEntry;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

Expand Down Expand Up @@ -58,12 +57,7 @@ public void apply() {
ELEMENT element = new ELEMENT("\n ~ APK DASHBOARD ~\n" , TAG.IDENTIFIER);
elements.add(element);


Iterator<ClassesDexDataEntry> dexesIter = apkDashboard.iterator();

while (dexesIter.hasNext()) {

ClassesDexDataEntry dexEntry = dexesIter.next();
for (ClassesDexDataEntry dexEntry : apkDashboard.getAllDexEntries()) {

element = new ELEMENT("\n" + dexEntry.getName(), TAG.MODIFIER);
elements.add(element);
Expand Down Expand Up @@ -113,25 +107,6 @@ public void apply() {
+ "\n", TAG.DOCUMENT);
elements.add(element);
}

dexesIter = apkDashboard.iterator();

while (dexesIter.hasNext()) {

ClassesDexDataEntry dexEntry = dexesIter.next();

element = new ELEMENT("\n" + dexEntry.getName(), TAG.MODIFIER);
elements.add(element);

element = new ELEMENT(
"\nSyntheticAccessors \n", TAG.MODIFIER);
elements.add(element);

element = new ELEMENT(
"\n" + dexEntry.syntheticAccessors.toString()
+ "\n", TAG.DOCUMENT);
elements.add(element);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
Expand All @@ -34,7 +33,7 @@
import org.ow2.asmdex.ApplicationVisitor;
import org.ow2.asmdex.Opcodes;

public class ApkDashboard implements Iterable<ClassesDexDataEntry> {
public class ApkDashboard {

public ArrayList<ClassesDexDataEntry> classesDexEntries = new ArrayList<>();
public ArrayList<ClassesDexDataEntry> customClassesDexEntries = new ArrayList<>();
Expand All @@ -51,10 +50,16 @@ public ApkDashboard(File apkFile) {
public void inspect() {
// TODO add exception for not calling inspect
MultidexReader.fillApkDashboard(apkFile, this);

System.out.println("Done inspecting");
}

public Iterator<ClassesDexDataEntry> iterator() {
return new ClassesDexIterator();
public List<ClassesDexDataEntry> getAllDexEntries() {
ArrayList<ClassesDexDataEntry> result = new ArrayList<>();
result.addAll(classesDexEntries);
result.addAll(customClassesDexEntries);

return result;
}

public List<String> getNativeErrors() {
Expand Down Expand Up @@ -124,6 +129,7 @@ public List<String> getJavaInternalAPIsErrors() {
public static ClassesDexDataEntry fillAnalysisPerClassesDexIndex(int dexIndex, File classesDex) {
ClassesDexDataEntry dexData = new ClassesDexDataEntry(dexIndex);


try {
InputStream is = new FileInputStream(classesDex);
ApplicationVisitor av = new ApkNativeMethodsVisitor(dexData);
Expand All @@ -140,11 +146,12 @@ public static ClassesDexDataEntry fillAnalysisPerClassesDexIndex(int dexIndex, F
DexBackedDexFile dataPack = (DexBackedDexFile) dxFile;
dexData.allMethods = dataPack.getMethodCount();

dexData.syntheticAccessors =
new SyntheticAccessorsInspector(dxFile).getSyntheticAccessors();
//dexData.syntheticAccessors =
// new SyntheticAccessorsInspector(dxFile).getSyntheticAccessors();

} catch (Exception e) {
e.printStackTrace();
System.out.println("here " + e);
}

return dexData;
Expand All @@ -167,54 +174,4 @@ private static List<String> extractLibNamesFromFullPaths(List<String> nativeLibs

return result;
}

private class ClassesDexIterator implements Iterator<ClassesDexDataEntry> {
private int currentClassesDex;
private int currentCustomClassesDex;

public ClassesDexIterator() {
currentClassesDex = 0;
currentCustomClassesDex = 0;
}

public boolean hasNext() {
return currentClassesDex < classesDexEntries.size() || currentCustomClassesDex < customClassesDexEntries.size();
}

public ClassesDexDataEntry next() {
ClassesDexDataEntry result = new ClassesDexDataEntry(0);

if (currentClassesDex < classesDexEntries.size()) {
for (ClassesDexDataEntry classesDex : classesDexEntries) {
int dexIndex = currentToDexIndex(currentClassesDex);
if (dexIndex == classesDex.index) {
result = classesDex;
currentClassesDex++;
break;
}
}
} else {
currentCustomClassesDex++;
result = customClassesDexEntries.get(0);
}

return result;
}

public void remove() {

}

private int currentToDexIndex(int current) {
/*
0 --> classes.dex
1 --> classes2.dex
2 --> classes3.dex
*/

if (current == 0) return 0;

return ++current;
}
}
}
Loading