APK加固是对APK代码逻辑的一种保护,原理是将APK文件进行某种形式的转换,包括不限于隐藏、混淆、加等操作,进一步保护软件的利益不受损坏。
常见APK应用加固主要有DEX文件、SDK文件、SO文件加固这三类。DEX加固技术包括混淆代码、整体DEX加固、拆分DEX加固、虚拟机加固、Java2C加固,当前性能最强的加固方案是Java2c,将java指令转成c/c++指令,并做虚假控制流、字符串加密等处理,逆向难度最高。SO库文件一般存放着核心算法、重要协议等重要信息。SO加固大概可以分为有源保护和无源保护,有源保护分为自解密、混淆、源码VMP等,无源保护分为加壳、VMP保护。
APK加固后,可以降低被逆向破解风险,目前有些云安全平台提供系统的APP加固服务,如网易易盾、360加固、阿里云等,想要系统提升APK安全等级可以了解下。
可以。安卓APK资源混淆加密重签名工具,可以对安卓APK文件的代码和资源文件进行混淆加密处理,可以保护APK,增加破解难度,防止误报毒,可以对安卓APK文件进行加固,对代码和资源文件进行混淆,重新签名等功能.。
加固后的应用是给你应用加了密钥的,就比如你穿了防弹衣一样,没办法破解的,二次签名改包后的apk会闪退!
1. 执行命令 java -jar apktool.jar d xxx.apk
如果apk没有加固,执行完命令,就能看到反编译后的smali文件,可以阅读这些smali文件.
2. 打包命令 java -jar apktool.jar b 解包后的目录 xxx.apk
可以执行打包命令,将解包,修改后的smali再打包. 如果需要调试,需要在AndroidManifest.xml文件中,加上debugable.
此时得到的apk包没有签名,需要签名后才能安装
3. 签名 jarsigner -verbose -keystore .\xxx.jks -signedjar signed.apk xxx.apk 'benzhuo'
输入密码后,签名完毕,签名后的包是signed.apk,安装这个包.
1. 执行 java -jar apktool.jar d signed.apk. 解压刚才签名的安装包
2. 用Android Studio 打开解压后的文件夹,此时需要设置一下工程的SDK.
3. 连接上测试手机, 执行命令 adb shell am start -D -W -n 包名/LauncherActivity ,以debug模式打开应用,此时手机上打开应用会弹出提示框, Waiting For Debugger.
4. 点击Android Studio的Attach Debugger 按钮.
5. 选择调试的程序,然后就可以调试了
6. 修改了Smali文件之后,需要重新打包,然后安装在手机上,再调试.
1. 原始类型
|smali类型|java类型|
|----|---|
|B|byte|
|C|char|
|D|double|
|F|float|
|I|int|
|J|long|
|S|short|
|V|void|
|Z|boolean|
|[x| x类型数组|
|Lpackage/Object|对象|
2. 方法
1)APKtool 2)dex2jar 3)jd-gui 4)签名工具相关技术的基本要求1)具有一定的阅读JAVA代码的能力2)稍微有点Android基础,越多越好3)会用eclipse的一些Android调试的相关工具4)了解一下smali的语法规范和字段的自定范围5)有点应变能力思想转换能力、6)虽然代码的修改是修改其smali文件(用到smali语法),虽然其语言是非常复杂的,但是我们能够变通就行了,但是要求了解一下smali的语法规范和字段的自定范围。了解以上方法可以非常简单破解Android APK,破解后,应用里的页面布局、代码逻辑、结构算法等都能一目了然。所以为了避免被他人,尤其是竞争对手了解到这些,防破解和反编译尤为重要。我试过代码混淆,但是代码混淆只是对类名进行了变换,增加了破解者的阅读难度,并不能真正阻止反编译工程。下面是进行过代码混淆的APK代码结构,能看到只是对类名做了变换,变成a、b、c等这样的名称。但是仍然可以进行反编译。后来又尝试使用360加固保对APK进行加固保护,发现原有的代码程序被隐藏起来了,没法再进行反编译工作。所以作为移动应用开发者,适当了解一些破解和反编译工作有利于保护自己的应用安全。如果不防患于未然,一旦出现盗版情况,那么你的APP很可能从此被市场所抛弃。
加固安卓软件一般要达到以下效果:
1、防逆向:通过DEX 文件加壳以及DEX 虚拟化等技术,防止代码被反编译和逆向分析。
2、防篡改:通过校验 APK 开发者签名,防止被二次打包,植入广告或恶意代码。
3、防调试:防止应用被 IDA、JEB 等工具调试,动态分析代码逻辑。
VirboxProtector安卓加固的核心技术一般有:
DEX 文件加密隐藏
对 DEX 文件加壳保护,防止代码被窃取和反编译。
SO 区段压缩加密
对 SO 库中的代码段和数据段压缩并加密,防止被 IDA 等工具反编译。
单步断点检测
在混淆的指令中插入软断点检测暗桩,防止native层run trace和单步调试。
防动态调试
防止应用被 IDA、JEB 等工具调试,动态分析代码逻辑。
开发者签名校验
对 APK 中的开发者签名做启动时校验,防止被第三方破解和二次打包。
SO 内存完整性校验
在 SO 库加载时校验内存完整性,防止第三方对 SO 库打补丁。
SO 代码混淆
对 SO 库中指定的函数混淆,通过指令切片、控制流扁平化、立即加密等技术手段,将 native 指令转换为难以理解的复杂指令,无法被 IDA 反编译,并且无法被还原。
SO 代码虚拟化
对 SO 库中指定的函数虚拟化,可以将 x86、x64、arm32、arm64 架构的机器指令转换为随机自定义的虚拟机指令,安全强度极高,可通过工具自定义配置,调整性能与安全性。
DEX 虚拟机保护
对 DEX 中的 dalvik 字节码进行虚拟化,转换为自定义的虚拟机指令,最后由 native 层虚拟机解释执行,防止逆向分析。