zoukankan      html  css  js  c++  java
  • Android代码混淆技术

    Android混淆是Android开发者经常使用的一种用于防止被反编译的常见手法。Android开发基于java语言的,很容易被别人反编译出来,一下就相当于裸奔了,特别是用于商业用途的时候,防止反编译是必要的措施。而Android混淆的确可以保证Android源代码的一定安全。

    Android混淆技术

    1.  

      Java类名、方法名混淆

      Dalvik字节码包含了大量的调试信息,如类名、方法名、字段名、参数名、变量名等,使用反编译工具可以还原这些信息。由于类名、方法名等通常都会遵循一定的命名规范,破解者很容易根据这些信息来猜测代码功能,阅读起来就跟查看源代码一样。从Android 2.3开始,Google在SDK中加入了一款叫ProGuard的Android混淆工具,ProGuard会删除这些调试信息,并用无意义的字符序列来替换类名、方法名等,使得使用反编译出来的代码难以阅读,提升逆向难度。使用ProGuard 对Android混淆过后,反编译出来的类名和方法名无法阅读,但是反编译出来的功能代码仍然是非常容易阅读的,和源代码差不多,破解者仍通过阅读功能代码来自行标记类名、方法名等,然后逆向破解。

    2.  

      Java代码混淆

      通过对功能代码流程进行乱序混淆,实际运行时乱序Android混淆后的代码流程却和原始代码流程是一样的,但反编译出来的代码流程静态阅读时与原始流程有很大差异,使破解者很难通过静态分析理解代码功能,从而保护Android混淆代码不被逆向分析。比如,原始的代码流程是1->2->3->4->5->6->7,经过乱序Android混淆后静态反汇编查看到的代码流程可能变成2->7->5->1->6->4->3,实际运行时代码流程仍然是1->2->3->4->5->6->7。

    3.  

      Dalvik字节码加密

      将dex文件中的部分或全部Dalvik字节码加密,Android混淆,每次需要执行时由专门的Native代码负责动态解密和回填,静态反编译出来的代码已经无法阅读甚至无法反编译,动态调试也难以逆向分析。目前有这一技术的有 爱 加 密。

    4.  

      Android apk加密

      Android混淆可以保证源代码的一定安全,但是并不全面。Android apk加密技术包括:DEX加壳保护,DEX指令动态加载保护和高级源码混淆保护。其中DEX加壳保护通过将DEX文件隐藏,并生成一个类似于虚像的壳文件,阻止黑客利用反编译工具获取App源码。另外,爱 加 密 独有的so库保护,使得C/C++ 层面的代码安全也得到防护。加上资源文件保护(图片、音频等文件的防查看和防修改)、xml 主配文件保护(对主配文件进行二次签名)、内存保护等措施,可以基本保证App的动态和静态安全。

  • 相关阅读:
    (九)springMvc 的 post 提交乱码
    Spring Boot + Spring Cloud 实现权限管理系统 (Spring Security 版本 )
    Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)
    Spring Boot + Spring Cloud 实现权限管理系统 权限控制(Shiro 注解)
    Spring Boot + Spring Cloud 实现权限管理系统 (系统服务监控)
    Spring Boot + Spring Cloud 实现权限管理系统(解决跨域问题)
    SpringBoot使用CORS解决跨域请求问题
    Vue笔记:生命周期和钩子函数
    Vue + Element UI 实现权限管理系统(动态加载菜单)
    Vue + Element UI 实现权限管理系统(第三方图标库)
  • 原文地址:https://www.cnblogs.com/8dull/p/5366071.html
Copyright © 2011-2022 走看看