怎样防止Android app二次打包?

事实证明,安卓系统的开放性、免费性等,深的开发者和用户的青睐,随着其在市场中不断地普及,人们也慢慢的习惯了安卓应用这种免费的午餐,但却忽视在其免费性的背后隐藏着巨大的安全隐患,最典型常见的就是Android APP二次打包”。这里,所谓的二次打包则是盗版正规Android APP,破解后植入恶意代码重新打包。




更重要的是,二次打包的安卓app,无论从性能、用户体验、外观或者是其它方面都跟正规APP一模一样,但是在它的背后却悄悄运行着可怕的程序,会在不知不觉中浪费你手机的电量、流量、偷窥隐私等行为。那么如何预防Android app二次打包?对此,天津app开发-文率科技有如下的建议,或许对广大的安卓开发者有所帮助。

一、混淆代码

Java作为一种跨平台的、解释型语言,想要被反编译很容易,一般情况,Java源代会被编译成中间“字节码”存储于class文件中。因此,为了很好地保护Java源代码,开发者会对编译好的class文件进行混淆处理。所谓的混淆也就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前的代码功能完全相同,更重要的是混淆后的代码很难被反编译,即便反编译成功也很识别出程序的真正语义。

二、整体Dex加固

Dex加固是对Dex文件进行加壳防护,防止被静态反编译工具破解而泄露源码,最开始出现的是整体加固技术方案。整体加固技术包括:替换application/classes.dex、解密/动态加载原classes.dex、调用原application相关方法、将原application对象/名称设置到系统内部相关变量。其中最关键的就是解密/动态加载原classes.dex,通过加密编译好的最终ex源码文件,可以很好地隐藏源码并防止直接性的反编译。

三、用dex2jar反编译出java源代码

首先,我们需要重新操作apk文件,其实apk文件就是一种压缩包,所以我们把后缀名改成rar,直接用解压缩工具打开。这时或许有人会问,为什么不直接解压缩?因为其他文件在apktool那一步已经反编译出来了,我们需要的仅仅是class文件,这是java代码编译后生成的文件,用dex2jar这个工具就可以反编译出原代码了。把这个class文件解压出来,放在dex2jar的同级目录下,命令成功完成后就会在同级目录下生成jar文件了。

四、用gui查看代码

通过gui打开jar文件,不仅能看到java代码,这里所有的引入的包代码都会有,那么如何寻找我们要的主程序代码?这就需要依赖manifest文件,熟悉android的朋友应该都知道,在manifest文件中有两个信息比较重要。1)包名,也就是主程序的路径,在manifest的最开始一行;2)入口activity,这个不难,只要找到有launcher标识的activity就是入口activity。

五、重新打包,签名,运行

在开始工作之前,最重要的就是修改代码二次打包,其实这里你可以什么代码先都别改,只重新打包一次,看看程序是否能够正常运行,如果不能,看看程序是哪一步阻止了运行,这也方便你后期定位签名验证的位置。目前我见过的签名验证有以下几种:

1、接抛出异常,禁止运行

2、出提示框提示用户,提示框消失后,退出程序

3、务器交互传递签名信息,如果不正确则服务器不返回数据

六、绕过程序防二次打包机制

首先,天津app开发建议大家先全局搜一下signatures这个字符串,因为程序要获取app的签名就要通过packageInfo.signatures这种方式,如果在这里我们不让程序获取到真正的签名,而是直接返回给它那个“正确”的签名,岂不是瞒天过海,一步搞定。当然了,你必须要有原来那个程序的“正确”签名,不过这个简单,android系统并不阻止你去获取其他程序的签名,所以我们可以写个小的test程序,然后安装原来的apk,去获取一次正确的签名,记录下来即可。

只要能够掌握上述天津app开发分享的这几点,相信你的Android app应用的安全性一定会得到非常大的提高,起码可以经得起攻击了,而不是原来的不堪一击。


声明:文章"怎样防止Android app二次打包?"为文率科技APP开发公司原创文章,转载请注明出处,谢谢合作!

Android APP开发资讯文章推荐阅读