原文:http://www.apkbus.com/android-138130-1-1.html
由于Java字节码的抽象级别较高,因此Android的APK较容易被反编译,而国内对于网络产品保护不力。如果一款应用APK被破解,那么可能会被他 人植入广告或者病毒以供他人盈利或窃取用户信息;如果一款游戏APK被破解,那么这款游戏可能会从收费版变成免费版,游戏的支付系统也形同虚设。不管是哪 种情况,对于开发者来说,APK被破解绝对是一场噩梦,而自己手动设置各种加密不但耗时耗力,而且不一定能收到很好的效果。本文介绍几种常用的方法,用于 保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。
1.隔离Java程序
最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通 过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。
2.对Class文件进行加密
为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之 前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。
在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的 ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定 义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的 类也很容易被解密。
3.转换成本地代码
将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块 转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。当然,在使用这种技术保护Java程序的同时,也牺牲了 Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必 要的。为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没 有被黑客更改。如果签名检查通过,则调用相关JNI方法。
4.代码混淆
代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的 代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在 研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介 绍混淆技术,因为混淆是一种保护Java程序的重要技术。
5.在线加密
APK Protect(http://www.apkprotect.com/)是一个在线对APK程序进行加密的网站,可以支持Java和C+ +语言的保护,能达到反调试、反编译的效果,操作过程简单易用:仅需上传你的APK,选择加密项目,等待服务器加密(通常一两个小时左右)后即可下载加壳 的APK,然后再签名上传到应用市场即可。经测试,通过APK Protect加密的APK变得非常难以破解,从而保护了APK。
相关推荐
【安卓项目】期末大作业——“记账宝”APP程序代码 这个项目是针对安卓平台开发的一款名为“记账宝”的应用程序,旨在帮助用户轻松管理个人财务,跟踪每日消费,实现理财目标。作为期末大作业,它展示了学生在安卓...
本项目"android应用开发app设计小游戏——华容道"就是这样一个实例,它旨在让开发者对手机移动开发有初步的理解,并通过实现中国古老的游戏——华容道,锻炼其编程能力。 华容道游戏是一款策略性的棋盘游戏,源自...
### APK权限大选———Android开发必懂知识 在当今高度数字化的社会中,智能手机已成为我们生活中不可或缺的一部分。而Android作为全球最受欢迎的移动操作系统之一,其应用程序(APK)的权限管理变得尤为重要。本文...
《安卓Android源码——安卓应用市场app商店源码》是一个针对安卓平台的开源项目,它提供了构建一个类似于Google Play的应用商店所需的核心功能和界面。这个源码对于学习Android开发、理解应用市场的运作机制以及定制...
这篇文档将深入解析《安卓Android源码——安卓应用市场app商店源码 (2).zip》提供的内容,重点关注安卓应用市场的实现原理以及源码结构。这个压缩包包含了一系列的图片资源和一个名为“应用商店.rar”的子压缩包,...
Android应用程序,安装在手机后,轻松获取imsi号码,方便开发和测试人员使用。
这个压缩包文件“安卓Android源码——安卓应用游戏卸载器项目 (2).zip”包含了一个专门用于卸载安卓设备上应用和游戏的项目源码。这个项目可能是一个实用工具,帮助用户方便快捷地管理他们的手机或平板电脑上的应用...
总结来说,"安卓简易APP——生活百科"项目涵盖了安卓应用开发的多个核心领域,包括但不限于编程语言、UI设计、网络编程、数据存储和人工智能技术。通过这个项目,开发者展示了在安卓平台上构建综合性应用的能力。
3. **产品或服务**:众户网提供的具体产品——APK安装包(众户网.apk),可能是一个功能丰富的移动应用,为用户提供特定的服务,如社交、购物、生活服务等。 4. **运营策略**:如何吸引并留住用户,以及如何与合作...
【Android课程设计——安卓旅行日志APP】 在本次Android课程设计中,我们将专注于构建一个功能丰富的安卓旅行日志应用程序。这个应用将为用户提供记录、管理和分享他们的旅行经历的平台,充分展示Android开发技术的...
通过这个项目,学生可以深入学习Android应用开发技术,同时为社会提供实用的信息服务。 【描述】这个大学生安卓开发大作业主要目标是创建一个能够实时查询全球或特定地区肺炎疫情状况的应用程序。用户可以通过这个...
这个压缩包"安卓Android源码——从安卓手机ROM包提取APK工具.zip"显然提供了帮助开发者从ROM包中提取APK应用的工具,这对于定制ROM、系统优化或者逆向工程等任务非常有用。下面我们将详细探讨这一主题。 首先,我们...
通过分析游戏截图,教师可能引导学生理解用户交互设计原则,以及图像处理和渲染技术在实际应用中的作用。此外,它也可能激发学生对游戏开发的兴趣,鼓励他们探索编程和艺术创作的结合。 "剑灵apk下载地址.txt"可能...
在Android应用程序开发中,实现“自动检测更新”的功能是一项重要的技术实践,它能确保用户始终使用的是最新版本的软件,从而提高用户体验并保障应用的安全性。以下是对这一主题的详细阐述: 首先,我们要理解自动...
这个项目提供了App多开的功能,通过创建虚拟空间,可以安装、启动、卸载APK,为用户提供了一种灵活且可定制的多应用实例体验。 VirtualApp项目的核心是其Android虚拟引擎,该引擎在技术上实现了一个轻量级的沙盒...
为了保护应用不被非法篡改或破解,开发者常常采用加壳技术对应用进行保护。本文主要探讨Android APP加壳技术的分类以及VMP(Virtual Machine Protection)的基本原理。 ### 加壳技术的分类 加壳技术主要可以分为...
《安卓Android源码——酒店在线预定app项目全套》 这个压缩包文件包含了开发一个完整的酒店在线预定应用程序所需的所有源代码和相关资源。Android操作系统作为全球最受欢迎的移动平台之一,为开发者提供了丰富的API...
更支持对您手机的应用APP设定应用锁,对时间锁定,防沉迷,进行使用时间限制,控制手机时间,并每日对您使用的应用时间排行统计,帮助您远离手机诱惑更好的自律,更好的管理时间,对时间规划,提升个人效率,完成您...
【Android课程设计——背单词软件】是一个典型的移动应用开发项目,展示了如何利用Android Studio这一强大的集成开发环境(IDE)来创建一个实用的教育类应用程序。这个项目的核心目标是帮助用户学习和记忆单词,可能...