跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 获取计算机唯一识别码的问题,有大佬有经验吗?
未分類
12 11 月 2020

获取计算机唯一识别码的问题,有大佬有经验吗?

获取计算机唯一识别码的问题,有大佬有经验吗?

資深大佬 : PUBG98k 13

Windows,macOS.下
如何给计算机 生成绝对唯一的 识别码.类似 Teamviewer 的 ID.
————
需要考虑到 VMWARE 系统,以及服务器 云机.Ghost 系统.
————
目前 ToDesk 使用的是:
uuid+mac,但是依然还是不行.
—
uuid 在 ghost 系统会重复,mac 地址重复.

系统安装时间,Win10 在更新补丁的时候,会更改.

硬盘序列号,在 vmware 的系统里是没有硬盘序列号的.
cpu 序列号 也是不唯一了.现在都改成生产批号了.

服务器系统又没有鼠标键盘显卡可以获取唯一码.
蛋疼~~~

大佬有話說 (66)

  • 資深大佬 : dingwen07

    我这 teamviewer id 会变,经常被退出登录
    为什么要用唯一 ID ?除了作恶我想不到别的了

  • 主 資深大佬 : PUBG98k

    @dingwen07 如果你办公室里的电脑,下班之前,安装了 ToDesk,设置了开机自启动和无人值守密码.开开心心的回家了
    因为其他原因,比如断电,系统自动更新或者你重启了下
    回到家.想远程上去工作,ID 变了.无法连接怎么办呢?

  • 資深大佬 : ho121

    随机生成一个 uuid,然后写入注册表

  • 資深大佬 : 3dwelcome

    @PUBG98k 不用唯一 id,用账号密码在线登录就可以。

  • 主 資深大佬 : PUBG98k

    @ho121 安装好了 todesk 生成 id 的.然后 Ghost 系统呢?注册表就一样了

  • 主 資深大佬 : PUBG98k

    @3dwelcome 一个账号密码是可以登陆多台电脑的.

  • 資深大佬 : dyv9

    @ho121 好主意,就应该用户来指定 id,登录时自动映射设备与账户的关联,这和动态域名一样的思路。我们只需要在不存在缓存的设备编号时生成 uuid 然后缓存越来代表这个用户,在用户明确注销登录时才清空缓存,类似 cookie,不主动注销登录就不清空缓存。

  • 資深大佬 : phpc

    把你提到的和上提到的这些东西拼接在一起?

  • 主 資深大佬 : PUBG98k

    @dyv9 不能的,同一个账号下,如果有 10 台电脑.
    我应该用什么来区别,我这个 ID 是绑定在某个电脑上的.
    以什么特征来区别.这就回到我的问题上去了.

  • 資深大佬 : 3dwelcome

    @PUBG98k 用户名密码在线登录,服务器是可以知道你有没有重复登录的。
    服务器给客户端分配唯一 id,还不是轻而易举的事情。

  • 主 資深大佬 : PUBG98k

    @3dwelcome ID 要固定啊.只要这台电脑不重装的情况下,都要求 ID 固定才能满足我们的业务需求.
    10 个数字 ID 对应 10 台电脑.
    我全部都退出账号了,再登陆.如何确保原来哪台电脑是什么 ID.还是那个 ID.

  • 資深大佬 : zsdroid

    登录生成 uuid,写入文件。每次打开软件时联网校验 uuid 是否重复,重复了重新生成。

  • 資深大佬 : mcone

    @PUBG98k 既然你都有账号系统了,你每次新设备登录的时候,让用户自己选 /服务器强行分配一个目前可使用的独一无二 ID 不就行了……

    理论上说,只要用户全心想作恶,你用 mac/序列号 /cpu 都没用,作恶设备的 ID 只能用过服务器鉴权后重新分配才能达到你的效果

  • 資深大佬 : Greatshu

    一样的 UUID 没关系,服务器限制同样 UUID 不能同时登陆就行,登录总有先后的

  • 主 資深大佬 : PUBG98k

    @mcone 很多用户是企业用户.他们一个账号下几百台设备的..

    @zsdroid 如果生成在本机,然后 Ghost 的系统镜像,再去拿这个镜像去装别的电脑.2 台电脑就一样了.

  • 資深大佬 : supermoonie

    oshi 里有生成机器码的 demo

  • 資深大佬 : nuk

    onetime key, 每次连接到服务器分配下一次连接的 key,如果 key 已经被用过,就分配一个新的 ID

  • 資深大佬 : GM

    给你 TV 在 Mac 下的大概做法做参考:

    第一次启动,生成唯一 ID,存入特定位置,以后永远都用这个 ID,除非手动清除掉存储的信息。

    Ghost 问题:
    Ghost 之前,删掉之前生成的信息再 Ghost,下次系统启动后会发现这是全新的系统,走上面的流程。
    如果没删掉就 Ghost,新系统会冲突导致登录不上,新系统不会上线,不干扰之前的系统。

  • 資深大佬 : cz5424

    服务端分配后,写入本地的某个位置,启动后校验一下 id 是不是服务端生成的,不是就重新分配

  • 資深大佬 : 3dwelcome

    @PUBG98k id 固定就必然要存到磁盘上,存到磁盘上就必然会遇到 ghost,所以不能用静态 id 。
    只要能联局域网,就直接根据网络出口路径 tracert,分配一个动态 id 就可以了。
    除非网络环境变了,本机 ip 变了(比如 ghost 了一个虚拟机)就需要用户强制登录一次,再分配一个新 id 。

  • 主 資深大佬 : PUBG98k

    @GM 我做过实验.tv 在 安装后启动.然后在 ghost.
    拿这个 ghost 去重装系统.第一次启动后 ID 居然不一样.可以正常连接
    也不会跟 ghost 之前的 id 重复
    无论怎么重启都一个 id 不变.

  • 資深大佬 : jim9606

    Teamviewer 只认网卡 MAC,所以很多绕过商用限制的方法都是靠改 MAC 实现的。
    CPU 印象里没有***公开的***获取 PSN 的方法,因为部分国家明令禁止部署这种技术。
    比较合理的做法是通过 SMBIOS 读主板的 Serial Number,就算是虚拟机也有这玩意的。

  • 主 資深大佬 : PUBG98k

    @3dwelcome 您这样的话没有办法的.同一个公司的好多台电脑 出口 tracert 基本都一样.而且很多人都是 dhcp 自动从路由器获取内网 IP 呀.肯定是变的.

  • 主 資深大佬 : PUBG98k

    @jim9606 主板的 Serial Number 我查阅了资料了.目前是不唯一的.
    是生产批号.同一批号下来的基本上都是一样的 Serial Number.
    这样就会造成 企业批量采购的相同配置的 PC 设备 存在大量重复的 主板 Serial Number

  • 資深大佬 : Lemeng

    来学习学习的

  • 主 資深大佬 : PUBG98k

    @jim9606 ghost 的话,或者 vmware 复制的系统.mac,uuid,系统安装时间,都是重复的.

  • 資深大佬 : crclz

    别指望把所有破解方法都防住。你防不住逆向工程。

  • 資深大佬 : nuk

    @PUBG98k mac 地址加 onetime key,基本上和 tv 一样了啊。。

  • 資深大佬 : 3dwelcome

    @PUBG98k 我又没让你用本机的动态 ip 算 id,用 mac 啊。
    之所以还要加上 tracert,是因为同一个出口路由下只能有一个 mac,如果有别人恶意修改,导致重复,那就变成了局域网 apr 投毒,网速会很慢的,得不偿失。

  • 資深大佬 : xuanbg

    客户端产生一个唯一 ID 保存在本地即可。如果是虚拟机克隆导致重复,那么可以和服务端做一个验证。如果 ID 存在,那就重新生成一个并重新验证,如果验证成功就覆盖掉本地的那个。

  • 資深大佬 : jim9606

    @PUBG98k 个人觉得不要在虚拟机唯一 ID 上费神,因为 VMM 总有办法骗过你的检测。
    如果是你的控制下的虚拟机和系统镜像:
    vmware 要用模板克隆模式且在导入导入虚拟机时要选择“复制了虚拟机”使 UUID 重置( https://kb.vmware.com/s/article/1541);
    windows 镜像在生成前要运行 sysprep ( https://docs.microsoft.com/zh-cn/windows-hardware/manufacture/desktop/sysprep–generalize–a-windows-installation )

  • 資深大佬 : xcstream

    题目是 生成绝对唯一的 识别码
    那么答案很明确 不存在

  • 資深大佬 : dai640

    ghost 系统不是按当前日期吗?

  • 資深大佬 : laminux29

    1.计算机没有唯一 ID 一说。有些设备能拿到唯一 ID,有些设备能拿到名字。业界的做法是,把能拿到的 ID + 名字,联合起来当做唯一 ID 。

    2.远程桌面类软件,主流的无人值守有两种形式。第一种是每次打开后,会生成一个新 ID 与临时密码,通过这个 ID 与临时密码进行远程控制,但电脑重启后或软件重启后,ID 与临时密码会更新;第二种是登陆账号后,直接使用账号+密码进行远程控制,这种就算是软件或电脑重启,也不会更新。

    如果你是希望稳定远程控制,通过第二种方式就行。

    3.如果你是 ToDesk 这类应用商,来防止用户一个账号多开,你应该去看防止重复登录与防止重复在线的技术。这类技术不难,无非是利用令牌或服务器端开长连接来实现。

  • 資深大佬 : msg7086

    光靠操作系统,做不到。

    很简单的做法,开个虚拟机,登录你的系统,然后关机做个快照,在快照上起两台一模一样的虚拟机,那他们一定能拿到重复的识别码。SMBIOSID 是可以不唯一的,同理 MAC 也可以相同。起来的两台虚拟机就是完全一样的。

  • 資深大佬 : savasun

    SLI

  • 資深大佬 : savasun

    @savasun 黑苹果系统要往主板注入 SLI,CPU 有些用户换得多、换内存,硬盘啥的也很常见。只有获取主板 SLI 版号可以达到你想要的效果。

  • 資深大佬 : widewing

    想个办法存 cmos?

  • 資深大佬 : kokutou

    procmon 监控下 teamviewer

  • 資深大佬 : sneezry

    https://docs.microsoft.com/en-gb/windows-hardware/drivers/install/specifying-hardware-ids-for-a-computer

  • 資深大佬 : xiangyuecn

    同 Android 里面某些 app,win 、mac 同样往根目录拉屎就完了,多拉几个地方多拉几坨,隐藏起来

  • 資深大佬 : cigarzh

    device fingerprint 是个很大的坑,
    建议造不如买

  • 資深大佬 : 3dwelcome

    @msg7086 “同理 MAC 也可以相同。起来的两台虚拟机就是完全一样的。”
    这个分两种情况,第一种是一台设备上,同时启动两个 MAC 一模一样的虚拟机,由于 IP 包的转发依赖的是 MAC 地址,理论上多开会遇到问题。
    第二种是先把旧虚拟机关闭,只用新镜像虚拟机启动,MAC 一样,这情况应该允许客户被识别为一个 ID 。因为没有同时多开。

  • 資深大佬 : kuro1

    硬盘序列号?

  • 資深大佬 : DoctorCat

    方向不对,努力白费。

  • 資深大佬 : zouri

    @Greatshu 这个靠谱,出现相同的之后强制掉线一个,或者重新下发一个 uuid

  • 資深大佬 : msg7086

    @3dwelcome MAC 冲突只会出现在单个物理连接上(不论是真物理还是虚拟物理)。
    前面各加一级交换机就没事了。

  • 資深大佬 : gkuchan

    我研究过这个问题,采用的方案是:uuid+mac

    1. uuid 在不用的 vm 上面可以保证不一致,这个是云服务商保证的。从 snapshot 创建的 vm 也不一致。

    wmic path win32_computersystemproduct get uuid

    2. mac 地址主要用于区分 container,要注意,每一台机器上的 container 的 mac 地址都是从同一个地址开始增长的

  • 資深大佬 : Greatshu

    在显示相同 UUID 不能同时登录的同时,每次登录时返回一个时间戳,只有拥有服务器中记录的最新时间戳的才能够登录。否则当新设备处理,生成新的 UUID 。

  • 資深大佬 : Greatshu

    @Greatshu #49 显示–>限制

  • 資深大佬 : no1xsyzy

    @msg7086 MAC 冲突会发生在同一个以太网上吧……
    要加路由器的吧
    ——
    我觉得这是个 XY 问题
    你先讲清楚为什么要唯一识别码?
    就是 Windows10 自动在线授权都只管主板 ID

  • 資深大佬 : no1xsyzy

    @Greatshu 类似乐观锁么,诶刚才就差一步想到的,冷得想不起来了……

  • 資深大佬 : newmlp

    tv 是根据网卡 mac 地址生成的

  • 資深大佬 : msg7086

    @no1xsyzy 啊对,应该是路由器。脑抽了。

  • 資深大佬 : fuxiuyin

    生成一个塞 TPM 里面存?不过 TPM 也能清空重来。看上去需要标识的不是计算机,是要标识默认的某台计算机,而不管这台计算机是不是唯一的。比如办公室,家总共有 4 台设备,想要的是在其他地方比如地铁上能连上家里 /办公室的某一台机器,而不管这台机器有没有被人换过硬盘 /CPU/内存或者直接换了一台新的是吗?这样看起来应该让用户在新设备上登录的时候给设备取别名比如名字叫”家_卧室_NAS_VM01″,然后连接的时候列出来用户所有注册并且现在在线的设备,然后选一个连接。对于 GHOST 和复制的 VM,你们是想免登陆吗?就是说第一台设备已经登陆了 ToDesk,然后做了一个 GHOST 或者 VMware 镜像,复制出来一个出来之后能直接把设备注册上而不用用户进入系统之后重新登录 ToDesk 吗?如果是的话那就客户端上报名称然后服务器发现冲突的名称之后在后面加 01,02,03 ;比如已经登陆了一个 VM 叫”VM”,然后复制了 10 个并且都启动起来了,那服务器就给他们叫”VM01″,”VM02″,”VM03″…用户连接的时候列表里面显示”VM”,”VM01″,”VM02″…

  • 資深大佬 : YUCOAT

    如果需要严格唯一的话,唯一的办法就是让服务端生成 id 并且存入本地。然后每次启动的时候,去服务端校验一下自己是不是唯一,如果是唯一就把时间存本地,并且今日内启动都不再校验。如果不唯一就让服务单重新分配一个 id 并存入本地。

  • 資深大佬 : UN2758

    要绝对唯一,首先得假设客户端不可信,那么验证工作全在服务端完成,前面大佬提到服务端发凭证,每次做冲突检测挺好的

  • 資深大佬 : FaiChou

    Sip(macOS 上取色工具)的作者是这么给我回复的:

    “`
    Hey,

    I can give you a light how this works

    1) We use the kIOPlatformSerialNumberKey, basically this identifies a machine, the only way the user change this is by changing the board
    2) We made some changes to this serial number, basically using some function in CryptoKit and some private keys
    3) Then we save that transformed and some data locally and remote
    4) Everytime a user open Sip, sip try validate that data, a check if the hash saved locally is different in the server, if that’s different, that means something changed in local, so we delete everything and the user need to start again, will need to enter the license, like you deleted the app
    5) We have some algorithms to handle some edge cases, like what if the user dent have internet, what if sip servers are down etc

    Hope this helps you
    “`

    希望能帮到你

  • 主 資深大佬 : PUBG98k

    @fuxiuyin
    @Greatshu
    @laminux29
    许多情况下用户并不登录.但是也要保证 ID 不同,而且不变.以便于别人随时可以控制.即便重启系统.
    ID 也不能变.

  • 主 資深大佬 : PUBG98k

    @zouri 不能重新下发一个.因为考虑到这种场景..
    我无人值守的设备,安装好了,我记录下来了我的 id.
    我就离开了,等我需要的时候我直接连我记录的 id.
    如果重新下发了,那人家不是又要跑到现场看原因.无法远程连接了

  • 主 資深大佬 : PUBG98k

    @FaiChou 感谢大佬回复.mac 目前我们用的是 IOPlatformSerialNumber+UUID+MAC
    但是有些人使用无线网卡,mac 会经常变.所以 mac 打算去掉了

  • 資深大佬 : fuxiuyin

    @PUBG98k 如果不登陆的话 TV 那种也不保证一直用一样的 ID 连上,TV 在处理这个问题的时候是让用户登陆然后列出来所有在线机器,用 ID 连接的也只目标在一次性远程协助。我觉得处理不完,比如用户电脑坏了,整个主机都换了就剩下硬盘没换,修好的电脑还在他办公桌上放着,他还想接着在家用相同的 ID 连上。或者彻底坏了,IT 给了一台新机器,IT 标准化以完成后放到了这个员工桌子上连上网,然后这个员工在家试了下说原来的 ID 用 ToDesk 连不上。不过有有效范围内的解决方案,比如在公司这种场景下每个人的员工账号是固定的,然后电脑入域之后可以给电脑一个{员工账号-01}.{公司域名}的机器名,然后就不换电脑硬件如何的固定下来的。依赖于办公场景加域,其实相当于一个登陆。

  • 資深大佬 : icyalala

    设备指纹的原理是这样的:

    收集若干标识符,比如 CPU 序列号、磁盘序列号、主板序列号、Mac 地址、显卡、内存、系统安装时间、内存大小、已安装字体、系统版本等等,加密后上报服务端,服务端生成一个唯一标识符下发。

    后续当再次启动时,重新发送这数据,如果其中只有某几项发生变化,那仍然可以匹配到原有设备(也就是召回)。

  • 資深大佬 : kokutou

    @PUBG98k #60
    无线网卡 mac 地址也是固定的啊.
    除非他一直换不同的无线网卡.

    或者说获取的 mac 不对, 是那个 “针对此网络使用随机硬件地址” 产生的随机地址…

  • 資深大佬 : lxz6597863

    BSD:

    cat /etc/hostid
    # or (might be empty)
    kenv -q smbios.system.uuid

    Linux:

    cat /var/lib/dbus/machine-id
    # or when not found (e.g. Fedora 20)
    cat /etc/machine-id

    OS X:

    ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID

    Windows:

    reg query HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptography /v MachineGuid

    ——————-
    参考 https://github.com/denisbrodbeck/machineid

  • 資深大佬 : THESDZ

    这不就是证书吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具