`
suiyuchen
  • 浏览: 30505 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

如何提高Android代码的安全性

阅读更多

Android免费培训(118949422)第二期专题培训

(转载请注明出处,商用请与本人联系)

1. 首先我们思考一个问题,Android中哪些部分需要提高安全性防止被破解,哪些部分无法保证安全?

a) 首先,如果你的应用跟其他人竞争的是创意、用户体验、服务等等偏软的东西,同时是免费的,并没有什么技术难点,要评估一下是否确实需要提高代码的安全性。

b) 对于图片、xml文件或者apk文件本身是无法加密的。因为这些文件是由Andriod虚拟机加载和读取,加密后Android虚拟机无法识别,你的应用也无法正常使用了。如果有需要保密的内容,不要放到这些文件里。

c) 有很多Android应用需要与服务端做数据通信,如果传输的数据做了加密,那么客户端加密或解密可能会使用到密钥,这个密钥最好是动态的。

d) 关键的业务逻辑、算法和涉及到金融交易的部分,需要极高的安全性,必须多种加密方法并用。

2. 防止代码被反编译的几种方法:

a) 尽量减少客户端代码中的敏感内容,例如加密算法的key

要想完全不被破解是不可能的,微软苹果这样的公司,一样会被破解越狱。我们只能想办法提高被反编译的难度,提高被破解的门槛。

首先让敏感的内容尽量在服务端,而不是放到客户端,密钥用动态的。不要自己给自己埋下祸根,尽量不要留下会被破解的可能性。墨菲定律说,一件坏事如果可能发生,那么它一定会发生。

b) 自定义类加载器(Custom ClassLoader)

通过自定义类加载器,可以加载加密过的.class文件,在加载时使用自定义的类加载器解密的方式提高代码的安全性。

这种方式在有机会使用自己的类加载器的场景下可以使用,例如C/S架构的程序,客户端是Java编写的(Swing或SWT),这种程序在大公司和国外较常见,国内小公司很少会用Java来写客户端。

对于Android程序,对于继承Android的Activity、Service等基类的子类,无法使用类加载器,如果要使用,那么需要把关键的代码抽离出来,独立成一个与Android框架无关的类,这样可以使用自定义的类加载器来加载。

但这里仍然有隐患,因为这个自定义的类加载器也是java编写的,也会被反编译。只不过这样处理后又增加了一道屏障,提高了被破解的难度。

c) 使用JNI

用C或C++编写的代码相对于Java来说更难被反编译。但这种方法除非真的有必要,否则不提倡使用。

因为本地代码很难调试,如果执行异常会导致整个虚拟机异常关闭。同时.so会被加载到虚拟机的内存中,无论是否使用都占用内存空间。

另外,很多搞Java的人不太熟悉C或C++、如果你的公司有人熟悉还好。

d) 混淆

混淆是在不改变代码逻辑的情况下,增加无用代码,或者重命名类名、方法名和变量名,使反编译后的源代码难于看懂,提高被破解的难度。

本专题重点讲解在Android应用程序如何混淆代码,首先我们先来看一下混淆前后反编译的结果对比。

image

图1 原始代码

image

图2 混淆前反编译

image

图3 混淆后反编译

我们可以看到,类名、方法名和变量名等都会被改掉,方法的含义无法直接看出来,但如果是字符串常量还是会被反编译出来的,所以说关键的key不能放到apk中,它无处遁形。

下面我们来介绍如何使用混淆工具。Android2.3中提供了混淆的功能,跟我们这里介绍的使用的都是proguard混淆器。

我们介绍的这一个方法,除了混淆之外,还包括程序的签名,安装等功能。它是基于ant编译的,功能更强大。你也可以在整个编译过程插入其他你想要的功能,例如单元测试。

使用方法:

首先要在你的工程中增加一个配置文件,用来配置环境变量和签名文件,例如build.cfg,在这个文件中需要指定哪些类不需要被混淆。在Android中,所有在配置文件中会使用到类名的类,不应该被混淆。否则程序执行过程中会出现ClassNotFoundException。

再创建一个build.xml,用于指定ant编译的过程。最后执行build.xml,就完成了代码的混淆、打包、签名整个过程。你可以用反编译工具检测一下是否混淆成功。

image

图4 执行build.xml的方法

请参考工程示例来操作,配置文件中需要修改的地方都已标出,请搜索“这里要修改”关键字,所有查找到的地方都要检查一下,按照自己的环境配置修改。

以上几种方法结合使用,效果倍增。破解你程序的人会说,想不到狮吼功还有一招大喇叭……

如果你的公司真的需要这么保密,那么,首先要看你的公司是否有严密成熟的信息安全制度,否则一切都徒劳,因为家贼难防,堡垒最容易从内部攻破。

源代码已共享,地址:http://u.115.com/file/bhnchwu6

答疑在中。

附:混淆使用的是免费的proguard组件,官网:http://proguard.sourceforge.net/

隋雨辰

2011-05-15

分享到:
评论

相关推荐

    面向Android安全性的Smali混淆代码分析.pdf

    从文献中的介绍我们可以看出,对于Android系统代码安全性的分析,目前主要面临两大挑战。首先,厂商通常会在发布之前对代码进行混淆处理,而无法直接获得系统的源代码。其次,即使能够获取到源代码,由于Android系统...

    Android应用安全实战:Frida协议分析.docx

    Frida 协议是一种非常强大的工具,能够帮助开发人员深入了解 Android 应用安全实战中的 Frida 协议分析,检测和修复安全漏洞,提高 Android 应用的安全性。因此,Frida 协议在 Android 应用安全领域中的应用前景非常...

    Android软件安全与逆向分析_带书签_Android软件安全与逆向分析_带书签_android_

    《Android软件安全与逆向分析》是一本深入探讨...通过《Android软件安全与逆向分析》的学习,开发者和安全研究人员可以深入了解Android应用的安全防护,提高应用的安全性,同时也能更好地应对和防范潜在的安全威胁。

    Android代码混淆前后分析

    总的来说,Android代码混淆是提高应用安全性的有效手段,但需要合理配置和测试。开发者需要了解混淆的基本原理和操作,以便在保护代码的同时,确保应用的正常运行。通过不断学习和实践,我们可以更好地掌握这一技术...

    android-15源代码

    4. **解决兼容性问题**:研究不同版本之间的差异,提高应用的兼容性。 5. **安全研究**:深入理解权限管理、数据加密等安全机制,保障应用安全。 总结来说,"android-15源代码"是开发者探索Android系统奥秘的宝库...

    Android系统安全和反编译实战_源代码

    《Android系统安全与反编译实战》是一本深入探讨Android平台安全性和逆向工程实践的书籍,其源代码提供了丰富的实例和实验素材,帮助读者更好地理解和应用相关技术。在这个压缩包中,"daima"可能代表了书中提到的...

    Android 源代码

    6. **权限管理**:Android的安全模型是基于权限的,源代码解释了如何定义、请求和管理权限,这对开发涉及敏感数据或系统功能的应用至关重要。 7. **编译与构建系统**:AOSP(Android Open Source Project)使用...

    Android应用的安全性研究.pptx

    因此,本文将对 Android 应用的安全性进行深入研究,分析现有问题,探讨应对策略,以期提高 Android 应用的安全水平和用户的数字生活品质。 一、 Android 应用面临的安全问题 Android 应用面临的安全问题主要包括...

    android 手机安全卫士工程源代码

    在实际开发中,良好的注释习惯可以提高代码的可读性和可维护性。 总之,通过深入分析“android 手机安全卫士工程源代码”,开发者不仅能掌握手机安全卫士的基本架构,还能提升对Android系统底层机制的理解,为今后...

    androidStudio代码混淆插件AndroidProguard

    Android Studio是一款广泛使用的Android应用程序开发集成环境,而代码混淆是其中的一个重要环节,尤其是在发布应用时,为了提高代码的安全性和减少体积,通常会使用到Proguard工具。AndroidProguard插件则是为...

    开源中国2.0android代码

    开源中国2.0的Android代码库为开发者提供了一个宝贵的学习资源,它揭示了构建高效、稳定且用户友好的移动应用的幕后技术。这个开源项目旨在促进Android开发的实践与分享,帮助开发者提升技能,理解现代Android应用的...

    android开发艺术代码

    15. **安全性**:保护用户数据,防止SQL注入和XSS攻击,使用SSL/TLS加密网络通信,理解Android安全框架。 以上知识点构成了《Android开发艺术代码》的主要内容,通过深入学习和实践,开发者可以提升自己的专业技能...

    WiFi小车Android代码

    【WiFi小车Android代码】项目涉及的技术点涵盖了嵌入式硬件、无线通信协议、移动应用开发等多个领域。在这个项目中,我们主要关注的是通过WiFi网络实现对STM32微控制器控制的智能小车进行远程操控,以及在Android ...

    浅谈Android软件安全自动化审计

    网络数据传输的安全性同样是Android软件安全审计关注的焦点。2012年2月UCWEB浏览器出现的明文密码网络传输漏洞就是一个警示。在登录SSL站点时,如果“云端加速”功能开启,未加密的用户请求可能会被转发到代理服务器...

    Android系统源代码

    虽然大部分内核代码不在平台_frameworks_base中,但理解Linux内核如何与上层交互,对于优化设备驱动、提升系统稳定性和安全性至关重要。比如,熟悉电源管理、I/O调度策略等,可以帮助开发者更好地理解和优化硬件资源...

    android4.0源代码

    通过对Android 4.0源代码的深入研究,开发者不仅能提高编程技能,还能了解到Android系统的设计理念,从而更好地适应和利用这个平台。尽管Android系统已经发展到了更高版本,但对4.0源代码的学习仍然具有重要的历史...

    Android代码-soot-infoflow-android

    他们可以通过这个工具来检测潜在的信息泄漏问题,提高应用的安全性。在实际使用中,用户需要将待分析的APK文件输入到工具中,然后运行分析,工具会报告可能存在的信息泄漏路径。通过修复这些路径,开发者可以增强...

    Android恶意代码的逆向分析.pdf

    Android 恶意代码的逆向分析方法是一个非常重要的研究方向,可以帮助我们更好地检测和防御恶意代码,提高 Android 系统的安全性。 Android 恶意代码的逆向分析方法有很多应用前景,例如: 1. 检测恶意代码:该...

    android源代码分析电子书

    通过源代码,我们可以学习这些库的工作原理,如何进行高效的数据库操作,如何构建3D图形,以及如何确保数据传输的安全性。 五、运行时环境 Dalvik和ART是Android的两种运行时环境。Dalvik是早期版本的虚拟机,而...

Global site tag (gtag.js) - Google Analytics