前言
今天主要介绍的是通过内核通讯的方式获取设备网卡mac指纹,主要通过netlink的方式和内核通讯去获取mac网卡地址 。
这种方式可以直接绕过android的权限。
在不给app授权的时候也可以直接获取到网卡信息。因为很难进行mock,所以很多大厂app也都是采用这种办法去获取。
netlink简介:
Netlink是linux提供的用于内核和用户态进程之间的通信方式。
- 但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。
- 只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。
- NetLink机制是一种特殊的socket,它是Linux特有的,由于传送的消息是暂存在socket接收缓存中,并不为接受者立即处理,所以netlink是一种异步通信机制。系统调用和ioctl是同步通信机制。
一般来说用户空间和内核空间的通信方式有三种:
proc
ioctl
Netlink
而前两种都是单向的,但是Netlink可以实现双工通信。
Netlink协议基于BSD socket和AF_NETLINK地址簇(address family)。
使用32位的端口号寻址(以前称为PID),每个Netlink协议(或称作总线,man手册中则称之为netlink family),通常与一个或者一组内核服务/组件相关联,如NETLINK_ROUTE用于获取和设置路由与链路信息、NETLINK_KOBJECT_UEVENT用于内核向用户空间的udev进程发送通知等。
netlink特点:

本文深入探讨了通过Linux的Netlink协议在Android系统中获取网卡MAC地址的方法,详细介绍了Netlink的原理和特性,以及如何绕过权限限制直接获取信息。在Android中,通过Netlink连接获取网卡信息的过程涉及getifaddrs方法,以及防止recv函数被hook的安全封装技巧,包括使用syscall和内联汇编。文章还提到了Android 8.1及以上版本的seccomp安全机制及其对系统调用的影响。
最低0.47元/天 解锁文章
1643

被折叠的 条评论
为什么被折叠?



