是否有可能通过 NDK 编译和链接到 Android 平台的本地代码进行解码?
从 apk 文件中重构项目并导入到 Eclipse(或其他 IDE)是否可行?
如果 Java 本地方法声明适当,是否可以再次使用 apk 文件中的 .so
文件重建项目或与另一个项目一起使用?
是否有可能通过 NDK 编译和链接到 Android 平台的本地代码进行解码?
从 apk 文件中重构项目并导入到 Eclipse(或其他 IDE)是否可行?
如果 Java 本地方法声明适当,是否可以再次使用 apk 文件中的 .so
文件重建项目或与另一个项目一起使用?
将本地代码反编译为源代码是可能的(我没有尝试过),有一些类似于https://www.hex-rays.com/products/decompiler/的工具可以使用。
从apk中重构项目是可能的,但代码会被混淆(类和方法名很奇怪)。您可以使用apk2gold (https://github.com/lxdvs/apk2gold)来检查您的应用程序。
至于您的最后一个问题,只要稍加努力,就可以做到。
能否解码编译的本地代码?
不行。
从apk文件中是否可以重构项目?
可以,很多内容都可以。提取.class文件很容易,反编译也大多数情况下可行。在构建过程中加入混淆步骤会使这一过程更加困难。
然而,常量值和初始化器非常容易从已编译的类中获得。不要尝试像private static String SECRET = "sesame123";
这样的操作。这种方法并不难以逆向工程。同样地,对于.so文件也是如此。
是否可以再次使用apk文件中的.so文件来重构项目?
不行。
这取决于你对“项目”的理解。你的本地库的函数和签名可能很容易从相应的(已编译的)Java类中恢复。源代码在编译为本地代码后基本上是“丢失”了。但是,如果有人知道如何使用你的共享库(很容易找到,见上文),他将能够在任何他喜欢的应用程序中使用它。
总之:
a)编译后的本机代码无法从源代码重构。
b)Java源代码更容易从编译的.class
文件中重构; 代码混淆可以使其更难。
c)攻击者可能编写的任何应用程序都可以轻松地提取和利用您的应用程序具有的任何本地或非本地功能。
另请参阅:http://en.wikipedia.org/wiki/Security_through_obscurity
是否有可能通过ndk解码编译并链接到Android的本地代码?
可以反汇编;有C/C++反编译器,但对于非常复杂的代码几乎没有用处。
从apk文件中重构项目并导入eclipse(或任何其他IDE)是否可行?
可以将.apk文件反汇编(baksmali),修复其中的某些问题,并再次汇编(smali)。可以将一些函数调用替换为其他函数调用,也可以添加新类。
反编译为Java也是可能的,但代码可能无法编译,因此更多是关于分析而不是修改。
混淆的代码仍然可读,前提是他们要在分析方面投入一些努力。
您可以混淆代码,但他们将看到图标,找到资源ID,并找到onClick()按钮处理程序。
他们使用已有的.so文件应该不会有问题,除非有人要求他们修复那个.so文件中的错误。同样的,他们可以从你的.apk文件中制作一个.jar文件,并将该.jar文件作为库与另一个项目一起使用。如果Java本地函数声明得当,是否可以再次使用apk文件中的.so文件重构项目或与另一个项目一起使用?
com.package.hjh.Gjkjsfdl.jdsfgshhdfghj(String, String)
(普通人从不会使用这样的函数名),你可以报告其滥用。最简单的方法是在应用程序初始化时使用特定的日志消息。 - 18446744073709551615.so
文件可能会在任何项目中使用。 - user3788055