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应用程序如何混淆代码,首先我们先来看一下混淆前后反编译的结果对比。
图1 原始代码
图2 混淆前反编译
图3 混淆后反编译
我们可以看到,类名、方法名和变量名等都会被改掉,方法的含义无法直接看出来,但如果是字符串常量还是会被反编译出来的,所以说关键的key不能放到apk中,它无处遁形。
下面我们来介绍如何使用混淆工具。Android2.3中提供了混淆的功能,跟我们这里介绍的使用的都是proguard混淆器。
我们介绍的这一个方法,除了混淆之外,还包括程序的签名,安装等功能。它是基于ant编译的,功能更强大。你也可以在整个编译过程插入其他你想要的功能,例如单元测试。
使用方法:
首先要在你的工程中增加一个配置文件,用来配置环境变量和签名文件,例如build.cfg,在这个文件中需要指定哪些类不需要被混淆。在Android中,所有在配置文件中会使用到类名的类,不应该被混淆。否则程序执行过程中会出现ClassNotFoundException。
再创建一个build.xml,用于指定ant编译的过程。最后执行build.xml,就完成了代码的混淆、打包、签名整个过程。你可以用反编译工具检测一下是否混淆成功。
图4 执行build.xml的方法
请参考工程示例来操作,配置文件中需要修改的地方都已标出,请搜索“这里要修改”关键字,所有查找到的地方都要检查一下,按照自己的环境配置修改。
以上几种方法结合使用,效果倍增。破解你程序的人会说,想不到狮吼功还有一招大喇叭……
如果你的公司真的需要这么保密,那么,首先要看你的公司是否有严密成熟的信息安全制度,否则一切都徒劳,因为家贼难防,堡垒最容易从内部攻破。
源代码已共享,地址:http://u.115.com/file/bhnchwu6
答疑在中。
附:混淆使用的是免费的proguard组件,官网:http://proguard.sourceforge.net/
隋雨辰
2011-05-15
分享到:
相关推荐
从文献中的介绍我们可以看出,对于Android系统代码安全性的分析,目前主要面临两大挑战。首先,厂商通常会在发布之前对代码进行混淆处理,而无法直接获得系统的源代码。其次,即使能够获取到源代码,由于Android系统...
Frida 协议是一种非常强大的工具,能够帮助开发人员深入了解 Android 应用安全实战中的 Frida 协议分析,检测和修复安全漏洞,提高 Android 应用的安全性。因此,Frida 协议在 Android 应用安全领域中的应用前景非常...
《Android软件安全与逆向分析》是一本深入探讨...通过《Android软件安全与逆向分析》的学习,开发者和安全研究人员可以深入了解Android应用的安全防护,提高应用的安全性,同时也能更好地应对和防范潜在的安全威胁。
总的来说,Android代码混淆是提高应用安全性的有效手段,但需要合理配置和测试。开发者需要了解混淆的基本原理和操作,以便在保护代码的同时,确保应用的正常运行。通过不断学习和实践,我们可以更好地掌握这一技术...
4. **解决兼容性问题**:研究不同版本之间的差异,提高应用的兼容性。 5. **安全研究**:深入理解权限管理、数据加密等安全机制,保障应用安全。 总结来说,"android-15源代码"是开发者探索Android系统奥秘的宝库...
《Android系统安全与反编译实战》是一本深入探讨Android平台安全性和逆向工程实践的书籍,其源代码提供了丰富的实例和实验素材,帮助读者更好地理解和应用相关技术。在这个压缩包中,"daima"可能代表了书中提到的...
6. **权限管理**:Android的安全模型是基于权限的,源代码解释了如何定义、请求和管理权限,这对开发涉及敏感数据或系统功能的应用至关重要。 7. **编译与构建系统**:AOSP(Android Open Source Project)使用...
因此,本文将对 Android 应用的安全性进行深入研究,分析现有问题,探讨应对策略,以期提高 Android 应用的安全水平和用户的数字生活品质。 一、 Android 应用面临的安全问题 Android 应用面临的安全问题主要包括...
在实际开发中,良好的注释习惯可以提高代码的可读性和可维护性。 总之,通过深入分析“android 手机安全卫士工程源代码”,开发者不仅能掌握手机安全卫士的基本架构,还能提升对Android系统底层机制的理解,为今后...
Android Studio是一款广泛使用的Android应用程序开发集成环境,而代码混淆是其中的一个重要环节,尤其是在发布应用时,为了提高代码的安全性和减少体积,通常会使用到Proguard工具。AndroidProguard插件则是为...
开源中国2.0的Android代码库为开发者提供了一个宝贵的学习资源,它揭示了构建高效、稳定且用户友好的移动应用的幕后技术。这个开源项目旨在促进Android开发的实践与分享,帮助开发者提升技能,理解现代Android应用的...
15. **安全性**:保护用户数据,防止SQL注入和XSS攻击,使用SSL/TLS加密网络通信,理解Android安全框架。 以上知识点构成了《Android开发艺术代码》的主要内容,通过深入学习和实践,开发者可以提升自己的专业技能...
【WiFi小车Android代码】项目涉及的技术点涵盖了嵌入式硬件、无线通信协议、移动应用开发等多个领域。在这个项目中,我们主要关注的是通过WiFi网络实现对STM32微控制器控制的智能小车进行远程操控,以及在Android ...
网络数据传输的安全性同样是Android软件安全审计关注的焦点。2012年2月UCWEB浏览器出现的明文密码网络传输漏洞就是一个警示。在登录SSL站点时,如果“云端加速”功能开启,未加密的用户请求可能会被转发到代理服务器...
虽然大部分内核代码不在平台_frameworks_base中,但理解Linux内核如何与上层交互,对于优化设备驱动、提升系统稳定性和安全性至关重要。比如,熟悉电源管理、I/O调度策略等,可以帮助开发者更好地理解和优化硬件资源...
通过对Android 4.0源代码的深入研究,开发者不仅能提高编程技能,还能了解到Android系统的设计理念,从而更好地适应和利用这个平台。尽管Android系统已经发展到了更高版本,但对4.0源代码的学习仍然具有重要的历史...
他们可以通过这个工具来检测潜在的信息泄漏问题,提高应用的安全性。在实际使用中,用户需要将待分析的APK文件输入到工具中,然后运行分析,工具会报告可能存在的信息泄漏路径。通过修复这些路径,开发者可以增强...
Android 恶意代码的逆向分析方法是一个非常重要的研究方向,可以帮助我们更好地检测和防御恶意代码,提高 Android 系统的安全性。 Android 恶意代码的逆向分析方法有很多应用前景,例如: 1. 检测恶意代码:该...
通过源代码,我们可以学习这些库的工作原理,如何进行高效的数据库操作,如何构建3D图形,以及如何确保数据传输的安全性。 五、运行时环境 Dalvik和ART是Android的两种运行时环境。Dalvik是早期版本的虚拟机,而...