KeyAttestation检测思路
思路
怎么可以利用Android提供的KeyAttestation认证方式来做设备异常性的检测呢?首先想想KeyAttestation是什么?能够提供什么?
- 提供可信环境可以支持存储密钥 设备端可以将密钥保存在KeyStore当中并认为该密钥具有绝对安全性
- 设备身份和完整性校验 验证密钥可信度的方式就是对整条证书链做校验并最终提取根证书进行校验
因此可以看出,核心是对证书链的校验及对根证书的数据进行校验,证书的内容可以从官方文档中了解
怎么可以利用Android提供的KeyAttestation认证方式来做设备异常性的检测呢?首先想想KeyAttestation是什么?能够提供什么?
因此可以看出,核心是对证书链的校验及对根证书的数据进行校验,证书的内容可以从官方文档中了解
之前在分析其他安全厂商App的防护策略时,想要设计个风控分析沙盒来实现对于App行为的全面监控,包括
其中很棘手的问题在于如何应对App中越来越常见的内联系统调用,对于内联系统调用的监控我不希望通过ptrace这类进程注入的方式来实现,而是想寻求通过定制系统或者相关的方式来实现以达到无侵入App的目的
如上文Linux Kprobe原理探究 所提及的,Kprobe有多种玩法,在设备改机场景中可以通过对内核系统函数的篡改以完成改机的目的,本文就是基于Kernel Kprobe机制来搭建一套完整的改机架构
LSPlant是LSPosed官方推出的新的ART hook框架,用来替代LSPosed之前使用的YAHFA框架
从官方README上看,对于LSPlant的使用分为几种
隔了很久再读Magisk源码中关于Zygisk的部分,上次翻源码还是v25.0,这次已经更新到了v27.0。粗略扫了眼,变化的地方还是挺多的,想搜索一下关键字也基本上搜索不到,懒得重新过一遍源码,既然是关于zygisk,那就以(zygisk_enabled)
作为关键搜索词切入
Java是一门跨平台的语言,系统实际运行的是Java字节码,由Java虚拟机去解释执行。解释执行的过程可以看做是一个循环,对每条指令进行解析,并针对指令的名称通过巨大的switch-case分发到不同的分支中处理。Java虚拟机的原理就类似这样,但JVM对于性能做了很多优化,比如JIT运行时将字节码优化成对应平台的二进制代码,提高后续运行速度等
Android代码既然是用Java代码编写的,那么运行时应该也会有一个解析字节码的虚拟机。和标准的JVM不同,Android中实际会将Java代码编译为Dalvik字节码,运行时解析的也是用自研的虚拟机实现。之所以使用自研实现,也许一方面有商业版权的考虑,另一方面也确实是适应了移动端的的运行场景。Dalvik指令基于寄存器,占1-2字节,Java虚拟机指令基于栈,每条指令只占1字节;因此Dalvik虚拟机用空间换时间从而获得比OracleJVM更快的执行速度