设备指纹系列--基础篇

news2024/12/23 10:03:58

基础概念

618还没开始,但是又好像已经结束了…在这种电商大促的大节日前,电商行业客户一般会提前找到合适的设备指纹产品,去防止被“薅秃”。因为,黑灰产拥有专业的设备牧场,通过使用模拟器、刷机改机等手段,批量、反复地利用终端设备作案。对互联网场景下的金融、电商等行业,进行恶意爬取、虚假注册、账号盗用、薅羊毛、推广作弊等其他恶意行为。

image.png

而设备指纹,通过用户上网设备的硬件、网络、环境等设备特征信息, 生成可抗黑产破解的设备唯一标识。作为纵深防御风控体系下的重要工具,可实现对终端设备上的风险环境识别、风险检测及行为风险分析。

名称释义
AppId公钥,长度为32位字符串,接入渠道唯一标识。开通服务后可在设备指纹的二级菜单“应用管理”中获取,AppId在客户端接入时使用。
AppSecret私钥,长度为32位字符串,与公钥对应,开通服务后可在设备指纹的二级菜单“应用管理”中获取,请妥善保管,勿泄漏给他人 。AppSecret在后台查询设备详情时使用。
token设备指纹SDK采集上报后返回的标识,token不是设备指纹,通过token可以查询设备指纹
hardId设备指纹
用户前端Web端或集成SDK的Android端、iOS端
用户后端指企业的后台服务器

交互流程

image.png

  • 客户端接入,业务客户端需要集成指纹客户端SDK,包括安卓,iOS,H5,小程序等;通过客户端SDK可以获取到设备指纹token(注:token不是设备指纹)。

  • 业务接口扩展,业务客户端在需要设备指纹token的时候,可以通过相应的api获取到。业务接口需要把前端拿到的指纹token一并传入后台。

  • 后台接入,根据提供的后端SDK来查询设备详细信息,SDK涵盖Java,PHP等。

PS:因终端用户的设备网络环境和设备版本等因素,设备指纹采集率并不能一定达到100%,可能会存在极少部分未能正常采集到的情况。所以在集成指纹服务的时候,请尽量避免对指纹信息强依赖。

设备指纹的获取

常见的设备指纹获取方式:

  1. User-Agent 字符串:在 Web 浏览器环境中,可以通过读取用户代理(User-Agent)字符串来获取设备信息,包括操作系统、浏览器版本等。例如,在 JavaScript 中,可以使用 navigator.userAgent 来获取 User-Agent 字符串。
  2. IP 地址:通过获取设备的 IP 地址,可以对设备进行初步的区分。然而,IP 地址并非唯一标识设备的可靠方式,因为多个设备可能共享相同的 IP 地址(例如,通过 NAT 网络)。
  3. 操作系统信息:设备的操作系统信息也可以用于构建设备指纹。在不同的操作系统中,可能有各种系统调用、API 或命令可以获取该信息。
  4. 浏览器或应用程序特征:可以通过检查浏览器或应用程序的特定特征来获取设备指纹。例如,在 Web 浏览器中,可以使用 JavaScript 检测浏览器的插件、字体、屏幕分辨率等信息。
  5. 硬件信息:获取硬件信息也可以用于设备指纹的生成。例如,使用 JavaScript 可以读取设备的 CPU 信息、GPU 信息、设备的唯一标识符(如 Android 的 IMEI 或 iOS 的广告标识符)等。

基础代码:

import android.os.Build;
import android.provider.Settings;
import android.content.Context;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class DeviceFingerprint {

    // 获取设备指纹信息
    public static String getDeviceFingerprint(Context context) {
        StringBuilder fingerprint = new StringBuilder();

        // 获取设备的 Android ID
        String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        fingerprint.append(androidId);

        // 获取设备的序列号
        String serial = Build.SERIAL;
        fingerprint.append(serial);

        // 获取设备的硬件信息
        String hardware = Build.HARDWARE;
        fingerprint.append(hardware);

        // 获取设备的制造商和型号
        String manufacturer = Build.MANUFACTURER;
        String model = Build.MODEL;
        fingerprint.append(manufacturer).append(model);

        // 获取设备的唯一标识符
        String uniqueId = getUniqueId();
        fingerprint.append(uniqueId);

        // 对设备指纹信息进行哈希处理
        String hashedFingerprint = hashString(fingerprint.toString());

        return hashedFingerprint;
    }

    // 生成设备的唯一标识符
    private static String getUniqueId() {
        String uniqueId = "";
        try {
            // 获取设备的唯一标识符(可根据需求自定义)
            // 例如,可以使用 IMEI(需要权限)或其他标识符
            uniqueId = "YOUR_UNIQUE_ID";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return uniqueId;
    }

    // 对字符串进行哈希处理
    private static String hashString(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hashBytes = digest.digest(input.getBytes());
            StringBuilder stringBuilder = new StringBuilder();
            for (byte b : hashBytes) {
                stringBuilder.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
            }
            return stringBuilder.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        }
    }
}

以上。

如需要免费体验设备指纹:顶象设备指纹

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法与数据结构-数组

文章目录 什么是数组线性表连续的内存空间和相同类型的数据 为什么数组的插入和删除是低效的插入删除 容器与数组的区别 什么是数组 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 这个定义里有几…

Pytest自动化测试框架生成allure的报告

一、前言 最近通过群友了解到了allure这个报告,开始还不以为然,但还是逃不过真香定律。 经过试用之后,发现这个报告真的很好,很适合自动化测试结果的展示。下面说说我的探索历程吧。 选用的项目为Selenium自动化测试Pytest框架实…

IntelliJ IDEA彻底删除

我们在用idea的时候,idea的环境出现了莫名其妙的问题,怎么也找不到问题原因的时候可以试着把idea卸载重新安装。但是如果你卸载的时候没有删除干净注册表里的信息。就算再次安装回来也还是解决不了问题。 如何删除干净IDEA 将所有jetbrains软件关闭退出…

嵌入式软件工程师招聘

当您招聘嵌入式软件工程师时,以下是一些建议和关键要点,可以帮助您吸引和筛选合适的候选人: 职位描述:清晰地定义嵌入式软件工程师的职责和要求。包括对硬件和软件开发经验的要求、熟练掌握的编程语言(如C、C、Python等…

一文学会MoveIt Setup Assistant搭建moveit2机械臂模型

文章目录 前言一、MoveIt Setup Assistant 是什么?二、搭建步骤拉取相关repo创建项目文档编辑moveit_description文件夹编辑moveit_config文件夹 MoveIt Setup Assistant 配置Launch moveit_setup_assistant配置干涉关系配置planning groups配置ros2 controller配置…

一个 TCP 连接可以发送多少个 HTTP 请求

第一个问题 第二个问题 第三个问题 第四个问题 第五个问题 曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图…

优质高效!阿里内部超高质量的k8s+Jenkins笔记,技术与实战齐飞

什么是k8s? Kubernetes是一个用于容器集群的自动化部署、扩容以及运维的开源平台。 k8s孕育的初衷是培育出一个组件及工具的生态,帮助大家减轻在公有云及私有云上运行应用的负担,换言之,使得大型分布式应用的构建和运维变得更加简单&#…

⛳前端进阶:SEO 全方位解决方案

🌻 前言 SEO 代表搜寻引擎最佳化/搜寻引擎优化(英文全名Search Engine Optimization,简称SEO),是指通过了解搜寻引擎的自然排名的算法逻辑,以提高目标网站在有关搜寻引擎内排名的方式。 网站的 SEO 至关重要,它可以让…

基于springboot的大学外卖系统源码数据库

源码资源在这里 https://download.csdn.net/download/2301_76965813/87881744 1 系统分析 1.1 需求分析 该系统的开发,主要是用在了各个订餐网站的系统,用户可以通过网站进行外卖订餐的信息挂了,并能够对客户进行外卖菜品的订单提交等。该…

X509证书解析详解

上传的证书文件,如何判断这个证书是否满足X509标准格式的呢? 下面是我阅读jdk源码,总结出的解析步骤。 jdk版本:jdk11 方法的入口 这是整个方法的起点,下面的步骤是根据这里方法调用跟踪到的,需要注意的是…

100种思维模型之细节效率思维模型-74

提及细节效率?也许很多人会有疑问,“效率”怎么跟“细节”挂上钩,注重“细节”了,还能有“高率”? 是的,细节能提高效率,注意某些细节,效率事半功倍。 01、何谓细节效率思维模型 一…

truncate导致慢查询根因竟然是“多此一举”

基本信息: 线上一个库5.7.25库经常出现大量慢查询,在再次出现时登陆数据库进行分析,通过show engine innodb status 内容,发线程全部在等一个锁,这个锁极可能来源于这个truncate table动作: ---TRANSACTIO…

【Flutter】widgets (5) Flutter 理解 Flutter 的 Stateful Widget 有状态组件

文章目录 一、前言二、Stateful Widget三、StatefulWidget和State类的关系四、创建StatefulWidget五、完整代码示例六、总结一、前言 在之前的教程中,我们掌握了Stateless Widgets,也就是无状态组件的基本用法。 但是,应用程序不是静态不变的,我们需要界面中用户的操作,…

OCP浸没式液冷基本规范(概述和信号完整性部分)

液冷技术概述和浸没式液体标准化的需求 数据中心行业主要考虑两种类型的液体冷却技术来推动节能和可持续发展,分别是冷板式和浸没式,每一种技术里的液体又包含单相和双相两种规格: 冷板技术与浸没技术的主要区别之一是,在浸没的情…

操作系统原理 —— 什么是基本分页存储管理?(二十二)

在操作系统中,一个新的进程需要载入内存当中执行,在装入的时候需要给该进程分配一定的运行内存,在之前的章节中讲解了连续分配的几种方式,比如:单一连续分配、固定分区分配、动态分区分配,还讲解了对应的动…

MySQL表相关操作

一、存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 1、什么是存储引擎 mysql中建立的库 > 文件夹 库中建立的表 > 文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制&#x…

基于LPP算法实现MNIST数据集降维

目录 1、作者介绍2、LPP算法简介2.1 基本概念及原理2.2 算法流程 3、LPP算法实现3.1 数据集简介3.2 代码实现3.2.1 完整代码3.2.2 运行结果 4、参考链接 1、作者介绍 刘晨雨,男,西安工程大学电子信息学院,2022级研究生 研究方向:…

低代码开发重要工具:jvs-rules 规则引擎功能介绍(四)

一、策略管理 JVS-Rules采用业务与技术分离的思路,业务人员可以配置和业务相关的内容,可以不考虑底层变量的配置,只需要配置对业务的描述,具体实现的变量绑定可以由技术人员参与,这里就体现了技术与业务规则可以解耦。…

值得收藏的20张小学语文思维导图

思维导图不仅在我们的工作生活中起到越来越重要的作用,也在悄无声息中进入到了我们小学生的课堂。 有需要的家长赶快帮自家的宝贝收藏起来吧! 小学语文_ProcessOn思维导图流程图https://link.zhihu.com/?targethttps%3A//www.processon.com/template/s…

leetcode 二分查找小结

文章目录 题目34. 在排序数组中查找元素的第一个和最后一个位置240. 搜索二维矩阵378. 有序矩阵中第 K 小的元素287. 寻找重复数33. 搜索旋转排序数组 总结 题目 34. 在排序数组中查找元素的第一个和最后一个位置 原始思路: class Solution:def searchRange(self,…