自研实现APK加固-代码资源so全加密隐藏(附免费处理工具)
自研自定义实现APK加固-代码资源so全隐藏-防破解-防逆向-防反编译-防二次开发-防资源抓取
免费工具地址
1.APK安全现状
市面上各种游戏的破解版,各种APK的免卡密版,基本都是逆向开发者,从线上拿到正常的apk进行逆向二次开发的。
更有胜者,在不更改原程序的逻辑,但会加入自己的爬虫,病毒。
非常影响原apk开发者的正常权益。
2.逆向开发实现
如果原apk没做安全防护,逆向者想对apk进行一般会进行下面的操作。
2.1 jadx查看原包
市面上存在一个工具jadx,这个工具能直接将apk的内容进行解析,代码会直接变成可视化的Java代码,资源,清单和签名信息也清晰可见。


2.2 apktool反编译
市面上存在一个工具apktool,这个工具能非常方便的对apk进行反编译解包。
在使用jadx查看apk后,定位到需要的资源或需更改的代码后,就可以通过apktool反编译apk然后更改。

如上图所示,apktool解析完后,apk的资源,清单完全变成了明文,代码也成了可更改的smali代码。
2.3 更改内容重新合包
一般进行上面两步后,就能拿到原包的东西,接下来就是更改原包内容。
2.3.1 更改包名
对Android系统来说,安装到手机的应用,每个apk的包名要不一样,不然就会被认为是同一个应用。
实现:
在步骤2.2中解析出的AndroidManifest.xml文件,更改属性package=后面的值。
2.3.2 更改应用名
应用名是安装在手机上后,在桌面图标下展示的名字。
在步骤2.2中解析出的AndroidManifest.xml文件里,application标签后,或者activity标签后,会有android:label=属性,
android:label一般不是固定的字符串,如果是固定的字符串,直接更改就行。
android:label不是固定字符串,是资源文件的话,需要更改资源,例如android:label="@string/app_name",则需要更改2.2解析出的res/values/strings.xml里面app_name的值。
2.3.4 签名
apk要签名后才能安装到设备上。
常见签名方式:AndroidStudio,apksigner。
3.apk防护思路
针对2中的逆向思路,我们可以在开发中针对性的进行安全处理。
3.1 代码安全
我们在开发中,可以将代码进行一定的安全处理,使逆向者无法直接获取源码,增加其获取代码的难度。
3.1.1 代码混淆
比较常见的代码安全处理方式,AndroidStudio在打包时也可以直接设置进行混淆,最终会将清晰可见的源码,混淆成不便阅读的各种无意义代码。
3.1.2 代码动态加载
很多加固工具的代码安全原理,就是将原来的代码进行加密,使用时进行解密动态加载,在正常开发中,也可以使用这种方式。
3.2 资源安全
apk中,一般都会包含一些敏感资源,比如配置文件等,可以进行一定的安全处理,让逆向者不能获取到对应资源。
3.2.1 资源动态加载
跟代码动态加载类似,将原资源进行加密,使用时动态加载。
3.2.1 网络加载
将资源不放在包里,使用时动态网络下载,会有一定的流量成本。
4.针对性安全处理
4.1 jadx针对性处理
jadx在进行apk解析时,实际上使用的是smali,aapt,apksig,dexlib等工具进行apk解析的。jadx下载下来后,这些工具清晰可见的是一些jar包,直接用jadx查看jar包代码,可以看到这些工具解析原理。
所以,针对性的对原包处理,让这些工具不能正常生效,即可让jadx无法正常阅读apk。
4.1.1 代码处理
经自研,实现了jadx代码解析屏蔽,jadx查看代码都是【Method not decompiled】

4.1.2 资源处理
jadx使用appt进行资源解析。
经自研,实现了jadx资源解析屏蔽,jadx查看apk资源无法正确分析apk资源。

4.1.3 清单安全
jadx解析的清单里包含了很多apk关键信息。
经自研,实现了jadx解析清单屏蔽。

4.1.4 签名安全
保护应用的签名信息不外漏,也是非常重要的。
经自研,实现了jadx签名信息解析屏蔽。

4.2 apktool反编译防护
apktool能解包apk拿到很多apk敏感信息,防apktool反编译非常重要。
经自研,实现了apktool解包屏蔽。

5.其他安全防护
上述3和4中是针对性的防护处理,正常的apk开发阶段都可进行,
还有一些其他安全处理,比如代码冗余,资源冗余,资源混淆,资源md5更改等。
6.综合通用加固实现
想对一个apk实现上述的各种安全处理,处理在开发阶段就设计好实现,还能在apk导出后,对apk直接进行处理。市面上大多安全加固工具都是如此。
因为三方成熟的加固方案,一般都是大公司开发,免费的版本没有这么齐全的安全处理,全一点的都很贵,所以自己研究实现了一套加固工具。
6.1 加固工具效果
6.1.1 原包信息隐藏
加固后,原包代码,资源,so,清单,签名的等信息全部隐藏。
6.1.2 冗余信息添加
加固后,每次处理都会加入不同的冗余信息,增加逆向者的逆向分析难度。
冗余信息包括:冗余代码,冗余资源,冗余so,冗余清单。
6.1.3 jadx和apktool防护
加固后,jadx和apktool无法轻易解析apk。
6.2 加固处理流程
6.2.1 加固处理所需时间
经优化,对一个apk进行加固处理最快1分钟内就能搞定。包越复杂,所需时间越多。
6.2.2 加固流程简化
经优化,只需进行简单设置,就能快速处理apk。
6.2.3 加固兼容
工具已维护3年+,有大量的用户使用,兼容性佳。
Android系统支持Android8.0+。
unity,flutter等三方引擎导出的apk兼容。
小米,三星,华为等各种机型都兼容。
7.工具地址
免费工具地址