• Android-如何防止apk被反编译


    一、对抗反编译

      对抗反编译是指apk文件无法通过反编译工具(如apktool,baksmali,dex2jar)对其进行反编译,或者反编译后无法得到软件正确的反汇编代码。常用的做法有两种:

    • 阅读反编译工具源码

      这种办法需要分析人员具较强的代码阅读与理解能力,因此,这种方法具体实施起来困难。

    • 压力测试

      比起阅读反汇编工具的源码,这种方法思路就简单多,而且实施起来较容易。通常的做法是:收集大量的apk文件(几百个吧)存放进一个目录,编写脚本或程序调用反编译工具对目录下的所有apk文件进行反编译。不同的软件从大小、内容到结构组织都不尽相同,反编译工具在处理它们时有可能会出现异常。这种方法的思路是,通过查看反编译工具(如dex2jar)执行工作查看其log,分析得出能另其执行出现的指令,从而我们在编写软件时让代码生成该指令。

     二、对抗静态分析

      不要指望反编译工具永运无法编译你的软件,现在新版本的反编译工具(如dex2jar)已经很好的进行工作,很少会有处理不了的指令了。因为,我们需要想其它办法防止软件被人破解。

    • 代码混淆技术

      这个现在的主要的做法是ProGuard。

    三、对抗动态调试

      如果认为自已编写的代码已经足够对付别人静态分析了,可以考虑在代码中另入动态调试检测,让破解者无从对自已的软件下手。

    • 检测调试器

      动态调试使用调试器来挂钩软件,获取软件运行时的数据,我们可以在软件中加入检测调试器的代码,当检测到软件被调试器连接时,中止软件的运行。参考

    • 检测模拟器

      软件发布后会安装到用户手机中运行,如果发现软件运行在模拟器中,很显然不合常理,可能是有人试图破解或分析它,这种情况我们要予以阻止。

      参考, 参考

    四、防止重编译

      确解者可能注入代码来分析我们的软件,也可能修改软件逻辑直接确解,不管怎样修改,软件本身的一些特性已经改变了。

    • 检查签名

      每一个app在发布时都需要开发人员对其进行签名,而签名使用的密钥文件是开发人员所独有的,确解者通常不可能拥有相同的密钥文件(密钥文件被盗除外),因此,签名成了android软件一种有效的身份标识,如果软件运行时的签名与自已发布时的不同,说明软件被篡改过,这个时间我们就可以让软件中止运行。

    • 校验保护

      重编译android软件的实质是重新编译classes.dex文件,代码经过重新编译后,生成的classes.dex文件的Hash值已经改变。我们可以检查程序安装后classed.dex文件的Hash值,来判断软件是否被重打包过。

      以上两种处理办法的参考

  • 相关阅读:
    洛谷[ZJOI2008]骑士(基环树二次DP法+树形DP)
    洛谷P5022 旅行(基环树+断环法)
    AtCoder Beginner Contest 174 ——D.Alter Altar(思维)
    洛谷P1972 [SDOI2009]HH的项链(离线+树状数组)
    CF1365D Solve The Maze (BFS)
    codeforces1426——F. Number of Subsequences(DP)
    codeforces1324——E.Sleeping Schedule(DP+初始化)
    codeforces319——B. Psychos in a Line(思维+单调栈)
    codeforces292——D. Connected Components(并查集+前缀和优化)
    codeforces1013——D. Chemical table(思维+转化+并查集)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/10426512.html
Copyright © 2020-2023  润新知