mumu 模拟器如何模拟指纹识别?

最近在帮朋友解决一些任务时,有些比较复杂的任务需要批量使用模拟器,但是模拟器存在一个缺点,就是缺少很多物理功能,比如说陀螺仪、温度传感器和生物识别模块等等,但是有些任务是需要这些功能的。没有办法,只能自己去想办法解决这些先天缺陷。

由于模拟器本身不存在指纹,因此我们在询问android系统时,对应的系统方法是这个:

package android.hardware.biometrics;
  
public class BiometricManager {
  
  @Deprecated
    @RequiresPermission(USE_BIOMETRIC)
    @BiometricError
    public int canAuthenticate() {
        @BiometricError final int result = canAuthenticate(mContext.getUserId(),
                Authenticators.BIOMETRIC_WEAK);

        FrameworkStatsLog.write(FrameworkStatsLog.AUTH_MANAGER_CAN_AUTHENTICATE_INVOKED,
                false /* isAllowedAuthenticatorsSet */, Authenticators.EMPTY_SET, result);
        FrameworkStatsLog.write(FrameworkStatsLog.AUTH_DEPRECATED_API_USED,
                AUTH_DEPRECATED_APIUSED__DEPRECATED_API__API_BIOMETRIC_MANAGER_CAN_AUTHENTICATE,
                mContext.getApplicationInfo().uid,
                mContext.getApplicationInfo().targetSdkVersion);

        return result;
    }
 
}

如果能 hook 这个方法,返回 success标志,替代系统告诉使用者,我假装可以进行生物识别(生物识别包含指纹识别和人脸识别),解决完这个问题之后,我们再次需要进入生物验证方法:

@RequiresPermission(USE_BIOMETRIC)
    public void authenticate(@NonNull CryptoObject crypto,
            @NonNull CancellationSignal cancel,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull AuthenticationCallback callback) {

        FrameworkStatsLog.write(FrameworkStatsLog.AUTH_PROMPT_AUTHENTICATE_INVOKED,
                true /* isCrypto */,
                mPromptInfo.isConfirmationRequested(),
                mPromptInfo.isDeviceCredentialAllowed(),
                mPromptInfo.getAuthenticators() != Authenticators.EMPTY_SET,
                mPromptInfo.getAuthenticators());

        // Disallow explicitly setting any non-Strong biometric authenticator types.
        @Authenticators.Types int authenticators = mPromptInfo.getAuthenticators();
        if (authenticators == Authenticators.EMPTY_SET) {
            authenticators = Authenticators.BIOMETRIC_STRONG;
        }
        final int biometricStrength = authenticators & Authenticators.BIOMETRIC_WEAK;
        if ((biometricStrength & ~Authenticators.BIOMETRIC_STRONG) != 0) {
            throw new IllegalArgumentException("Only Strong biometrics supported with crypto");
        }

        authenticateInternal(crypto, cancel, executor, callback, mContext.getUserId());
    }

这个authenticate方法中存在四个参数,其实我们只需要关注AuthenticationCallback这个抽象类,可以查看一下这个抽象类:

public abstract static class AuthenticationCallback extends
            BiometricAuthenticator.AuthenticationCallback {
  
  // 验证失败时执行
  @Override
  public void onAuthenticationError(int errorCode, CharSequence errString) {}

  // 验证成功时执行
  public void onAuthenticationSucceeded(AuthenticationResult result) {}
  
}

那么只需要 hook 这个方法,直接使得AuthenticationCallback调用onAuthenticationSucceeded方法即可。

找到了系统需要 hook 的点,那么就可以请出我们的终极武器frida框架了,这里不说明frida框架的入门了,大家可以找找其他参考教程。

我们直接启动frida-server,然后通过frida注入js hook 代码,覆盖掉系统的返回,即可得到我们的答案。比如可以看到结论图:

当然,这只是我的思路,如果有更好的想法和方案,我们可以共同交流,wx:javainstalling, 暗号:指纹。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719849.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3-openlayers 使用tianditu,wmts和xyz等source加载天地图切片服务

本篇介绍一下使用vue3-openlayers加载天地图切片,三种方法: 使用tianditu(ol-source-tianditu内部实现其实用的wmts)使用wmts(ol-source-wmts)使用xyz(ol-source-xyz) 1 需求 vue…

为什么动态代理接口中可以不加@Mapper注解

为什么动态代理接口中可以不加Mapper注解 如下图: 我们上面的UserMapper上面没有加Mapper注解,按道理来说UserMapper这个类应该是注入不到IOC容器里面的,但是为什么我们程序的运行效果仍然是正常的呢?这是因为你的启动类上加了m…

zabbix“专家坐诊”第242期问答

问题一 Q:snmp检查用的什么性能啊?设备多了就检测失败,实际是能通的。 A:把大批量请求取消,把异常获取不到的监控项都禁用 Q:是这个吧,显示不一样。 A:什么版本?用的是v3…

ggpicrust2包:简化和直观化微生物功能预测分析

简介 ggpicrust2是一个强大的R语言包,旨在简化和直观化PICRUSt2输出的分析。通过预定义的图表和函数,研究人员可以轻松生成关于微生物功能预测的统计图,并提供丰富的自定义选项。本文将演示如何使用ggpicrust2包进行分析和可视化。 安装ggp…

VBA学习(9):按指定名单一键删除工作表

今天继续给大家聊VBA编程中工作表对象的常用操作,主要内容是如何批量删除工作表;也就是删除单个工作表、删除全部工作表和删除指定名单内的工作表。 1.删除单个工作表 删除工作表需要使用到工作表对象的delete方法,语法格式如下&#xff1a…

Python单行代码:一招鲜,吃遍天

大家好,在Python编程中,我们时常需要高效、简洁的代码来解决复杂的问题。今天,我将向大家介绍10个非常有用的Python单行代码。 一行代码指的是将复杂的任务浓缩在一行代码中完成。它充分利用Python的简洁和强大,使代码更简洁、更…

智能穿梭,无缝连接:迈威通信助力AGV智慧物流系统高效运转

随着智能制造模式的兴起,在工业4.0和“中国制造2025”的推动下,智能物流迎来了重大的发展机遇。AGV作为智慧仓储物流系统的“关键角色”之一,通过联系、调节离散型物流管理系统,使各环节有效地衔接起来,实现全厂物流运…

git使用摘樱桃的方式,实现特定需求进行提交合并

文章目录 先checkOut到主要的分支(需求提交到这) 然后双击点别的需求分支,对提交内容选定 进行摘樱桃操作 然后双击回到主要分支,会发现那2个提交内容代码已经在主要分支的本地里,选中其 右键选择Squash Commits进行合并 标注自己的需求标题提交名更改后, 最后进行push推送到…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡,也称为SD NAND或贴片式SD卡,是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同,它采用贴片式封装,可以直接焊接到设备的PCB上,从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

Google 新 AI 为视频生成配乐和对白;Runway 发布 Gen-3 视频生成模型丨 RTE 开发者日报 Vol.226

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

python+selenium之点击元素报错:‘NoneType‘ object has no attribute ‘click‘

今日遇到一个很奇怪的问题 case1:当使用顺序结构直接从登录到点击页面菜单,则可以正常点击菜单 case2:若把登录分离开,采用封装的方法点击菜单则会提示:‘NoneType’ object has no attribute ‘click’ 具体页面如下&#xff0c…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串分隔(二)(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串分隔(二)(100分) 🌍 评测功能需要订阅专栏后私信联系…

玩转nRF52840-DK开发套件 (5) RTT打印调试日志

一、两种日志信息的输出方式 日志信息输出可以方便调试者观察程序运行状态,通常用串口 printf 来输出日志。nRF52840-DK也可以用仿真器 JLink 的 RTT Viewer 输出方式。 二、SDK_config.h配置 勾选相关项: 三、SDK_config.h配置 在主函数 main 中&#x…

一图看懂华为云CodeArts API 7大特性,带你玩转一站式API

华为云CodeArts API是API全生命周期一体化协作平台 ,支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。以API契约为锚点,CodeArts API保证了API各阶段数据高度一致,为开发者提供友好易用的API全流程端到…

如何在本地部署ChatTTS? 完美部署 简单几步 cpu gpu cuda

前言 最近,24-05-27号,github上出现了一个新项目,ChatTTS。该项目提供了一个文本转语音(Text To Speech)的开源方案,同时支持中文和英文。在官网的演示视频中,可以看到合成效果高度接近真人。 到目前(06-04)为止,已经有18.3k的star。 那我们就来看看这个模型的基本…

录制视频软件哪个好?录制视频,4款好软件推荐

随着网络技术的飞速发展和社交媒体的普及,录制视频已经成为人们记录生活、分享知识和展示才华的重要方式。在众多录制视频软件中,如何挑选一款功能强大、操作简便的工具,成为了许多用户的难题。本文将为您推荐4款优秀的录制视频软件&#xff…

想体验“时光倒流”吗?文件时光机——可道云teamOS,历史版本管理,随时回溯版本

大家在工作中,遇到过的最奔溃的事情是什么? 是工作没有做好,还是客户要求太离谱? 不知道大家有没有过这样的经历,根据客户要求改方案、改稿子,改了一版又一版,结果客户说还是最初版本更好………

深入理解计算机系统 CSAPP 家庭作业6.40

这书真是会绕. A:16*16*4 B:256 ,第一个for 50%不命中 0.5*16*16.第二个for 每两个循环1次不命中 也就是128次 C:0.25

【Python机器学习实战】 | 基于决策树的药物研究分类预测

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…