点击上方「蓝色」字体关注我们
安卓APP的开发主要都是采用Java语言进行开发,其Java源码最终编译成smali字符码,以classes.dex文件保存在APP的APK中,目前市面上大部分APK在发行时均会采用代码混淆及加固(即加壳),代码混淆仅用于让APK被反编译后获取的代码难理解,加固则用于让APK难于被反编译,提高了APK的安全性,也提高了APK被逆向分析破解的门槛。
编写简单APK程序。
APK签名打包完成后输出为app-release.apk
使用360加固助手对打包完成的APK进行签名并重新输出为app-release_sign.apk,使用反编译软件打开打包完成的测试APK app-release_sign.apk,此时反编译结果与源代码一致。
使用360加固助手对测试APK进行加固
加固后再使用反编译软件打开,在程序目录下无法查看程序源代码,对逆向分析的DEX文件和资源文件进行了加密保护
APK资源文件assets中,增加了加固的so文件
使用查壳工具对测试APK查壳
市面上常见的加固方式包含爱加密、360加固、百度加固、阿里加固、腾讯加固、盛大加固、瑞星加固、国信灵通加固、apkprotec协固、几维安全加固、顶像科技加固、网易易盾等,或是通过自己编写的程序进行加固,各个加固技术产品都有其各自优缺点。
1、使用apktool对APK文件进行反编译,一般反编译后的源码为smali,不便于理解,需再次解析;
2、将APK文件另存为ZIP压缩文件,解压后使用dex2jar对classes.dex文件进行解析,解析成功后会生成jar文件,使用jd-gui程序打开jar文件则可看到程序源代码;
3、直接使用反编译程序打开,例如jadx-gui、GDA,技术难度较低,推荐使用。
若使用查壳工具查询出APK加壳或使用上述未加壳的APK解包方式对APK进行反编译后无法查看到程序源代码,当加固程度不是很高时,有以下两种相对简单点的工具对APK进行脱壳:
使用Fdex2,将xposed、Fdex2、mt管理器及需要脱壳的APK程序安装到安卓模拟器上,激活Fdex2添加的xposed模块,运行后在模拟器内对应APK包名的文件夹中获取对应的classes.dex文件,再使用jadx-gui或dex2jar程序对文件进行反编译。
使用Frida-DexDump,在安装好firda相关程序后,将需要脱壳的APK程序安装到安卓模拟器上,利用其脱壳命令“frida-dexdump -U -d -f 包名 -o 存放dex路径”获取到该APK的classes.dex文件。
近几年加固技术的发展主要经历阶段为动态加载、内存不落地加载、指令抽取、指令转换/VMP、虚拟机源码保护,随着互联网技术发展的不断升级,加固技术快速发展及其攻防对抗的更迭,虚拟机源码保护成为当前领先的加固技术,为APP提供了强有力的保护,在这种环境下,对于违规或恶意的APP程序进行逆向分析也将变得越来越困难。
在电子数据取证中,需要深入了解某个应用程序的内部机制,以便查明潜在的犯罪活动或其他非法行为。APK加壳与脱壳技术提供了一种手段,能够更好地分析应用程序,发现隐藏的功能、检测潜在的威胁或找到证据,确保电子数据的完整性和可靠性。
点个“在看”你最好看