使用Python解決Teamviewer被誤認為商業用途的問題
Teamviewer會根據一套算法檢測當前是否用於商業用途,可能根據在線時間,是否跨網段遠程訪問,當前操作系統是否為專業或企業版,以及其他因素進行檢測,具體算法不得而知,不過有時明明只是個人非盈利目的使用,卻彈出下面的對話框,在1到5分鐘後就會自動斷開,然後就連不上了,觸發重新運行Teamviewer。
其實解決這個問題也很簡單,Teamviewer是怎麽知道哪臺機器疑似商業用途的呢?為什麽每次運行Teamviewer,密碼每次都不一樣,但ID是一樣的呢?
如下圖,這是Teamviewer的主界面。之所以Teamviewer能控制每一個客戶端,是因為ID已經與本機綁定。
ID通常與本機的Mac地址(網卡的地址)以及其他信息有關(如配置文件中的屬性值),不同操作系統不同。本文將通過Python語言自動修改這個ID,只要ID改變了,即使被識別出了商業用途,再次啟動,由於ID已經改變,就相當於重新在一臺全新的機器上運行,再識別出商業用途,再改變一次ID就可以了。
本文解決Mac版本的Teamviewer的疑似商業用途問題,Windows版的問題請見本文最後的部分。
本文使用Python 2.7編寫,為什麽使用Python 2.7呢,因為本文的讀者並不都是Python程序員,Mac OS X默認自帶Python 2.7,所以直接就可以運行本文提供的腳本。如果讀者機器上安裝了Python 3.x,請切換到Python 2.7,然後再運行本文提供的腳本。建議讀者使用Anaconda,這樣可以很容易地在Python 2.7和Python 3.x之間切換。
其實更改ID的基本原理就是必須要用root權限執行腳本(在普通用戶狀態使用sudo切換到root權限),然後獲取當前用戶對應的目錄,刪除一些配置文件,然後修改一些配置文件中的ID值。具體的文件和操作直接看後面的代碼吧。
import sys import os import glob import platform import re import random import string print(‘‘‘ -------------------------------- 修改Teamviewer for Mac的ID -------------------------------- ‘‘‘) # 必須是Mac系統,否則本腳本無效 if platform.system() != ‘Darwin‘: print(‘必須是MAC OS X系統.‘) sys.exit(); if os.geteuid() != 0: print(‘必須用root權限執行腳本.‘) sys.exit(); # 如果在root權限,os.environ[‘SUDO_USER‘]返回用戶名,如lining if os.environ.has_key(‘SUDO_USER‘): USERNAME = os.environ[‘SUDO_USER‘] if USERNAME == ‘root‘: print(‘請通過sudo命令切換到root權限‘) sys.exit(); else: print(‘請通過sudo命令切換到root權限‘) sys.exit(); # 下面兩個目錄是要搜索包含teamviewer字樣的文件 HOMEDIRLIB = ‘/Users/‘ + USERNAME + ‘/library/preferences/‘ GLOBALLIB = ‘/library/preferences/‘ CONFIGS = [] # 獲取配置文件的完全路徑 def listdir_fullpath(d): return [os.path.join(d, f) for f in os.listdir(d)] for file in listdir_fullpath(HOMEDIRLIB): if ‘teamviewer‘.lower() in file.lower(): CONFIGS.append(file) if not CONFIGS: print (‘‘‘ 為發現配置文件,沒什麽可以刪除的 ‘‘‘) # 刪除配置文件 else: print("發現配置文件:\n") for file in CONFIGS: print file print(‘‘‘ 這些配置文件將被永久刪除 ‘‘‘) raw_input("請按<Enter>鍵盤刪除文件或按<CTR+C>組合鍵退出程序") for file in CONFIGS: try: os.remove(file) // 刪除文件 except: print("不能刪除文件,是否權限不夠?") sys.exit(); print("搞定!") # 下面的文件會替換裏面的值 TMBINARYES = [ ‘/Applications/TeamViewer.app/Contents/MacOS/TeamViewer‘, ‘/Applications/TeamViewer.app/Contents/MacOS/TeamViewer_Service‘, ‘/Applications/TeamViewer.app/Contents/Helpers/TeamViewer_Desktop‘, ] // 這些文件必須存在,否則退出程序 for file in TMBINARYES: if os.path.exists(file): pass else: print("File not found: " + file) print ("Install TeamViewer correctly") sys.exit(); # 開始替換上述文件中的值 def idpatch(fpath,platf,serial): file = open(fpath, ‘r+b‘) binary = file.read() # 定義模板 PlatformPattern = "IOPlatformExpert.{6}" SerialPattern = "IOPlatformSerialNumber%s%s%sUUID" # 開始替換 binary = re.sub(PlatformPattern, platf, binary) binary = re.sub(SerialPattern % (chr(0), "[0-9a-zA-Z]{8,8}", chr(0)), SerialPattern%(chr(0), serial, chr(0)), binary) # 更新待修改的文件 file = open(fpath,‘wb‘).write(binary) return True // 參數隨機數,用於生成隨機的ID def random_generator(size=8, chars=string.ascii_uppercase + string.digits): return ‘‘.join(random.choice(chars) for _ in range(size)) RANDOMSERIAL = random_generator() RANDOMPLATFORM = "IOPlatformExpert" + random_generator(6) # 開始依次替換前面文件中的內容 for file in TMBINARYES: try: idpatch(file,RANDOMPLATFORM,RANDOMSERIAL) except: print "錯誤:不能修改: " + file sys.exit(); print "PlatformDevice: " + RANDOMPLATFORM print "PlatformSerial: " + RANDOMSERIAL print(‘‘‘ ID需要成功 !!! 必須重啟計算機才能生效,good luck !!!! ‘‘‘)
將上面的代碼保存在change_id.py文件中,然後在Python2.7環境下執行如下命令:
sudo python change_id.py
按一下<Enter>鍵,就搞定了,最後重啟一下機器,會發現ID改變了。現在不會有人來打擾你了,盡管用Teamviewer吧。
如果使用Windows,可以按下面步驟搞定。
本文以最新的teamviewer13為例,步驟如下:
step1:
卸載teamviewer13
step2:
刪除下面2個目錄
C:\Program Files (x86)\TeamViewer
C:\Users\Administrator\AppData\Roaming\TeamViewer
step3:
在註冊表中刪除下面的鍵值,如果沒有就不用刪除了。
HKEY_LOCAL_MACHINE\SOFEWARE\Wow6432Node\TeamViewer
HKEY_CURRENT_USERS\Software\TeamViewer
HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer
step4:
修改電腦網卡的Mac地址,這個有專門的軟件,也可也在硬件設備中找到網卡進行修改,不過有的驅動不支持修改Mac地址。
step5:
如果成功修改了Mac地址,重新安裝teamviewer13。
這樣ID就變了,如果過段時間再被誤認為商業用途,重復這一過程即可。
如果讀者覺得太麻煩,就直接用下面的版本好了。
鏈接: https://pan.baidu.com/s/1rKJfeHQOg1U8b7pL417yHQ 提取碼: vcva
使用Python解決Teamviewer被誤認為商業用途的問題