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

Commit cc819bc

Browse files
committed
added another scenario for custom dex loading
1 parent 73b5285 commit cc819bc

File tree

3 files changed

+29
-85
lines changed

3 files changed

+29
-85
lines changed

ClassySharkWS/src/com/google/classyshark/silverghost/translator/apk/ApkTranslator.java

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.google.classyshark.silverghost.translator.apk.dashboard.ClassesDexDataEntry;
2323
import java.io.File;
2424
import java.util.ArrayList;
25-
import java.util.Iterator;
2625
import java.util.LinkedList;
2726
import java.util.List;
2827

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

61-
62-
Iterator<ClassesDexDataEntry> dexesIter = apkDashboard.iterator();
63-
64-
while (dexesIter.hasNext()) {
65-
66-
ClassesDexDataEntry dexEntry = dexesIter.next();
60+
for (ClassesDexDataEntry dexEntry : apkDashboard.getAllDexEntries()) {
6761

6862
element = new ELEMENT("\n" + dexEntry.getName(), TAG.MODIFIER);
6963
elements.add(element);
@@ -113,25 +107,6 @@ public void apply() {
113107
+ "\n", TAG.DOCUMENT);
114108
elements.add(element);
115109
}
116-
117-
dexesIter = apkDashboard.iterator();
118-
119-
while (dexesIter.hasNext()) {
120-
121-
ClassesDexDataEntry dexEntry = dexesIter.next();
122-
123-
element = new ELEMENT("\n" + dexEntry.getName(), TAG.MODIFIER);
124-
elements.add(element);
125-
126-
element = new ELEMENT(
127-
"\nSyntheticAccessors \n", TAG.MODIFIER);
128-
elements.add(element);
129-
130-
element = new ELEMENT(
131-
"\n" + dexEntry.syntheticAccessors.toString()
132-
+ "\n", TAG.DOCUMENT);
133-
elements.add(element);
134-
}
135110
}
136111

137112
@Override

ClassySharkWS/src/com/google/classyshark/silverghost/translator/apk/dashboard/ApkDashboard.java

Lines changed: 13 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.io.InputStream;
2424
import java.util.ArrayList;
2525
import java.util.Collections;
26-
import java.util.Iterator;
2726
import java.util.LinkedHashSet;
2827
import java.util.LinkedList;
2928
import java.util.List;
@@ -34,7 +33,7 @@
3433
import org.ow2.asmdex.ApplicationVisitor;
3534
import org.ow2.asmdex.Opcodes;
3635

37-
public class ApkDashboard implements Iterable<ClassesDexDataEntry> {
36+
public class ApkDashboard {
3837

3938
public ArrayList<ClassesDexDataEntry> classesDexEntries = new ArrayList<>();
4039
public ArrayList<ClassesDexDataEntry> customClassesDexEntries = new ArrayList<>();
@@ -51,10 +50,16 @@ public ApkDashboard(File apkFile) {
5150
public void inspect() {
5251
// TODO add exception for not calling inspect
5352
MultidexReader.fillApkDashboard(apkFile, this);
53+
54+
System.out.println("Done inspecting");
5455
}
5556

56-
public Iterator<ClassesDexDataEntry> iterator() {
57-
return new ClassesDexIterator();
57+
public List<ClassesDexDataEntry> getAllDexEntries() {
58+
ArrayList<ClassesDexDataEntry> result = new ArrayList<>();
59+
result.addAll(classesDexEntries);
60+
result.addAll(customClassesDexEntries);
61+
62+
return result;
5863
}
5964

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

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

143-
dexData.syntheticAccessors =
144-
new SyntheticAccessorsInspector(dxFile).getSyntheticAccessors();
149+
//dexData.syntheticAccessors =
150+
// new SyntheticAccessorsInspector(dxFile).getSyntheticAccessors();
145151

146152
} catch (Exception e) {
147153
e.printStackTrace();
154+
System.out.println("here " + e);
148155
}
149156

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

168175
return result;
169176
}
170-
171-
private class ClassesDexIterator implements Iterator<ClassesDexDataEntry> {
172-
private int currentClassesDex;
173-
private int currentCustomClassesDex;
174-
175-
public ClassesDexIterator() {
176-
currentClassesDex = 0;
177-
currentCustomClassesDex = 0;
178-
}
179-
180-
public boolean hasNext() {
181-
return currentClassesDex < classesDexEntries.size() || currentCustomClassesDex < customClassesDexEntries.size();
182-
}
183-
184-
public ClassesDexDataEntry next() {
185-
ClassesDexDataEntry result = new ClassesDexDataEntry(0);
186-
187-
if (currentClassesDex < classesDexEntries.size()) {
188-
for (ClassesDexDataEntry classesDex : classesDexEntries) {
189-
int dexIndex = currentToDexIndex(currentClassesDex);
190-
if (dexIndex == classesDex.index) {
191-
result = classesDex;
192-
currentClassesDex++;
193-
break;
194-
}
195-
}
196-
} else {
197-
currentCustomClassesDex++;
198-
result = customClassesDexEntries.get(0);
199-
}
200-
201-
return result;
202-
}
203-
204-
public void remove() {
205-
206-
}
207-
208-
private int currentToDexIndex(int current) {
209-
/*
210-
0 --> classes.dex
211-
1 --> classes2.dex
212-
2 --> classes3.dex
213-
*/
214-
215-
if (current == 0) return 0;
216-
217-
return ++current;
218-
}
219-
}
220177
}

ClassySharkWS/src/com/google/classyshark/silverghost/translator/java/dex/MultidexReader.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ public static void fillApkDashboard(File binaryArchiveFile, ApkDashboard to) {
4545

4646
ZipEntry zipEntry;
4747

48+
49+
int customDexIndex = 0;
50+
4851
while (true) {
4952
zipEntry = zipFile.getNextEntry();
5053

@@ -54,12 +57,14 @@ public static void fillApkDashboard(File binaryArchiveFile, ApkDashboard to) {
5457

5558
if (zipEntry.getName().endsWith(".dex")) {
5659

57-
String fName = "ANALYZER_classes";
60+
customDexIndex++;
61+
62+
String fName = customDexIndex + "ANALYZER_classes";
5863

5964
int dexIndex = Character.getNumericValue(zipEntry.getName().charAt(zipEntry.getName().length() - 5));
6065

6166
if (dexIndex != 28 /* classes.dex*/) {
62-
fName = "ANALYZER_classes" + dexIndex;
67+
fName = fName + dexIndex;
6368
} else {
6469

6570
dexIndex = 0;
@@ -70,7 +75,13 @@ public static void fillApkDashboard(File binaryArchiveFile, ApkDashboard to) {
7075
File file = SherlockHash.INSTANCE.getFileFromZipStream(binaryArchiveFile,
7176
zipFile, fName, ext);
7277

73-
to.classesDexEntries.add(fillAnalysisPerClassesDexIndex(dexIndex, file));
78+
79+
if(zipEntry.getName().equals("classes.dex") || (zipEntry.getName().startsWith("classes") &&
80+
zipEntry.getName().endsWith(".dex"))) {
81+
to.classesDexEntries.add(fillAnalysisPerClassesDexIndex(dexIndex, file));
82+
} else {
83+
to.customClassesDexEntries.add(fillAnalysisPerClassesDexIndex(999, file));
84+
}
7485

7586
} else if (zipEntry.getName().endsWith("jar") || zipEntry.getName().endsWith("zip")) {
7687

@@ -121,6 +132,7 @@ public static void fillApkDashboard(File binaryArchiveFile, ApkDashboard to) {
121132
to.nativeLibs.add(zipEntry.getName() + "\n");
122133
}
123134
}
135+
124136
zipFile.close();
125137

126138
} catch (Exception e) {

0 commit comments

Comments
 (0)