项目源码与apk的差异:dex文件
(java文件夹中所有的Java类编译而成的二进制文件)
.dex文件是Android系统虚拟机的可执行文件,所有的dex文件存储着APK整体业务逻辑的核心,因此它也是在逆向分析过程中关注的重点
resources.arsc文件,该文件是用于资源文件相关信息的文件
META-INF文件夹主要就是用于存储签名文件的,有利于重打包技术
1 | 在安卓平台上,重打包技术通常是指将已有的安卓应用程序(APK)进行修改、重新打包或重新签名,以实现不同的目的,如应用定制、应用破解、应用逆向工程等。下面是几种常见的安卓重打包技术: |
静态分析防止手段 攻击手法
1 .代码混淆 1.动态调试
2.动态加载
动态分析防止手段
1.运行时检测
1.1例如:如果调用ptrace()函数对进程进行附加,那么会存在相应的特征点,比如/proc/
IDA调试的服务端android_server64 的 进 程 pid 为 18174 , demo02 的 进 程pid 为17887,当使用IDA附加到demo02进程后查看demo02进程的proc/
1.2 指令执行时间差进行检测
2.事先阻止
2.1 双进程保护
双进程保护是利用一个进程最多只能被一个进程ptrace附加的特性,事先在代码中自己fork一个子进程ptrace,ptrace自己就可以防止再被其他进程ptrace,也就变相地阻止了进程被调试
app加固
1.DEX加固:App加固的核心原理是将DEX整体加密后动态加载
2.代码抽取保护:App加固的关键在于真正的代码数据并不与DEX的整体结构数据存储在一起,就算DEX被完整地从内存中dump(转储)出来,也无法看到真正的函数代码
例子:,某DEX整体加固被dump出来之后,使用Jadx查看关键函数,发现其代码被nop这一无意义的代码填充了。这种加固的核心原理是利用私有函数,通过对自身进程的Hook来拦截函数被调用时的路径,在抽取的函数被真实调用之前,将无意义的代码数据填充到对应的代码区中。
代码抽取保护通常在函数被第一次调用后就不再将函数内容重新置空,这也正是如今依然存在一些从内存中把DEX整体dump出来的方案,因为只需要在App运行时多触发几次程序逻,然后再进行DEX的dump,即可得到更加完整的DEX文件
3.加壳保护手段——VMP与Dex2C
VMP:其核心逻辑是将所有的代码使用自定义的解释器执行。这时的代码不再依赖于系统本身,即使获得了所有的函数内容,也是貌合神离、不知所云。这时唯一的解决方案可能是逆向对应的解释器,以找到与系统解释器的映射关系