排错实战 | 授权码不知道被谁占用了?不可能的,这辈子都是不可能的

缘起

相信大家应该都接触过授权码。我们开发时用的程序也需要授权码才能使用,而且一个授权码每次只能在一台机器上激活。当授权码被占用时,会提示授权被某某机器占用了,只有占用授权码的同事迁出后,其它同事才能用。由于某些同事的机器名是随机的字符,不能很快知道是哪位同事在占用授权码。每次遇到授权码被占用的情况,只能在公司群里问,效率特别低。于是,我提意大家把机器名改成自己名字缩写,这样就可以直接知道是哪位同事在占用授权码。万万没想到,单纯修改机器名不好使。不好使是不可能的,这辈子都不可能的。安排!

授权码被占用

授权码被占用的错误提示如下图:

无法从提示中看出是哪位同事在占用,只能知道授权码是在名为 PC-20180726BIMU 的机器上激活的。

着手调查

猜测可能会连接服务器进行激活(左侧的在线激活选项是选中状态)。首先想到使用 wireshark 抓包,但是目前并不知道激活服务器地址及通信端口号,需要先使用 process monitor 进行定位。轻车熟路的打开 process monitor,很快就拿到了关键的记录。

虽然从图中可以知道服务器地址、端口号等信息,但是在 process monitor 中并不能看到具体的通信内容。由于使用的是 http 协议,可以尝试使用 Wireshark 抓个包看看(要是 https 我就直接放弃了),万一能看出点什么呢。使用 wireshark 抓好包后,查看通信内容。虽然使用的是 http 协议,但是关键信息被加密了,没发现什么线索。只能另寻他路了。想了一会,没想到好办法,逆向是不可能逆向的(我只是想知道为什么提示的机器名不是修改后的机器名,而不是要破解)。看来只能……

猜猜猜

其实,从开始排查之前就在猜。最开始的猜想是:授权信息记录在激活机器的注册表或者配置文件中。但是仔细想想又不太合理,如果占用授权码的机器关机了呢?岂不是没法获取相关信息了?

如果没记录在激活机器上,那相关信息应该记录在授权服务器上了。会记录哪些信息呢?显然应该记录了机器名。如果机器名重名了呢?应该还会存储一个硬件信息用来区分不同机器。这个硬件信息可能是 mac 地址或者是 cpuid。当然,还有可能是其它硬件信息。

柿子挑软的捏,显然修改 mac 地址是最方便的。在网上找了一个修改 mac 地址的工具(下载地址 https://technitium.com/tmac/),修改 mac 地址并且修改机器名后,重新使用授权码激活(目的是更新服务器端存储的机器名等信息)。激活后,先不迁出授权码,接着在另外一台机器上输入相同的授权码进行激活,会报授权码被 xxx 占用。从错误提示可知,占用授权码的机器名是修改后的机器名。由此可基本确认服务器应该是通过 mac 地址来区分不同机器的。

批量应用

有了上面的结论,就可以让大家依葫芦画瓢进行处理 —— 修改 mac 地址并重新使用授权码激活一次。终于,可以一眼找出占用授权码的同事了,直接联系他(她)迁出即可。

只改机器名为什么不好使

猜测,如果 mac 地址没发生变化的话,激活授权码的时候不会更新服务器上的激活信息。修改 mac 后,由于之前没有对应的 mac 信息,会新增一条记录。看来激活服务器上应该只有增加的逻辑,没有修改的逻辑?这个只是我的大胆猜测,没有证据。

总结

虽然这次遇到的问题比较简单,但是对平时工作确实会有一点点影响,不解决也可以,解决了会更舒畅。我真是个强迫症患者。

有时候,遇到问题不一定非要把问题的来龙去脉弄清楚,猜测 + 实际验证也许会更高效。

BianChengNan wechat
扫描左侧二维码关注公众号,扫描右侧二维码加我个人微信:)
0%