自研实现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.工具地址

免费工具地址