安卓指纹浏览器,手机指纹浏览器,android指纹浏览器

        这是一个移动端指纹浏览器项目,我们通过收集需要测试的手机型号的配置,使用虚拟化创建模拟器,再通过代码方式注入到模拟器的浏览器运行时环境,从而达到动态修改浏览器运行时环境的功能,让模拟器里的浏览器环境和真机里的环境保持一致。 这种方式相当于是底层修改了手机配置,能通过任何 js 检测,并且动态注入后,配置在浏览器是永久生效。 通过虚拟化的技术还可以实时动态扩容模拟器,从而实现像云计算那种便捷高效的管理浏览器容器。

核心优势:
多版本指纹浏览器。因为随着 web 的发展 w3c 的标准也会随着变化。对此,我们提供了多版本兼容的指纹浏览器方案。
多架构平台 app。我们提供 arm、arm64、x84_64 等平台的浏览器。当然如果您有需求,我们还可以提供更多。
分布式测试。我们拥有完整的分布式测试的解决方案,让您可以快速、高效的进行大批量数据测试。
客户端 SDK。示例中我们实际是拿一个 json 去注入,这样可能会造成参数格式错误。对此,我们完成了注入项的全部 sdk 功能开发,以确保每个参数的合法性。并且我们还会提供每个参数的详细解释,来确保用户的场景准确性。

动态注入前后对比:
案例中使用的是一台雷电模拟器,模拟器的配置是:4核 + 4GB 的三星机型。因为是在 windows 64 操作系统下,所以检测出来的 navigator.platform 是 Linux x86_64位。 通过注入以下参数,我们让模拟器的运行时环境强制改变。

{
    "global.setting-version": "0.1",
    "global.setting-timestamp": "1345678768",
    "global.disable-settings": "0",
    "webgl.vendor": "Qualcomm",
    "webgl.renderer": "Adreno (TM) 640",
    "navigator.user-agent": "Mozilla/5.0 (Linux; Android 11; ASUS_I005DA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Mobile Safari/537.36",
    "navigator.webdriver-status": "0",
    "navigator.platform": "Linux armv8l",
    "navigator.max-touch-points": "5",
    "navigator.hardware-concurrency": "8",
    "navigator.device-memory": "4",
    "navigator.language": "zh",
    "navigator.languages": "zh,en",
    "battery-manager.charging": "0",
    "battery-manager.level": "0.76",
    "connection.effective-type": "4g",
    "connection.type": "wifi",
    "fingerprint.canvas-rand-value": "0.001"

注入选项

注意:请在使用前配置好设备的运行时环境,比如语言、时间等。

状态类型

待确认:暂未验证。
通过:通过检测(一般是指:通过专业逻辑检测通过)。
通过(自身):通过自身的检测逻辑(如果以后有专业检测逻辑,还需要通过专业检测逻辑进行检测)。
异常:检测未通过。
暂不处理:暂时不需要处理。

我们通过一个实战案例来展示动态注入浏览器属性的流程(只是展示一些常用的属性,完整版有超过 150 项)。接下来,通过修改以下参数,来对比修改前和修改后的区别。

系统相关参数名验证描述示例
basic.disable-window-chrome通过是否禁用 window.chrome「1:true; 0:false」1
basic.timezone通过时区Asia/Shanghai
basic.init-history-length通过设置初始化的历史记录数量10
basic.inject-js通过注入的js详细请看「注入 js
basic.inject-system-js注入的js(由系统控制,不允许客户端注入)
basic.allow-permissions通过直接允许的权限**(详细请看“权限枚举列表”)**[3]
basic.reject-permissions通过直接拒绝的权限**(详细请看“权限枚举列表”)**[4]
版本信息version-info.product-name通过产品名称Google Chrome
version-info.number通过版本号89.0.0.4389
字体相关font.list-json通过注入字体**(注意:有小概率注入不成功)**["Marlett","Haettenschweiler"]
Navigator 相关navigator.webdriver-status通过设置 webdriver 状态「1:true; 0:false」0
navigator.user-agent通过设置 User-AgentMozilla/5.0 (Linux; Android 9; vivo X22A Build/PKQ1.180819.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.3440.91 Mobile Safari/537.36
navigator.user-agent-auto-match通过修改 UserAgent 里的版本号,自动对应 "version-info.number" 字段的值1
navigator.reduced-major-in-minor-version-number通过强制只获取主版本号(例如:把 96.0.4664.104 变成 96.0.0.0)0
navigator.platform通过平台Linux armv8l(详细请看「Platform」)
navigator.vendor通过浏览器供应商的名称Apple Computer, Inc. 和 Google Inc.
navigator.max-touch-points通过设备能够支持的最大同时触摸的点数「移动端:5; PC:1」5
navigator.hardware-concurrency通过处理器数量8
navigator.device-memory通过设备内存数4
navigator.do-not-track通过设置 Do Not Track(如果强制不追踪就设置为 “1”,否则请不要设置该值。)1
navigator.enable-plugin通过是否启用插件(注意:如果是移动端建议关闭)「1:true; 0:false」1
navigator.plugin-json通过插件(只有 enable-plugin 设置为 1,该属性才生效)详细请看「插件
navigator.enable-fake-plugin通过是否启用默认 PC 端自带的五个插件「1:true; 0:false」((只有 navigator-enable-plugin 设置为 1,该属性才生效。如果是 PC 端建议开启,如果是移动端建议关闭1
navigator.online通过是否在线「1:true; 0:false」(注意:建议强烈设置成 11
navigator.java-enabled通过javaEnabled「1:true; 0:false」(注意:建议设置成对应机型的值)1
navigator.pdf-viewer-enabled通过pdfViewerEnabled「1:true; 0:false」(注意:建议设置成对应机型的值)1
navigator.bluetooth-availability通过蓝牙可用性「1:true; 0:false」(注意:建议强烈设置成 11
navigator.language通过用户偏好语言zh-CN
navigator.languages通过浏览器支持语言(多个请用**","**符号连接)zh-CN,zh,en
Client Hintsclient-hints.disable通过是否启用 client hints「1:true; 0:false」1
client-hints.disable-json通过禁用指定的 ua-client-hints 属性["15"]
client-hints.viewport-width通过宽度980
client-hints.viewport-height通过高度980
client-hints.prefers-color通过显示模式 「dark;light」dark
client-hints.mobile通过是否是手机「1:true; 0:false」1
client-hints.platform通过平台Android
client-hints.platform-version通过平台版本12.0.0
client-hints.architecture通过平台架构的字符串。例如,"x86"arm
client-hints.bitness通过架构位数的字符串。例如,"64"64
client-hints.wow64通过如果二进制文件是在 32 位模式下构建并在 64 位上运行,则返回 true;否则返回 false。「1:true; 0:false」0
client-hints.model通过手机型号Redmi Note 9 Pro
性能相关performance.match-json通过多组匹配修改:type、redirect-count、timing 等
如何导航到该页面,详细请查看链接:PerformanceNavigation: type property - Web APIs | MDN
{ "target_url": "https://so.com", "match_type": "1", "match_break": "1", "navigation_type": "1", "navigation_redirect_count": "78", "timing_connectEnd_offset": "0", "timing_connectStart_offset": "0", "timing_domComplete_offset": "0", "timing_domContentLoadedEventEnd_offset": "0", "timing_domContentLoadedEventStart_offset": "0", "timing_domInteractive_offset": "0", "timing_domLoading_offset": "0", "timing_domainLookupEnd_offset": "0", "timing_domainLookupStart_offset": "0", "timing_fetchStart_offset": "0", "timing_loadEventEnd_offset": "0", "timing_loadEventStart_offset": "0", "timing_navigationStart_offset": "0", "timing_redirectEnd_offset": "190.8", "timing_redirectStart_offset": "0", "timing_requestStart_offset": "0", "timing_responseEnd_offset": "0", "timing_responseStart_offset": "0", "timing_secureConnectionStart_offset": "0", "timing_unloadEventEnd_offset": "0", "timing_unloadEventStart_offset": "0" }
运行内存相关memoryinfo.total-js通过可使用的内存95301723
memoryinfo.used-js通过JS 对象(包括V8引擎内部对象)占用的内存数92349659
memoryinfo.limit-js通过内存大小限制 通常,usedJSHeapSize不能大于totalJSHeapSize,如果大于,有可能出现了内存泄漏4294705152
窗口相关frame.disable-alert通过是否禁用 alert 弹框「1:true; 0:false」1
frame.disable-window-open通过是否禁用 window.open 弹框「1:true; 0:false」1
frame.confirm通过强制 confirm 弹框的值「1:true; 0:false」1
**media.list-json通过硬件设备信息详细请看「硬件设备信息」
media.matchs-json通过媒体查询详细请看「修改 window.matchs 匹配」
Screen 相关screen.color-depth通过colorDepth(屏幕的色彩深度)30
screen.width通过屏幕宽度(单位:px)393
screen.height通过屏幕高度(单位:px)851
screen.avail-width通过可用空间的屏幕宽度(单位:px)393
screen.avail-height通过可用空间的屏幕高度(单位:px)851
screen.avail-left通过可用空间的左边边界的第一个像素点0
screen.avail-top通过可用空间的顶部边界的第一个像素点0
screen.orientation-angle通过屏幕方向「0、90、180、270」,注意:请配合 “
ScreenOrientationType” 搭配使用。
0
screen.orientation-type通过屏幕方向「"portrait-primary"、"landscape-primary"、"landscape-secondary"」
,注意:请配合 “
ScreenOrientationAngle” 搭配使用。
portrait-primary
screen.device-pixel-ratio通过设备像素比3
Rect 相关rect.width通过可视区域页面宽度350
rect.height通过可视区域页面高度780
Document 相关document.match-json通过多组匹配修改:标题、referrer、当前链接404 您访问的页面找不到了_腾讯网
document.is-trusted通过是否是用户执行的事件「1:true; 0:false」(注意:建议强烈设置成 11
document.compat-mode通过渲染模式CSS1Compat
document.charset通过文档编码GBK
document.lastModified通过文档最后更新时间15874423673
document.video-support-mime-types-json通过支持播放的视频格式
详细请看:「模糊匹配视频支持格式
[ { "type": "dmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSI=", "support": "maybe", } ]
Header 相关header.x-requested-with通过设置 X-Requested-With 的值com.xunmeng.pinduoduo
header.extra-json通过额外的 header(注意:如果强制设置原本存在的 key,不会有效果{ "name": "header1", "value": "value1" }, { "name": "header2", "value": "value2" }
Cookie 相关cookie.status通过是否开启 cookie 「1:true; 0:false」0
cookie.json通过注入 Cookie 值[ { "port": "80", "domain": ".baidu.com", "name": "BAIDUID", "value": "xxxxx6B7E8F02313:FG=1" }, { "port": "80", "domain": ".so.com", "name": "name2", "value": "aaaaa2" } ]
电量相关battery-manager.charging通过是否正在充电「1:true; 0:false」0
battery-manager.charging-time通过距离充电完毕还需多少秒,如果为0则充电完毕(double 类型,可以 infinity 和 - infinity)null
battery-manager.discharging-time通过距离电池耗电至空且挂起需要多少秒(double 类型,可以 infinity 和 - infinity)null
battery-manager.level通过电量(单位是两位小数。例如:0.28 代表百分之 28 的电量。最大为 1,代表百分之百电量。)0.98
网络相关connection.effective-type通过网络有效类型4g
connection.type通过网络类型
详细请看「ConnectionType 类型
cellular
connection.downlink通过网络下行速度1.75
connection.downlink-max通过网络最大下行速度100
connection.rtt通过估算的往返时间100
connection.save-data通过打开/请求数据保护模式「1:true; 0:false」0
**fingerprint.audio-rand-value通过音频指纹偏移量「范围:99.000 ~ 0.999」0.98
fingerprint.canvas-rand-value通过Canvas 指纹偏移量「范围:99.000 ~ 0.999」0.32
fingerprint.webgl-rand-value通过Webgl 指纹偏移量「范围:0.000 ~ 0.999」0.001
显卡相关webgl.vendor通过显卡供应商Qualcomm
webgl.renderer通过显卡型号Adreno (TM) 612
加速度device-motion.interval通过加速度获取间隔(建议不设置该值,由系统自动生成)
device-motion.x1通过X加速度-0.1509007066488266
device-motion.x1-left通过X加速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.x1-right通过X加速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)
device-motion.y1通过Y加速度-0.0059375762939453125
device-motion.y1-left通过Y加速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.y1-right通过Y加速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)
device-motion.z1通过Z加速度0.04666939377784729
device-motion.z1-left通过Z加速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.z1-right通过Z加速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)
加速度(该值包括重力的影响)device-motion.x2通过X加速度(该值包括重力的影响-0.4155784845352173
device-motion.x2-left通过X加速度(该值包括重力的影响)(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.x2-right通过X加速度(该值包括重力的影响)(偏移量:右)(注意:设置后,返回的值只保留一位小数)
device-motion.y2通过Y加速度(该值包括重力的影响9.564980506896973
device-motion.y2-left通过Y加速度(该值包括重力的影响)(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.y2-right通过Y加速度(该值包括重力的影响)(偏移量:右)(注意:设置后,返回的值只保留一位小数)
device-motion.z2通过Z加速度(该值包括重力的影响0.26034310460090637
device-motion.z2-left通过Z加速度(该值包括重力的影响)(偏移量:左)(注意:设置后,返回的值只保留一位小数)
device-motion.z2-right通过Z加速度(该值包括重力的影响)(偏移量:右)(注意:设置后,返回的值只保留一位小数)
设备围绕所有三个轴旋转的速率device-motion.alpha通过alpha 旋转速度-0.7907827602396802
device-motion.alpha-left通过alpha 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-motion.alpha-right通过alpha 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
device-motion.beta通过beta 旋转速度0.22675585046165
device-motion.beta-left通过beta 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-motion.beta-right通过beta 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
device-motion.gamma通过gamma 旋转速度-0.4725504797087403
device-motion.gamma-left通过gamma 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-motion.gamma-right通过gamma 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
网页的设备的物理方向的信息device-orientation.alpha通过alpha 旋转速度88.18197488483892
device-orientation.alpha-left通过alpha 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-orientation.alpha-right通过alpha 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
device-orientation.beta通过beta 旋转速度37.221763387241076
device-orientation.beta-left通过beta 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-orientation.beta-right通过beta 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
device-orientation.gamma通过gamma 旋转速度49.19596650622097
device-orientation.gamma-left通过gamma 旋转速度(偏移量:左)(注意:设置后,返回的值只保留一位小数)0.1
device-orientation.gamma-right通过gamma 旋转速度(偏移量:右)(注意:设置后,返回的值只保留一位小数)0.2
device-orientation.absolute通过设备是否绝对提供方向数据「1:true; 0:false」(注意:建议不设置该值0
WebRTC相关webrtc.privite-ip通过强制设置 stun 协议获得的局域网 IP192.168.0.100
webrtc.public-ip通过强制设置 stun 协议获得的外网 IP8.8.8.8
webrtc.host-name暂不处理强制设置 stun 协议获得的 hostname9923c2-459f-beeb-ac5f4ca215cf.local
位置相关geo.longitude通过经度117.12874
geo.latitude通过纬度25.3502944
geo.accuracy通过经度精确值2417.3790234045855
geo.altitude通过海平面高度(无法提供时为 null)null
geo.altitude-accuracy通过高度精确值(无法提供时为 null)null
geo.heading通过前进方向(无法提供时为 null)null
geo.speed通过速度(无法提供时为 null)null
剪切板clipboard.text通过强制设置剪切板内容"12121"
语音合成相关speech-synthesis-voice.force-override通过是否强制覆盖本来的语音信息「1:true; 0:false」0
speech-synthesis-voice.append-mode通过追加方式:push:尾部追加;insert:顶部追加push
speech-synthesis-voice.json通过注入的语音信息(注意:如果注入不正确,请参考该链接:javascript - speechSynthesis.getVoices() returns empty array on Windows - Stack Overflow[ { "name": "name", "lang": "lang", "is_local_service": "0" } ]
全局相关global.disable-settings通过是否禁用全部选项「1:true; 0:false」0
JA3相关ja3.min-version最小支持的 tls 版本号(注意:非必要,请不要使用该参数tls1.2
ja3.max-version最大支持的 tls 版本号(注意:非必要,请不要使用该参数tls1.3

示例操作

我们通过一个实战案例来展示动态注入浏览器属性的流程(只是展示一些常用的属性,完整版有超过 150 项)。接下来,通过修改以下参数,来对比修改前和修改后的区别。

类型选项说明
Navigator 相关navigator.user-agentuserAgent
Navigator 相关navigator.platform平台
Navigator 相关navigator.hardware-concurrency处理器数量
Navigator 相关navigator.device-memory内存大小
Navigator 相关navigator.language首选项语言
Navigator 相关navigator.languages支持的语言
Navigator 相关navigator.webdriver-status是否是自动化测试
Navigator 相关navigator.max-touch-points多点触控
电量相关battery-manager.charging是否充电
电量相关battery-manager.level电量
网络相关connection.type网络类型
网络相关connection.effective-type网络有效类型
指纹相关fingerprint.canvas-rand-valuecanavs 指纹
显卡硬件相关webgl.vendor显卡供应商
显卡硬件相关webgl.renderer显卡型号

生成注入参数

注意:这里我们使用了 SDK 去完成,实际上传到 git 仓库的是一个 json 配置。虽然两者看起来有差异,但是不影响去使用。

UserAgent

UA 里包含的了很多重要的设备相关信息在里面。

  1. Android 11:安卓的版本
  2. ASUS_I005DA:手机的型号
  3. Chrome/102.0.0.0: 浏览器的版本号

注意:因为关于浏览器版本号有几个地方都可以获取(比如:navigator.userAgentData ),如果仅仅把 UA 设置成 102.0.0.0 ,会导致和其他地方获取的版本号不一样,所以在完整版中有一个选项是单独针对浏览器版本的设置。而且还有一个是否自动匹配浏览器版本的选项,开启该选择后, UA 里填写的是 102,在单独设置浏览器版本里填写的是 101,则会自动把 UA 里的版本号设置为 101。

navigator = Navigator() \
.set_user_agent(
    "Mozilla/5.0 (Linux; Android 11; ASUS_I005DA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Mobile Safari/537.36")
Platform

平台,如果是 android 一般都是 Linux a 开头,所以虚拟化的设备一定要改掉这个值。

@unique
class Platform(str, Enum):
    LINUX_ARMV8L = "Linux armv8l"
    LINUX_ARMV7L = "Linux armv7l"
    LINUX_ARMV6L = "Linux armv6l"
    LINUX_AARCH64 = "Linux aarch64"
    LINUX_X86_64 = "Linux x86_64"
    LINUX_I686 = "Linux i686"
    MACINTEL = "MacIntel"
    WIN32 = "Win32"
    WIN64 = "Win64"
    WINCE = "WinCE"
    SUNOS = "SunOS"
    IPHONE = "iPhone"
    IPOD = "iPod"
    IPAD = "iPad"
    
navigator = Navigator() \
            .set_platform(Platform.LINUX_ARMV8L)
hardwareConcurrency

CPU 的处理器数量,一般策略会检测是否是常规数值,如果是很大的数值则可能是异常。

navigator = Navigator() \
            .set_hardware_concurrency(8)
deviceMemory

内存大小,一般策略会检测是否是常规数值,如果是很大的数值则可能是异常。

navigator = Navigator() \
            .set_device_memory(4)
language

首选项语言,一般默认是中文

 navigator = Navigator() \
            .set_language("zh")
languages

支持的语言

navigator = Navigator() \
            .set_languages("zh,en")
webdriver

是否是自动化测试,这是一个很危险的属性。 该属性的正常值一般分为 2 种,第一种是 false,表示没有启用自动化;一种是 undefined,表示没有该属性。chrome 的 88.0.4324.93 后就有该值了,所以可以强制设置为 false 就行了。当然如果想设置为 undefined 的话,在完整版里有注入 js 这个选项,可以把这个属性给强制删除就行了。还有一种办法就是单独编译一个版本强制把这个属性给删除。

navigator = Navigator() \
            .set_webdriver_status(False)
maxTouchPoints

多点触控点数,移动端一般是 5,电脑端是 1。

注意:为什么说移动端一般是 5 呢?因为在我们收集的型号数据里,有些该值并不是 5 的情况。所以一般检测策略会再去判断是否执行 touch 事件。

@unique
class MaxTouchPoint(int, Enum):
    MOBILE = 5
    PC = 1
    
navigator = Navigator() \
            .set_max_touch_points(MaxTouchPoint.MOBILE)
charging

是否充电中,如果一直插着数据线充电的话,这个值一直是 true。

battery = Battery() \
            .set_charging(False)
level

电量。有效范围 1- 100

battery = Battery() \
            .set_level(76)
type

网络有效类型,一般获取到的是 wifi 和 cellular。

@unique
class WebConnectionType(str, Enum):
    CELLULAR = 'cellular'
    BLUETOOTH = 'bluetooth'
    ETHERNET = 'ethernet'
    WIFI = 'wifi'
    WIMAX = 'wimax'
    OTHER = 'other'
    NONE = 'none'
    UNKNOWN = 'unknown'
    
network = Network() \
            .set_type(WebConnectionType.WIFI)
effectiveType

网络类型,一般获取到的是 4g。

注意:如果 type 是 wifi,effectiveType 的值也是 4g。

class WebEffectiveConnectionType(str, Enum):
    kTypeUnknown = '4g'
    kTypeOffline = '4g'
    kTypeSlow2G = 'slow-2g'
    kType2G = '2g'
    kType3G = '3g'
    kType4G = '4g'
    
network = Network() \
            .set_effective_type(WebEffectiveConnectionType.kType4G)
Canvas

canvas 指纹。这个是很多检测项都会去获取的值,这个可以理解成设备的标识符。所以一般都是随机化,在 SDK 里我们已经做好了自动随机化的,只需要调用 auto_canvas_offset 就可以实现自动随机。

注意:这个虽然我把它称为设备标识符,但其实这个是不准确的说法。

 fingerprint_offset = FingerprintOffset() \
            .set_canvas_offset(0.001)
WebGL Vendor

显卡供应商

basic = Basic() \
            .set_webgl_vendor('Qualcomm')
WebGL Renderer

显卡型号

 basic = Basic() \
            .set_webgl_renderer('Adreno (TM) 640')

注入配置

最终我们通过以上代码注入的配置如下:

{
    "global.setting-version": "0.1",
    "global.setting-timestamp": "1345678768",
    "global.disable-settings": "0",
    "webgl.vendor": "Qualcomm",
    "webgl.renderer": "Adreno (TM) 640",
    "navigator.user-agent": "Mozilla/5.0 (Linux; Android 11; ASUS_I005DA) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Mobile Safari/537.36",
    "navigator.webdriver-status": "0",
    "navigator.platform": "Linux armv8l",
    "navigator.max-touch-points": "5",
    "navigator.hardware-concurrency": "8",
    "navigator.device-memory": "4",
    "navigator.language": "zh",
    "navigator.languages": "zh,en",
    "battery-manager.charging": "0",
    "battery-manager.level": "0.76",
    "connection.effective-type": "4g",
    "connection.type": "wifi",
    "fingerprint.canvas-rand-value": "0.001",
}

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 指纹浏览器是一款功能强大的安全浏览器应用,它使用指纹识别技术来确认身份,让用户能够轻松、快捷地登录网站和应用。只需要将您的指纹放在设备上,指纹浏览器将自动为您填充用户名和密码,省去了繁琐的输入步骤,让用户无需记忆复杂的密码,同时保证账户安全。 指纹浏览器同时还提供了许多其他的安全功能,如私人浏览模式、加密数据传输、黑名单过滤、广告拦截、强制 HTTPS 等等,全面保护您的隐私和安全。 若你想下载指纹浏览器,可以在应用商店或指纹浏览器官方网站上找到并下载。安装后,您需要同意授权指纹识别,并按照应用程序提示,设置您的指纹以及其他登录信息,然后就可以开始使用这款便捷的安全浏览器了。 总而言之,指纹浏览器是一款功能强大、安全可靠、易于使用的应用程序。它是您上网安全和隐私保护的得力帮手,为您提供一流的指纹识别技术和多项安全功能,欢迎下载使用。 ### 回答2: 指纹浏览器app是一款专为安卓设备用户打造的应用,其最具特色之处在于使用指纹识别技术保护用户的个人隐私安全。源于硅谷,指纹浏览器app开发团队以最高标准保护用户的隐私安全,开发了一款集成了指纹识别功能的浏览器,以便更方便地访问网站,并通过指纹来加密您的网上账号信息和支付信息。 当用户在下载并安装了指纹浏览器app后,便可以体验到其完善的隐私保护机制。用户可以使用自己的指纹开启自动填充功能,这样就不用输入账号密码了。同时,指纹浏览器app还支持自定义密码和图案解锁的方式,以确保用户在非指纹识别环境下仍然能够享受到优质的隐私安全保护。 在使用指纹浏览器app的过程中,用户还可以享受到更快速、更稳定、更安全的网站访问体验。此外,该应用还支持多种语言,方便全球用户更好的使用。 总之,指纹浏览器app是一款值得您下载的优秀应用。它能够帮助用户更好地保护个人隐私安全,提升网站访问的效率和速度,让您浏览网络时更加便捷自如。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值