1. 程式人生 > >使用Python解決Teamviewer被誤認為商業用途的問題

使用Python解決Teamviewer被誤認為商業用途的問題

退出 imp cas 下機 通用 盈利 遠程控制 global idp

Teamviewer是一款非常酷的遠程控制系統,可以遠程協同工作,分為個人版本和商業版本。個人版本可以基於非商業目的自由使用,商業版本需要付費(至少一個月49美元)。

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被誤認為商業用途的問題