需要一些有关逆向工程和反编译的信息(android app - jdk)

时间:2017-03-16 21:00:10

标签: android reverse-engineering decompiler

我是Android的新手,我对软件工程知之甚少。我想知道应该做些什么来使应用程序更难反编译。我做了一些关于它的研究,我遇到了这个调试器JEB,看起来它可以监视应用程序运行时的一些东西。然而,我不知道使用它的优点,因为我没有得到JEB监控的Android应用程序的关键点。例如:

enter image description here

右侧显示局部变量。 x / xh对于int意味着什么?或者为字符串值" secretKey"是严重的字符串的价值?如果它是我的代码中的所有变量都有风险!!! ?? 我想也许其中一个尝试就是在代码中制作大量伪变量,以便不容易看到真实的变量。是否有意义?还有其他泄漏我应该试图阻止,例如关于这个JEB? proguard与此有什么关系吗?正如我所说的那样,我对软版本并不多,而且我也无法理解proguard实际上做了什么。

我见过的另一件事是https://ibotpeaches.github.io/Apktool。如何让这种工具更加混乱处理?

最后一个问题,我在java中编码并且没有想到我有机会开始本机编码但是为了将来;我见过人们说本地代码更安全。它本身呢?还是有更多的图书馆来保持更多安全?或者因为最终的apk结构?

抱歉,如果有些话看起来很愚蠢。提前谢谢

2 个答案:

答案 0 :(得分:0)

你不应该试图阻止逆向工程,因为这样做很大程度上是徒劳的。相反,您应该设计您的应用程序,以尽量减少逆向工程所带来的影响(即您不应该在应用程序中包含密钥或密码等秘密数据)。

人们愿意为应用程序进行逆向工程所付出的努力程度取决于它的重要性和受欢迎程度,而混淆会增加对应用程序进行逆向工程所需的工作量。但是,如果你的应用程序变得流行,没有多少混淆会阻止人们,而如果它在默默无闻中萎缩,没有人会费心去看它,即使你在Github上发布源代码。此外,在极少数情况下,添加混淆将使人们仅仅为了挑战而破解它。

除此之外,混淆可能会给你一种虚假的安全感。任何人都可以设计一个他们自己无法破解的系统,但如果你不是逆向工程的专家,你提出的措施不可能阻止那些人。最好假设您应用中的所有内容都是公共信息和相应的设计。

答案 1 :(得分:0)

您可以使用一些功能强大的混淆工具来保护您的代码,例如:Bg+Anti Decompile/Reverse Java 它有很多保护选项:

  • 隐藏字符串值(在java源代码中保留一些敏感信息时很有用,例如:“Hello world” - >ߤª)
  • 使用unicode字符进行模糊处理
  • 隐藏包名称
  • 添加假码以捕获反编译工具
  • 检查资源字符串(当有人尝试编辑您的APK资源时很有帮助)
  • ....