1:使用jadx-gui逆向代码后会有部分代码出现空代码的问题。
1.1 例如逆向xunlei的apk时就会出现。位置如下:
Util.PrepareSecurefiles(context, zipFile);
该调用方法的方法体,逆向后变成如下代码格式
/* JADX DEBUG: Multi-variable search result rejected for r21v17, resolved type: java.nio.channels.FileChannel */
/* JADX WARN: Multi-variable type inference failed */
/* JADX WARNING: Code restructure failed: missing block: B:162:0x0518, code lost:
r0 = e;
*/
/* JADX WARNING: Code restructure failed: missing block: B:163:0x0519, code lost:
r5 = r28;
*/
/* JADX WARNING: Code restructure failed: missing block: B:366:0x0c64, code lost:
r0 = th;
*/
/* JADX WARNING: Code restructure failed: missing block: B:367:0x0c65, code lost:
r5 = r28;
*/
/* JADX WARNING: Code restructure failed: missing block: B:373:0x0c7e, code lost:
r0 = th;
*/
/* JADX WARNING: Code restructure failed: missing block: B:374:0x0c7f, code lost:
r5 = r28;
r6 = r3;
r1 = r7;
r3 = r9;
r22 = r10;
r20 = r12;
r21 = r13;
*/
/* JADX WARNING: Code restructure failed: missing block: B:379:0x0c96, code lost:
r0 = th;
*/
/* JADX WARNING: Code restructure failed: missing block: B:380:0x0c97, code lost:
r5 = r28;
r6 = r3;
r1 = r7;
r3 = r9;
r20 = r12;
r21 = r13;
r7 = r2;
r2 = r8;
*/
/* JADX WARNING: Code restructure failed: missing block: B:381:0x0ca3, code lost:
r0 = e;
*/
/* JADX WARNING: Code restructure failed: missing block: B:382:0x0ca4, code lost:
r5 = r28;
r6 = r3;
r1 = r7;
r3 = r9;
*/
/* JADX WARNING: Failed to process nested try/catch */
/* JADX WARNING: Removed duplicated region for block: B:366:0x0c64 A[ExcHandler: all (th java.lang.Throwable), PHI: r22 r23 r24 r25
PHI: (r22v10 java.nio.channels.FileLock) = (r22v11 java.nio.channels.FileLock), (r22v11 java.nio.channels.FileLock), (r22v20 java.nio.channels.FileLock) binds: [B:186:0x0577, B:187:?, B:150:0x03a8] A[DONT_GENERATE, DONT_INLINE]
PHI: (r23v3 java.lang.String) = (r23v4 java.lang.String), (r23v4 java.lang.String), (r23v10 java.lang.String) binds: [B:186:0x0577, B:187:?, B:150:0x03a8] A[DONT_GENERATE, DONT_INLINE]
PHI: (r24v3 java.lang.String) = (r24v4 java.lang.String), (r24v4 java.lang.String), (r24v14 java.lang.String) binds: [B:186:0x0577, B:187:?, B:150:0x03a8] A[DONT_GENERATE, DONT_INLINE]
PHI: (r25v3 java.lang.String) = (r25v4 java.lang.String), (r25v4 java.lang.String), (r25v13 java.lang.String) binds: [B:186:0x0577, B:187:?, B:150:0x03a8] A[DONT_GENERATE, DONT_INLINE], Splitter:B:150:0x03a8] */
/* JADX WARNING: Removed duplicated region for block: B:373:0x0c7e A[ExcHandler: all (th java.lang.Throwable), Splitter:B:10:0x009c] */
/* JADX WARNING: Removed duplicated region for block: B:381:0x0ca3 A[ExcHandler: Exception (e java.lang.Exception), Splitter:B:8:0x0098] */
/* JADX WARNING: Removed duplicated region for block: B:399:0x0cfe */
/* JADX WARNING: Removed duplicated region for block: B:404:0x0d5c */
/* JADX WARNING: Removed duplicated region for block: B:409:0x0dbc */
/* JADX WARNING: Removed duplicated region for block: B:418:0x0e21 A[SYNTHETIC, Splitter:B:418:0x0e21] */
/* JADX WARNING: Removed duplicated region for block: B:436:0x0e45 A[SYNTHETIC, Splitter:B:436:0x0e45] */
/* JADX WARNING: Removed duplicated region for block: B:464:0x0e78 A[SYNTHETIC, Splitter:B:464:0x0e78] */
/* JADX WARNING: Removed duplicated region for block: B:486:0x0ea5 A[SYNTHETIC, Splitter:B:486:0x0ea5] */
/* JADX WARNING: Removed duplicated region for block: B:497:0x0ecc */
/* JADX WARNING: Removed duplicated region for block: B:502:0x0f2a */
/* JADX WARNING: Removed duplicated region for block: B:507:0x0f8a */
/* JADX WARNING: Removed duplicated region for block: B:516:0x0fef A[SYNTHETIC, Splitter:B:516:0x0fef] */
/* JADX WARNING: Removed duplicated region for block: B:534:0x1013 A[SYNTHETIC, Splitter:B:534:0x1013] */
/* JADX WARNING: Removed duplicated region for block: B:562:0x1046 A[SYNTHETIC, Splitter:B:562:0x1046] */
/* JADX WARNING: Removed duplicated region for block: B:584:0x1073 A[SYNTHETIC, Splitter:B:584:0x1073] */
/* JADX WARNING: Removed duplicated region for block: B:617:? A[ORIG_RETURN, RETURN, SYNTHETIC] */
/* Code decompiled incorrectly, please refer to instructions dump. */
public static int PrepareSecurefiles(android.content.Context r27, java.util.zip.ZipFile r28) {
/*
// Method dump skipped, instructions count: 4226
*/
throw new UnsupportedOperationException("Method not decompiled: com.wrapper.proxyapplication.Util.PrepareSecurefiles(android.content.Context, java.util.zip.ZipFile):int");
}
1.2 解决方案
上述问题的形成原因是什么及解决方案是什么目前还没研究到。有经验的朋友可以分享下。
2:原来的apk包解压缩后AndroidManifest.xml是二进制的无法进行修改,使用AXMLPrinter2.jar恢复成可读的,并修改后,怎么样才能再恢复到apk里并保证可用?
答:
需要准备以下3个jar包:
1. AXMLEditor2.jar,对二进制文件AndroidManifest.xml进行修改。
2. AXMLPrinter2.jar,输出二进制文件AndroidManifest.xml里的内容。方便我们在用AXMLEditor2.jar修改AndroidManifest.xml后,查看其内容。
3. signapk.jar(签名文件:testkey.pk8,testkey.x509.pem),对apk重新签名打包
具体使用方式参考链接, AXMLEditor源码位置。