解析Outline链接的加密链接变成明文密码

字號+ 編輯: 国内TP粉 修訂: IT男在阿里 來源: Fenghe's Blog 2023-09-12 我要說兩句(3)

在學習通信隧道加解密過程中可能會遇到這個問題: 從Outline這個軟件裡得到的ss開頭的鏈接是可以導入專有的客戶耑的, 但是你會發現梅林無法直接導入鏈接,原因是鏈接是加密的,衹要把鏈接轉一下就OK

總的來說要做的就是從https://github.com/Bill0412/ss-link-decoder上面把那個.py文件下載下來,然後運行那個文件來解析鏈接。

以下面這個ss鏈接爲例,

ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpyVkJ6WVJIZ3ZRTzc=@某ip地址:33333/?outline=1

先把後面那個後綴/?outline=1去掉(/?後面部分其實是無用的注釋),變成

ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpyVkJ6WVJIZ3ZRTzc=@某ip地址:33333

然後運行

$ git clone https://github.com/Bill0412/ss-link-decoder.git
$ cd ss-link-decoder
$ python ssdecode.py ss://Y2hhY2iiyjAtaWV56AF203s984TpyVkJ6Wa5TZ3z8Tzc=@某ip地址:12320

運行結果如下:

上面花括號裡面的東西分別是你需要的服務器IP地址、耑口號、密碼和加密方式從加密鏈接中解密出來的明文。可以嘗試一下,解析出來的信息跟直接導入信息得到的結果是一樣的。

聽說你上不了github啦?

特釋放py文件源碼如下, 請保存:

# -*- coding: utf-8 -*-
 
import base64
import json
import sys
 
 
def base64decode(s):
    # transtab = str.maketrans('-_', '+/')
    # s = s.translate(transtab)
    if len(s) % 4 != 0:
        s = s + (4 - len(s) % 4)*'='
    return base64.urlsafe_b64decode(s.encode())
 
 
def decode_ss(ss):
    code_base64 = ss[5:ss.find('@')]
    method_pwd = base64decode(code_base64)
    method_b, pwd_b = method_pwd.split(b':', 1)
    server = ss[ss.find('@')+1:ss.rfind(':')]
    if ss.find('#') == -1:
        port = ss[ss.rfind(':')+1:]
    else:
        port = ss[ss.rfind(':')+1:ss.find('#')]
    ss_conf = {'server': server, 'server_port': int(port),
               'password': pwd_b.decode(), 'method': method_b.decode()}
    print(json.dumps(ss_conf, indent=4))
 
    pwd_base64 = base64.urlsafe_b64encode(pwd_b)
 
    ssr = [server, port, 'origin', method_b.decode(), 'plain',
           pwd_base64.decode()]
    ssrlink = ':'.join(ssr) + '/?obfsparam=&protoparam=&remarks='
    ssrlink_base64 = base64.urlsafe_b64encode(ssrlink.encode())
    ssrlink_output = 'ssr://' + ssrlink_base64.decode()
    print(ssrlink_output)
 
 
def decode_ssr(ssr):
    first_b = base64decode(ssr[6:])
    ssr_conf = {'server': '', 'server_port': ''}
    print(first_b.decode())
 
 
def main(s):
    is_ss = s.find('ss://')
    is_ssr = s.find('ssr://')
    if is_ss != -1:
        ss = s[is_ss:].strip()
        decode_ss(ss)
    elif is_ssr != -1:
        ssr = s[is_ssr:].strip()
        decode_ssr(ssr)
    else:
        print('鏈接格式不正確!')
 
 
if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('參數不正確!')
    else:
        main(sys.argv[1])


閲完此文,您的感想如何?
  • 有用

    4

  • 沒用

    0

  • 開心

    1

  • 憤怒

    1

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • Linux系統下word文档轉成pdf的辦法

  • ubuntu和debian安裝nginx或者tengine報錯, 找不到pcre依賴庫的解決辦法

  • linux終耑下借助awk命令查詢篩出網站access.log日志裡的統計信息

  • 常見的web中間件請求返回狀態碼

我要說說
網上賓友點評
1樓 IP112.14.*.*的嘉賓说道: 很久前
自行车

2樓 IP114.254.*.*的嘉賓说道: 半年前
谢谢大哥

3樓 IP222.128.*.*的嘉賓说道: 5个月前
请受小弟1拜