1
dingwen07 2020-11-09 20:59:07 +08:00 via Android
我这 teamviewer id 会变,经常被退出登录
为什么要用唯一 ID ?除了作恶我想不到别的了 |
2
PUBG98k OP @dingwen07 如果你办公室里的电脑,下班之前,安装了 ToDesk,设置了开机自启动和无人值守密码.开开心心的回家了
因为其他原因,比如断电,系统自动更新或者你重启了下 回到家.想远程上去工作,ID 变了.无法连接怎么办呢? |
3
ho121 2020-11-09 21:13:41 +08:00 via Android
随机生成一个 uuid,然后写入注册表
|
7
dyv9 2020-11-09 21:21:51 +08:00 via Android
@ho121 好主意,就应该用户来指定 id,登录时自动映射设备与账户的关联,这和动态域名一样的思路。我们只需要在不存在缓存的设备编号时生成 uuid 然后缓存越来代表这个用户,在用户明确注销登录时才清空缓存,类似 cookie,不主动注销登录就不清空缓存。
|
8
phpc 2020-11-09 21:25:00 +08:00
把你提到的和楼上提到的这些东西拼接在一起?
|
9
PUBG98k OP |
10
3dwelcome 2020-11-09 21:43:44 +08:00 via Android
@PUBG98k 用户名密码在线登录,服务器是可以知道你有没有重复登录的。
服务器给客户端分配唯一 id,还不是轻而易举的事情。 |
11
PUBG98k OP @3dwelcome ID 要固定啊.只要这台电脑不重装的情况下,都要求 ID 固定才能满足我们的业务需求.
10 个数字 ID 对应 10 台电脑. 我全部都退出账号了,再登陆.如何确保原来哪台电脑是什么 ID.还是那个 ID. |
12
zsdroid 2020-11-09 22:44:09 +08:00
登录生成 uuid,写入文件。每次打开软件时联网校验 uuid 是否重复,重复了重新生成。
|
13
mcone 2020-11-09 22:58:18 +08:00
@PUBG98k 既然你都有账号系统了,你每次新设备登录的时候,让用户自己选 /服务器强行分配一个目前可使用的独一无二 ID 不就行了……
理论上说,只要用户全心想作恶,你用 mac/序列号 /cpu 都没用,作恶设备的 ID 只能用过服务器鉴权后重新分配才能达到你的效果 |
14
Greatshu 2020-11-09 23:01:05 +08:00
一样的 UUID 没关系,服务器限制同样 UUID 不能同时登陆就行,登录总有先后的
|
15
PUBG98k OP |
16
supermoonie 2020-11-09 23:15:00 +08:00 via iPhone
oshi 里有生成机器码的 demo
|
17
nuk 2020-11-09 23:18:07 +08:00
onetime key, 每次连接到服务器分配下一次连接的 key,如果 key 已经被用过,就分配一个新的 ID
|
18
GM 2020-11-09 23:24:51 +08:00
给你 TV 在 Mac 下的大概做法做参考:
第一次启动,生成唯一 ID,存入特定位置,以后永远都用这个 ID,除非手动清除掉存储的信息。 Ghost 问题: Ghost 之前,删掉之前生成的信息再 Ghost,下次系统启动后会发现这是全新的系统,走上面的流程。 如果没删掉就 Ghost,新系统会冲突导致登录不上,新系统不会上线,不干扰之前的系统。 |
19
cz5424 2020-11-09 23:33:56 +08:00 via iPhone
服务端分配后,写入本地的某个位置,启动后校验一下 id 是不是服务端生成的,不是就重新分配
|
20
3dwelcome 2020-11-09 23:39:43 +08:00 via Android
@PUBG98k id 固定就必然要存到磁盘上,存到磁盘上就必然会遇到 ghost,所以不能用静态 id 。
只要能联局域网,就直接根据网络出口路径 tracert,分配一个动态 id 就可以了。 除非网络环境变了,本机 ip 变了(比如 ghost 了一个虚拟机)就需要用户强制登录一次,再分配一个新 id 。 |
21
PUBG98k OP |
22
jim9606 2020-11-09 23:44:03 +08:00
Teamviewer 只认网卡 MAC,所以很多绕过商用限制的方法都是靠改 MAC 实现的。
CPU 印象里没有***公开的***获取 PSN 的方法,因为部分国家明令禁止部署这种技术。 比较合理的做法是通过 SMBIOS 读主板的 Serial Number,就算是虚拟机也有这玩意的。 |
23
PUBG98k OP @3dwelcome 您这样的话没有办法的.同一个公司的好多台电脑 出口 tracert 基本都一样.而且很多人都是 dhcp 自动从路由器获取内网 IP 呀.肯定是变的.
|
24
PUBG98k OP @jim9606 主板的 Serial Number 我查阅了资料了.目前是不唯一的.
是生产批号.同一批号下来的基本上都是一样的 Serial Number. 这样就会造成 企业批量采购的相同配置的 PC 设备 存在大量重复的 主板 Serial Number |
25
Lemeng 2020-11-09 23:48:42 +08:00
来学习学习的
|
27
crclz 2020-11-09 23:55:15 +08:00
别指望把所有破解方法都防住。你防不住逆向工程。
|
29
3dwelcome 2020-11-10 00:01:43 +08:00 via Android
@PUBG98k 我又没让你用本机的动态 ip 算 id,用 mac 啊。
之所以还要加上 tracert,是因为同一个出口路由下只能有一个 mac,如果有别人恶意修改,导致重复,那就变成了局域网 apr 投毒,网速会很慢的,得不偿失。 |
30
xuanbg 2020-11-10 00:03:21 +08:00 1
客户端产生一个唯一 ID 保存在本地即可。如果是虚拟机克隆导致重复,那么可以和服务端做一个验证。如果 ID 存在,那就重新生成一个并重新验证,如果验证成功就覆盖掉本地的那个。
|
31
jim9606 2020-11-10 00:03:42 +08:00
@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 ) |
32
xcstream 2020-11-10 01:01:17 +08:00
题目是 生成绝对唯一的 识别码
那么答案很明确 不存在 |
33
dai640 2020-11-10 01:19:13 +08:00
ghost 系统不是按当前日期吗?
|
34
laminux29 2020-11-10 03:12:19 +08:00
1.计算机没有唯一 ID 一说。有些设备能拿到唯一 ID,有些设备能拿到名字。业界的做法是,把能拿到的 ID + 名字,联合起来当做唯一 ID 。
2.远程桌面类软件,主流的无人值守有两种形式。第一种是每次打开后,会生成一个新 ID 与临时密码,通过这个 ID 与临时密码进行远程控制,但电脑重启后或软件重启后,ID 与临时密码会更新;第二种是登陆账号后,直接使用账号+密码进行远程控制,这种就算是软件或电脑重启,也不会更新。 如果你是希望稳定远程控制,通过第二种方式就行。 3.如果你是 ToDesk 这类应用商,来防止用户一个账号多开,你应该去看防止重复登录与防止重复在线的技术。这类技术不难,无非是利用令牌或服务器端开长连接来实现。 |
35
msg7086 2020-11-10 06:05:01 +08:00 2
光靠操作系统,做不到。
很简单的做法,开个虚拟机,登录你的系统,然后关机做个快照,在快照上起两台一模一样的虚拟机,那他们一定能拿到重复的识别码。SMBIOSID 是可以不唯一的,同理 MAC 也可以相同。起来的两台虚拟机就是完全一样的。 |
36
savasun 2020-11-10 06:10:21 +08:00
SLI
|
37
savasun 2020-11-10 06:13:00 +08:00
@savasun 黑苹果系统要往主板注入 SLI,CPU 有些用户换得多、换内存,硬盘啥的也很常见。只有获取主板 SLI 版号可以达到你想要的效果。
|
38
widewing 2020-11-10 06:17:28 +08:00 via Android
想个办法存 cmos?
|
39
kokutou 2020-11-10 07:26:18 +08:00 via Android
procmon 监控下 teamviewer
|
40
sneezry 2020-11-10 08:01:13 +08:00 via iPhone
|
41
xiangyuecn 2020-11-10 09:10:35 +08:00
同 Android 里面某些 app,win 、mac 同样往根目录拉屎就完了,多拉几个地方多拉几坨,隐藏起来
|
42
cigarzh 2020-11-10 09:23:02 +08:00
device fingerprint 是个很大的坑,
建议造不如买 |
43
3dwelcome 2020-11-10 09:26:33 +08:00
@msg7086 "同理 MAC 也可以相同。起来的两台虚拟机就是完全一样的。"
这个分两种情况,第一种是一台设备上,同时启动两个 MAC 一模一样的虚拟机,由于 IP 包的转发依赖的是 MAC 地址,理论上多开会遇到问题。 第二种是先把旧虚拟机关闭,只用新镜像虚拟机启动,MAC 一样,这情况应该允许客户被识别为一个 ID 。因为没有同时多开。 |
44
kuro1 2020-11-10 10:14:18 +08:00
硬盘序列号?
|
45
DoctorCat 2020-11-10 10:41:20 +08:00
方向不对,努力白费。
|
48
gkuchan 2020-11-10 11:15:45 +08:00
我研究过这个问题,采用的方案是:uuid+mac
1. uuid 在不用的 vm 上面可以保证不一致,这个是云服务商保证的。从 snapshot 创建的 vm 也不一致。 wmic path win32_computersystemproduct get uuid 2. mac 地址主要用于区分 container,要注意,每一台机器上的 container 的 mac 地址都是从同一个地址开始增长的 |
49
Greatshu 2020-11-10 11:45:03 +08:00
在显示相同 UUID 不能同时登录的同时,每次登录时返回一个时间戳,只有拥有服务器中记录的最新时间戳的才能够登录。否则当新设备处理,生成新的 UUID 。
|
51
no1xsyzy 2020-11-10 11:48:38 +08:00
|
53
newmlp 2020-11-10 12:20:40 +08:00
tv 是根据网卡 mac 地址生成的
|
55
fuxiuyin 2020-11-10 12:54:13 +08:00
生成一个塞 TPM 里面存?不过 TPM 也能清空重来。看上去需要标识的不是计算机,是要标识默认的某台计算机,而不管这台计算机是不是唯一的。比如办公室,家总共有 4 台设备,想要的是在其他地方比如地铁上能连上家里 /办公室的某一台机器,而不管这台机器有没有被人换过硬盘 /CPU/内存或者直接换了一台新的是吗?这样看起来应该让用户在新设备上登录的时候给设备取别名比如名字叫"家_卧室_NAS_VM01",然后连接的时候列出来用户所有注册并且现在在线的设备,然后选一个连接。对于 GHOST 和复制的 VM,你们是想免登陆吗?就是说第一台设备已经登陆了 ToDesk,然后做了一个 GHOST 或者 VMware 镜像,复制出来一个出来之后能直接把设备注册上而不用用户进入系统之后重新登录 ToDesk 吗?如果是的话那就客户端上报名称然后服务器发现冲突的名称之后在后面加 01,02,03 ;比如已经登陆了一个 VM 叫"VM",然后复制了 10 个并且都启动起来了,那服务器就给他们叫"VM01","VM02","VM03"...用户连接的时候列表里面显示"VM","VM01","VM02"...
|
56
YUCOAT 2020-11-10 13:13:43 +08:00
如果需要严格唯一的话,唯一的办法就是让服务端生成 id 并且存入本地。然后每次启动的时候,去服务端校验一下自己是不是唯一,如果是唯一就把时间存本地,并且今日内启动都不再校验。如果不唯一就让服务单重新分配一个 id 并存入本地。
|
57
UN2758 2020-11-10 13:55:55 +08:00
要绝对唯一,首先得假设客户端不可信,那么验证工作全在服务端完成,前面大佬提到服务端发凭证,每次做冲突检测挺好的
|
58
FaiChou 2020-11-10 15:28:48 +08:00
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 ``` 希望能帮到你 |
59
PUBG98k OP |
60
PUBG98k OP @zouri 不能重新下发一个.因为考虑到这种场景..
我无人值守的设备,安装好了,我记录下来了我的 id. 我就离开了,等我需要的时候我直接连我记录的 id. 如果重新下发了,那人家不是又要跑到现场看原因.无法远程连接了 |
61
PUBG98k OP @FaiChou 感谢大佬回复.mac 目前我们用的是 IOPlatformSerialNumber+UUID+MAC
但是有些人使用无线网卡,mac 会经常变.所以 mac 打算去掉了 |
62
fuxiuyin 2020-11-10 16:22:26 +08:00 via iPhone
@PUBG98k 如果不登陆的话 TV 那种也不保证一直用一样的 ID 连上,TV 在处理这个问题的时候是让用户登陆然后列出来所有在线机器,用 ID 连接的也只目标在一次性远程协助。我觉得处理不完,比如用户电脑坏了,整个主机都换了就剩下硬盘没换,修好的电脑还在他办公桌上放着,他还想接着在家用相同的 ID 连上。或者彻底坏了,IT 给了一台新机器,IT 标准化以完成后放到了这个员工桌子上连上网,然后这个员工在家试了下说原来的 ID 用 ToDesk 连不上。不过有有效范围内的解决方案,比如在公司这种场景下每个人的员工账号是固定的,然后电脑入域之后可以给电脑一个{员工账号-01}.{公司域名}的机器名,然后就不换电脑硬件如何的固定下来的。依赖于办公场景加域,其实相当于一个登陆。
|
63
icyalala 2020-11-10 16:37:44 +08:00
设备指纹的原理是这样的:
收集若干标识符,比如 CPU 序列号、磁盘序列号、主板序列号、Mac 地址、显卡、内存、系统安装时间、内存大小、已安装字体、系统版本等等,加密后上报服务端,服务端生成一个唯一标识符下发。 后续当再次启动时,重新发送这数据,如果其中只有某几项发生变化,那仍然可以匹配到原有设备(也就是召回)。 |
64
kokutou 2020-11-10 17:06:52 +08:00
|
65
lxz6597863 2020-11-10 17:12:55 +08:00
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_MACHINE\SOFTWARE\Microsoft\Cryptography /v MachineGuid ------------------- 参考 https://github.com/denisbrodbeck/machineid |
66
THESDZ 2020-11-10 17:44:38 +08:00
这不就是证书吗?
|