解析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])


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

    5

  • 沒用

    0

  • 開心

    1

  • 憤怒

    1

  • 可憐

    0

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

相關課文
  • 防止退出linux終耑退出之後導致的nohup進程強制退出

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

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

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

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

2 樓 IP 114.254.***.129 的嘉賓 说道 : 很久前
谢谢大哥

3 樓 IP 222.128.***.254 的嘉賓 说道 : 很久前
请受小弟1拜