16
16
17
17
package com .google .classyshark .silverghost .translator .apk ;
18
18
19
+ import com .google .classyshark .silverghost .TokensMapper ;
19
20
import com .google .classyshark .silverghost .contentreader .dex .DexlibLoader ;
20
21
import com .google .classyshark .silverghost .io .SherlockHash ;
21
- import com .google .classyshark .silverghost .TokensMapper ;
22
22
import com .google .classyshark .silverghost .translator .Translator ;
23
- import org .jf .dexlib2 .dexbacked .DexBackedDexFile ;
24
- import org .jf .dexlib2 .iface .DexFile ;
25
- import org .ow2 .asmdex .ApplicationReader ;
26
- import org .ow2 .asmdex .ApplicationVisitor ;
27
- import org .ow2 .asmdex .ClassVisitor ;
28
- import org .ow2 .asmdex .MethodVisitor ;
29
- import org .ow2 .asmdex .Opcodes ;
30
-
23
+ import com .google .classyshark .silverghost .translator .elf .ElfTranslator ;
31
24
import java .io .File ;
32
25
import java .io .FileInputStream ;
33
26
import java .io .InputStream ;
40
33
import java .util .TreeSet ;
41
34
import java .util .zip .ZipEntry ;
42
35
import java .util .zip .ZipInputStream ;
36
+ import nl .lxtreme .binutils .elf .Elf ;
37
+ import org .jf .dexlib2 .dexbacked .DexBackedDexFile ;
38
+ import org .jf .dexlib2 .iface .DexFile ;
39
+ import org .ow2 .asmdex .ApplicationReader ;
40
+ import org .ow2 .asmdex .ApplicationVisitor ;
41
+ import org .ow2 .asmdex .ClassVisitor ;
42
+ import org .ow2 .asmdex .MethodVisitor ;
43
+ import org .ow2 .asmdex .Opcodes ;
43
44
44
45
/**
45
46
* Translator for the .apk entry
@@ -91,6 +92,18 @@ public void apply() {
91
92
element = new ELEMENT (nativeLib , TAG .DOCUMENT );
92
93
elements .add (element );
93
94
}
95
+
96
+ element = new ELEMENT ("\n Native Dependencies\n " ,
97
+ TAG .DOCUMENT );
98
+
99
+ elements .add (element );
100
+
101
+ List <String > sortedNativeDependencies = new LinkedList <>(apkAnalysis .nativeDependencies );
102
+ Collections .sort (sortedNativeDependencies );
103
+ for (String nativeLib : sortedNativeDependencies ) {
104
+ element = new ELEMENT (nativeLib + "\n " , TAG .DOCUMENT );
105
+ elements .add (element );
106
+ }
94
107
}
95
108
96
109
@ Override
@@ -132,7 +145,7 @@ public String toString() {
132
145
}
133
146
}
134
147
135
- public static DexData fillAnalysis (int dexIndex , File file ) {
148
+ public static DexData fillAnalysis (int dexIndex , File file ) {
136
149
DexData dexData = new DexData (dexIndex );
137
150
138
151
try {
@@ -156,6 +169,7 @@ public String toString() {
156
169
private static class ApkAnalysis {
157
170
public List <String > nativeLibs = new ArrayList <>();
158
171
public TreeSet <DexData > dexes = new TreeSet <>();
172
+ public TreeSet <String > nativeDependencies = new TreeSet <>();
159
173
160
174
public String toString () {
161
175
return dexes + "\n \n "
@@ -192,6 +206,15 @@ private static ApkAnalysis doInspect(File binaryArchiveFile) {
192
206
dexIndex ++;
193
207
} else {
194
208
if (zipEntry .getName ().startsWith ("lib" )) {
209
+
210
+ File nativeLib = ElfTranslator .extractElf (zipEntry .getName (), binaryArchiveFile );
211
+
212
+ Elf dependenciesReader = new Elf (nativeLib );
213
+ List <String > libraryDependencies = dependenciesReader .getSharedDependencies ();
214
+ for (String dependency : libraryDependencies ) {
215
+ result .nativeDependencies .add (dependency );
216
+ }
217
+
195
218
result .nativeLibs .add (zipEntry .getName () + "\n " );
196
219
}
197
220
}
0 commit comments