@霏艺Faye
@霏艺Faye
图书管理员
关注的小组(4)
动态 帖子 468 评论 466 短评 0 收到的赞 221 送出的赞 3
  1. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @小二 #29

    额。。。

    你是第一个叫我大叔的。。。

    我不是程序员。我在品葱,更多是发些情感小说和音乐。。。

    我看的小说动漫电影电视剧,听的音乐,N多东西被共产党封杀了,所以跑到墙外备份这些东西。

    所以发现了品葱,在品葱反共,是因为共产党封杀我看的小说之类的。

  2. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    東京不太熱

  3. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    睡你麻痹起来嗨

    youtu.be/MneyPwq-sas

    睡你麻痹起来嗨

    一直嗨到大天亮

    就算天亮也不怕

    反正不回家

    睡你麻痹起来嗨

    怎么嗨都嗨不完

    人生就是这么短

    得意须尽欢

    睡你麻痹起来嗨

    一直嗨到大天亮

    夜晚非常的美妙

    谁都别想逃

    睡你麻痹起来嗨

    怎么嗨都嗨不完

    小妹妹呀快快来

    跟我一起嗨

    睡你麻痹起来嗨

    一直嗨到大天亮

    啤酒炸鸡土豆块

    说教靠边排

    睡你麻痹起来嗨

    怎么嗨都嗨不完

    做人就要任性点

    世界才有爱

    睡你麻痹起来嗨

    一直嗨到大天亮

    嗨完就不想起床

    被子外面凉

    睡你麻痹起来嗨

    怎么嗨都嗨不完

    人生就是这么短

    得意须尽欢

    我觉得,我发了这么多歌,你们总笑了吧~

  4. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    去你妹的撩妹

    youtu.be/2-qNsutDglc
    作曲 : 封茗囧菌
    作詞 : 袖藍
    編曲:宇狗與狗
    混音:封茗囧菌
    
    昨天還口口聲聲叫著寶貝
    用甜言蜜語
    一句一句 哄人沉醉
    轉眼之間 你
    已經品嚐下個口味
    擁抱著誰
    每個夜晚枕著不同香水
    每次遲到的約會
    每次都只是誤會
    每次都溫柔地 親吻著說給一個機會
    別生氣 這位那位 是我的妹妹
    拜託滾開閉上嘴
    鬼才會相信你說什麼妹妹
    嗨咿呀
    再也不要隨便掉下眼淚
    淚水多昂貴
    為你浪費不過可笑可悲
    (可是你不配)
    嗨咿呀
    你和別人曖昧也無所謂
    總該學會 拆穿你的虛偽
    把假面撕碎
    穿上漂亮的高跟鞋
    向背後揮手告別
    沒有美好的故事
    足夠用來紀念回味
    (丟進垃圾堆)
    嗨咿呀a~ a~ a~
    把那些謊言都用冷水煮沸
    沸騰蒸發的疲憊
    自己也能好好面對
    昨天還口口聲聲說我最美
    在你的心裡
    只有一個我的空位(由你守衛)
    轉眼之間 你
    已經騰給 其他花蕊(其他花蕊)
    面對著誰
    燈光照出你的笑容諂媚
    每次遲到的約會
    每次都只是誤會
    每次都溫柔地親吻著說給一個機會
    別生氣 這位那位是我的妹妹
    ha~ah(拜託滾開閉上嘴)
    鬼都不相信你所謂的妹妹
    嗨咿呀
    再也不要隨便掉下眼淚
    淚水多昂貴
    為你浪費換來可笑可悲
    (可是你不配)
    嗨咿呀
    你和別人曖昧也無所謂
    總該學會 拆穿你的虛偽
    把假面撕碎
    穿上漂亮的高跟鞋
    向背後揮手告別
    沒有美好的故事足夠用來紀念回味
    (丟進垃圾堆)
    嗨咿呀a~ a~ a~
    把那些你賜予的盲目愚昧
    留給你自己體會
    扔掉手中那支玫瑰
    
  5. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    【转载】找出不同的硬币

    题目非常难!!!

    我先给答案

    using CP;
    
    int nbTrials=4;
    range trials=1..nbTrials;
    
    int n=11;
    range coins=1..n;
    
    tuple comb // the light ones
    {
    int x;
    int y;
    }
    
    {comb} combs={<i,j> | ordered i,j in coins}; // i and j are the bad coins
    
    dvar boolean x[trials][coins][1..2]; // 4 trials n coins right and left side
    
    dvar int y[combs][trials] in -1..1; // result of the weight -1 : less 0 : equal 1 : more
    
    
    subject to
    {
    // same number of coins both side
    
    forall(i in trials) sum(j in coins) x[i][j][1]==sum(j in coins) x[i][j][2];
    
    // a coin is either left or right or not there
    
    forall(i in trials) forall(j in coins) x[i][j][1]+x[i][j][2]<=1;
    
    // not empty
    forall(i in trials) sum(j in coins) x[i][j][1]!=0;
    
    // results of the balance
    forall(c in combs) 
    	forall(i in trials) 
    		y[c][i]
    		==
    		sgn(x[i][c.x][1]+x[i][c.y][1]-x[i][c.x][2]-x[i][c.y][2]);
    
    // To be able to find the fraud
    forall(ordered c1,c2 in combs) or(i in trials) (y[c1][i]!=y[c2][i]);
    
    }
    
    execute
    {
    function display(v)
    {
    return String.fromCharCode(64+v);
    }
    
    for(i in trials)
    {
      for(var j in coins) if (x[i][j][1]==1) write(display(j));
      write("-");
      for(var j in coins) if (x[i][j][2]==1) write(display(j));
      writeln();
    }
    }
    

    ABC-DEF BEH-CDJ DGH-EIJ AGI-FHJ and ABC-DEF DGH-EIJ AGI-BHJ CDEHI-ABFGJ

  6. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    【转载】找出不同的硬币

    我们有11枚硬币,其中2枚硬币重量一样,却和其他9枚不一样。现在需要找出这两枚硬币。 但是,我们只有一个没有刻度的天平。需要4次使用天平就找到这2枚硬币

    用编程实现~

  7. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    我觉得小二发帖的时候,情绪不好

    只是希望我的歪楼,可以转变大家的心情,在屏幕前自己笑一笑,忘记不开心的事情

    现在大家应该忘了自己不开心的情绪了,收工~

  8. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    @小二 #12

    你绕不开js,那是因为你开发web的缘故。可以试试我上面说的行业。都不需要js的

    @electron8964 #13

    有个小说《爱书的下克上》,女主角一心想当图书馆里,我是一样的

  9. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @Phragmites #27

    不是的,我是想起了初恋。。。

    等你有一天长大了,结婚了。如果和我一样的情况,保留着初恋的一些东西,几十年后再看到,也会想起过去。只是你们不会有我这么大触动罢了

  10. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    @小二 #8 我知道啊,但是RoR的设计理念非常先进,我觉得其他语言的web框架都是对RoR的模仿而已

    而且我已经说了,自娱自乐推荐RoR,找工作的确是没希望了

    我是看着Ruby China起来,看着它没落。。。都去玩Erlang了

    Erlang和OCaml我觉得也不错, Erlang在通信行业还是可以找到饭碗的,工资也不低,

    OCaml可以去Jane Street看看,类似F#,金融行业,工资不低啊

    但这些都不是web开发主力语言。

    不同行业,语言不同,隔行如隔山。比如,我看人工智能的时候,会python更多,主流框架tensorflow pytorch keras

    比如量子力学 python

    统计学 python R语言 SPSS

    建筑 matlab maple lingo

    金融 F# OCaml

    以上内容,我都不会,但是都用过这些编程语言。。。

    再来写冷门的~

    IBM有一个叫ILOG的编程语言。。。我感觉很牛逼。。。

    算了。。。不说了,说太多,把自己是谁都泄露了

  11. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    @electron8964 #6 我只是一个图书管理员而已,不是技术大牛

  12. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    瞄了一眼2049的代码。。

    代码是golang写的,MVC架构。数据库是youdb,抛弃了ORM,将obj直接序列化存储到key -value的数据库。

    好处是不需要mybatis这样的orm框架了,坏处是很多复杂业务,代码写起来就很变态,而且性能很糟。

    youdb和leveldb一样,属于文件型数据库,同类是sqlite,但是sqlite是传统数据库,youdb是key-value数据库。

    ++++++++++++++

    话说这代码是真的轻量级啊,MVC分的也算清楚,内部实现也不复杂。

    说了这么多废话,就是觉得不喜欢这里的人,回家自己搭一个bbs自娱自乐也挺好的~

    我也用discuz搭过一个bbs,可惜被共产党封杀了

  13. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    一点声明

    对于小白的建议

    先去学习Ruby on Rails,等你入门了,基本就可以自己写个BBS了

    然后学习下RESTFul 规范,让你学会约束自己的代码【培养CRUD思维方式】

    最后,网上搜索下前后端分离,前端可以看看vue,我觉得挺好用的!

    写web,万变不离其宗,说到底也就是CRUD+js画界面

    前端,html+js+css三板斧而已,MDN上学习,一个下午就搞定了

    后端,我建议RoR入门,或者python入门。真的玩进阶版,php已经淘汰了,估计是golang会是将来的趋势,国内目前java为主

    如果是找工作,建议java或者golang,如果是自娱自乐,推荐RoR和Python

  14. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    如何讓chrome支持ESNI

    繼續查看ext_sni_add_clienthello函數

    發現CBB_add_bytes(&name, (const uint8_t *)ssl->hostname.get(),這行代碼,會對SNI賦值hostname

    也就是說,爲什麽我們通過wireshark抓包,可以明文看到自己訪問什麽網站,就是這行代碼造成的!

    GFW通過全網檢查ClientHello的SNI字段,來判斷你在訪問什麽網站!而且因爲是明文,所以GFW的工作很簡單,只要檢查你的TLS握手SNI字段,如果是敏感詞,就RST掉你的tcp連接。你就上不去了。品蔥就是這樣,所以上不去,需要開啓ESNI功能,就沒事了~

    代碼修改:

    1.增加一個ext,取名叫ESNI,參考SNI的實現,完成相關代碼

    2.移植火狐的esni加密代碼到boringssl,完成第一步的esni報文拼接

    3.編譯自己的boringssl庫,替換掉chrome自帶的boringssl

    4.chrome有自己dll校驗機制,你手動替換有點問題,好像跑不起來,得網上找下教程,學習如何替換chrome的boringssl

    別找我要代碼或者已經編譯好的dll !我要是寫好了,早提PR給chrome了~

    關於爲什麽不自己寫代碼完成剛才我説的這麽多事情:

    我翻墻的條件很糟糕,下載chrome的源碼,經常斷掉!失敗就得重新下載。至今沒有下載到chrome源碼。

    另外編譯環境配置非常複雜,我沒有那個功夫去完成這麽費時間的工作。老了啊,想當年自己花了3個星期,搭了Gentoo Linux,現在搭個chrome的編譯環境都覺得浪費時間

  15. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    如何讓chrome支持ESNI

    言歸正傳!

    我們講解Chrome了,chrome的TLS實現叫做BoringSSL,fork自著名的openSSL。

    開始講如何boringssl的代碼。

    翻開課本,boringssl\ssl\handshake_client.cc這個代碼。開始閲讀ssl_client_handshake

    對!ESNI是在客戶端發起握手的時候發送的!所以從握手開始讀起。

    找到do_start_connect這個函數!很多人覺得看著這個代碼,很嚇人。別怕,其實關鍵信息就i是ssl_write_client_hello這麽一行罷了。其他的都不重要~

    ssl_write_client_hello這個函數,什麽都不做,純粹拼報文而已!二進制級別拼寫,類似給一個struct賦值。

    我們就看ssl_add_clienthello_tlsext這個函數!因爲ESNI或者SNI都是放在ext字段。

    翻開課本 boringssl\ssl\t1_lib.cc 找到 ssl_add_clienthello_tlsext

      for (size_t i = 0; i < kNumExtensions; i++) {
        const size_t len_before = CBB_len(&extensions);
        if (!kExtensions[i].add_clienthello(hs, &extensions)) {
          OPENSSL_PUT_ERROR(SSL, SSL_R_ERROR_ADDING_EXTENSION);
          ERR_add_error_dataf("extension %u", (unsigned)kExtensions[i].value);
          return false;
        }
    

    意思是遍歷所有的ext,調用對應ext的add_clienthello函數,拼clienthello報文

    // kExtensions contains all the supported extensions.
    static const struct tls_extension kExtensions[] = {
      {
        TLSEXT_TYPE_server_name,
        NULL,
        ext_sni_add_clienthello,
        ext_sni_parse_serverhello,
        ext_sni_parse_clienthello,
        ext_sni_add_serverhello,
      },
      {
        TLSEXT_TYPE_extended_master_secret,
        NULL,
        ext_ems_add_clienthello,
        ext_ems_parse_serverhello,
        ext_ems_parse_clienthello,
        ext_ems_add_serverhello,
      },
      {
        TLSEXT_TYPE_renegotiate,
        NULL,
        ext_ri_add_clienthello,
        ext_ri_parse_serverhello,
        ext_ri_parse_clienthello,
        ext_ri_add_serverhello,
      },
      {
        TLSEXT_TYPE_supported_groups,
        NULL,
        ext_supported_groups_add_clienthello,
        ext_supported_groups_parse_serverhello,
        ext_supported_groups_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_ec_point_formats,
        NULL,
        ext_ec_point_add_clienthello,
        ext_ec_point_parse_serverhello,
        ext_ec_point_parse_clienthello,
        ext_ec_point_add_serverhello,
      },
      {
        TLSEXT_TYPE_session_ticket,
        NULL,
        ext_ticket_add_clienthello,
        ext_ticket_parse_serverhello,
        // Ticket extension client parsing is handled in ssl_session.c
        ignore_parse_clienthello,
        ext_ticket_add_serverhello,
      },
      {
        TLSEXT_TYPE_application_layer_protocol_negotiation,
        NULL,
        ext_alpn_add_clienthello,
        ext_alpn_parse_serverhello,
        // ALPN is negotiated late in |ssl_negotiate_alpn|.
        ignore_parse_clienthello,
        ext_alpn_add_serverhello,
      },
      {
        TLSEXT_TYPE_status_request,
        NULL,
        ext_ocsp_add_clienthello,
        ext_ocsp_parse_serverhello,
        ext_ocsp_parse_clienthello,
        ext_ocsp_add_serverhello,
      },
      {
        TLSEXT_TYPE_signature_algorithms,
        NULL,
        ext_sigalgs_add_clienthello,
        forbid_parse_serverhello,
        ext_sigalgs_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_next_proto_neg,
        NULL,
        ext_npn_add_clienthello,
        ext_npn_parse_serverhello,
        ext_npn_parse_clienthello,
        ext_npn_add_serverhello,
      },
      {
        TLSEXT_TYPE_certificate_timestamp,
        NULL,
        ext_sct_add_clienthello,
        ext_sct_parse_serverhello,
        ext_sct_parse_clienthello,
        ext_sct_add_serverhello,
      },
      {
        TLSEXT_TYPE_channel_id,
        ext_channel_id_init,
        ext_channel_id_add_clienthello,
        ext_channel_id_parse_serverhello,
        ext_channel_id_parse_clienthello,
        ext_channel_id_add_serverhello,
      },
      {
        TLSEXT_TYPE_srtp,
        ext_srtp_init,
        ext_srtp_add_clienthello,
        ext_srtp_parse_serverhello,
        ext_srtp_parse_clienthello,
        ext_srtp_add_serverhello,
      },
      {
        TLSEXT_TYPE_key_share,
        NULL,
        ext_key_share_add_clienthello,
        forbid_parse_serverhello,
        ignore_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_psk_key_exchange_modes,
        NULL,
        ext_psk_key_exchange_modes_add_clienthello,
        forbid_parse_serverhello,
        ext_psk_key_exchange_modes_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_early_data,
        NULL,
        ext_early_data_add_clienthello,
        ext_early_data_parse_serverhello,
        ext_early_data_parse_clienthello,
        ext_early_data_add_serverhello,
      },
      {
        TLSEXT_TYPE_supported_versions,
        NULL,
        ext_supported_versions_add_clienthello,
        forbid_parse_serverhello,
        ignore_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_cookie,
        NULL,
        ext_cookie_add_clienthello,
        forbid_parse_serverhello,
        ignore_parse_clienthello,
        dont_add_serverhello,
      },
      {
        TLSEXT_TYPE_quic_transport_parameters,
        NULL,
        ext_quic_transport_params_add_clienthello,
        ext_quic_transport_params_parse_serverhello,
        ext_quic_transport_params_parse_clienthello,
        ext_quic_transport_params_add_serverhello,
      },
      {
        TLSEXT_TYPE_token_binding,
        NULL,
        ext_token_binding_add_clienthello,
        ext_token_binding_parse_serverhello,
        ext_token_binding_parse_clienthello,
        ext_token_binding_add_serverhello,
      },
      {
        TLSEXT_TYPE_cert_compression,
        NULL,
        cert_compression_add_clienthello,
        cert_compression_parse_serverhello,
        cert_compression_parse_clienthello,
        cert_compression_add_serverhello,
      },
      {
        TLSEXT_TYPE_delegated_credential,
        NULL,
        ext_delegated_credential_add_clienthello,
        forbid_parse_serverhello,
        ext_delegated_credential_parse_clienthello,
        dont_add_serverhello,
      },
    };
    

    因爲我們要做的是SNI,所以看到了第一個ext,找到了它對應的add_clienthello是ext_sni_add_clienthello

  16. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    如何讓chrome支持ESNI

    同學們先自己去看下火狐的源碼,理解下火狐的ESNI代碼實現!

    我昨天剛下好,300多MB的壓縮包!你們慢慢解壓縮吧。。。

    代碼太深了,估計很多人不知道ESNI的代碼實現在哪裏。我解釋下,代碼在

    security/nss/lib/ssl/tls13esni.c

    函數是SSLExp_EnableESNI和tls13_ClientSetupESNI,整個代碼實現其實不難,當然,前提是你和我一樣無聊看完了openssl的代碼

    重點講解,我放到https://2049bbs.xyz/t/3750 這裏了

  17. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    v2ray在wss協議下的代碼講解

    漏了剛才的代碼,補上

    conn, resp, err := dialer.Dial(uri, wsSettings.GetRequestHeader())
    return internet.DialSystem(ctx, dest, streamSettings.SocketSettings)
    

    第一行代碼表示調用了開源的github.com/gorilla/websocket庫文件,不在此解讀了,你只要知道,通過這個開源庫,去建立了wss連接就好了,v2ray沒有自己實現wss,只是調用了第三方庫。

    第二行代碼,表示去建立了一個tcp連接,無它~

    希望我的講解,可以幫助大家少走很多彎路,看代碼知道哪些是v2ray實現的,哪些是第三方庫

    遇到問題,需要解決的時候,有一個思路,知道去看什麽代碼文件!

    比如爲什麽不像SS一樣需要自己指定加密算法呢?因爲這個是TLS自己協商出來的,而不是我們指定的,我們可以通過刪減剛才的config.CipherSuites來指定加密算法

    以及被中間人攻擊怎麽辦?我們可以通過config.Certificates 來設置自己的根證書解決

    爲什麽看不到AEAD加密算法實現呢?因爲在github.com/gorilla/websocket庫文件實現的數據AEAD加密

    等等問題,可以通過閲讀代碼自己回答。有需要,可以自己提issue。但是我都是自己改代碼,完成自我功能需求的客制化~

    有什麽v2ray的問題,可以給我留言。或者在v2ray的GitHub上提issue。

  18. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    v2ray在wss協議下的代碼講解

    前面講的東西都放在品蔥了,大家自己去補課。

    開始講wss的代碼了。

    翻開課本v2ray-core\transport\internet\websocket\dialer.go

    func Dial這個函數讀起。因爲外層調用必然是 internet.Dial這樣的調用方式進來。

    注意到這行代碼

    conn, err := dialWebsocket(ctx, dest, streamSettings)
    

    我們跟進去,注意以下代碼

    dialer.TLSClientConfig = config.GetTLSConfig(tls.WithDestination(dest))
    conn, resp, err := dialer.Dial(uri, wsSettings.GetRequestHeader())
    return internet.DialSystem(ctx, dest, streamSettings.SocketSettings)
    

    一行行解釋 翻開課本 v2ray-core\transport\internet\tls\config.go

    看函數 GetTLSConfig我們重點解釋下

    config := &tls.Config 保存了重要的配置信息,我們講講各個配置是什麽

    config.CipherSuites 保存的加密套件,我個人推薦,把出現RSA,chacha,cbc等字樣的套件刪除!

    config.InsecureSkipVerify 表示是否校驗證書,必須校驗啊!不校驗就被中間人攻擊了!像這次GitHub攻擊事件

    config.Certificates 保存了各個證書。默認是系統自帶的,可以禁用。通過config.GetCertificate = getGetCertificateFunc函數設置自己的自定義證書。我個人推薦,禁用系統的,只用自己的證書。

    其他的不重要

  19. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

  20. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @小二 #20

    你的這篇文章更側重向讀者解釋DNS的工作原理。以及如何DNS劫持,最後DoH如何解決了相關問題。還有哪些問題是遺留下來。很好的科普文章!

    但是我覺得這類科普類的文章太多了,不缺我一篇。我想寫自己的原創文章,國内講科普的代碼,講源碼的太少了。我希望把自己的代碼總結給大家,讓大家知道出了問題,去什麽目錄下找什麽文件,從什麽函數開始讀起,如何定位相關問題,並解決。

    如果我的原創文章足夠多,也足夠優秀,我覺得2049bbs的PageRank自然會提升~

  21. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    2020年3月26日大陸GitHub事件分析

    墻内鏈接,慎點 https://www.secrss.com/articles/13373

    習近平不知道腦子出了什麽問題,為GFW辯稱說這個叫維護國家主權

    還發明了一個專有詞匯,國家網絡主權。GFW維護了國家的網絡主權。

    從那以後,邪惡國家不約而同地響應了中共的網絡主權申明!

    哪裏有什麽網絡主權啊?完全是爲了自己不要臉的合法化啊!

    分析

    本文不是針對小白的!而且需要看完我在品蔥的基礎知識講解,並閲讀本樓的墻内鏈接,才能明白我接下來説的話。

    shadowsocks不走TLS協議,所以不用考慮這次TLS攻擊的影響

    v2ray協議是跑在vmess協議的,也不受TLS影響。回過頭看看v2ray的wss方式翻墻。

    v2ray有個配置項 ,禁用操作系統的根證書,只識別自己的指定的根證書,解決這類問題

    所以,GFW這次攻擊,和翻墻沒有一分錢關係

    那麽爲什麽要做這種事情呢?我覺得單純是爲了對境外網站推行白名單!

    也就是說,訪問境外的TLS的時候,用中共自己的根證書對中國人進行無差別中間人攻擊

    原理就和你電腦裏安裝了卡巴斯基一樣。不懂的人,可以安裝一個卡巴斯基,然後看看自己的瀏覽器訪問任何網站都是卡巴斯基的證書了!這個就是中共想要的效果!也正是2010年綠壩的初衷!

    很多人沒有用過卡巴斯基,那麽可以瞭解下你怎麽抓包Android的流量的,charles也好,wireshark也好,fiddler也好,道理都是一樣的!當年,Android的安全性很差,你自己簽個根證書導入自己的手機,然後用fiddler做中間人攻擊,就可以看到微信的明文傳輸了對吧!現在這個bug已經沒有了。我們也不知道微信怎麽通信了。

    中共的中間人攻擊,就像我們抓包分析微信的協議。像卡巴斯基掃描你上網在做什麽。這樣,我們https上網就和http上網一樣的效果了,完成了監控。而中共就像卡巴斯基。

  22. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @electron8964 #16

    如果你看過我在品蔥的帖子,就知道我孩子都上大學了。。。

  23. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @electron8964 #13 他寫小説挺好的,可惜共產黨封殺了他寫的小説。我不希望這些小説消失,便轉載到了品蔥,希望後人可以閲讀。

    我覺得,2000年左右,還可以讀到很多很多小説,後來就大肆封殺。我現在只能讀讀日本輕小説了。當年涼宮春日的小説挺火的

  24. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @electron8964 #5 你也看慕容雪村的書麽?我有他親筆簽名~ 我在品蔥發了慕容雪村的小説。你可以去看看

  25. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @小二 #2

    人話版本 :

    DNS協議的功能是通過域名查找對應的IP地址。DNS協議,明文跑在UDP協議下,端口寫死是53。

    因爲端口固定是53,所以特別好劫持。因爲是明文,所以GFW可以針對性劫持。

    攻擊方法:

    用戶瀏覽器發起DNS請求,比如www.google.com的ip是什麽?GFW全網抓包端口53的UDP流量

    捕獲了你的請求,然後僞造了一個假的DNS應答報文給你,IP當然是假的了。所以就上不了Google了。

    過去對品蔥就是這種封殺,僞造DNS。這個就是DNS劫持

    解決辦法:

    自己在本地的hosts裏增加正確的record就可以了。

    DNS over HTTPS

    就是把DNS請求通過https來發送,因爲https是加密的,所以克服了剛才的所有缺點。 DoH 有兩種方式,一種是發post請求,一種是發get請求。http的應答報文的body則是DNS的應答。

    通過調用DoHEncode把請求封裝成一個二進制的buffer請求。

    如果是post方式獲取DNS,則把剛才生成的buffer放到http的body裏,通過http二進制傳輸發送請求。

    如果是get方式獲取DNS,則把剛才的buffer通過base64編碼,放到http的查詢URI裏發送。

    得到的http應答報文根據DoHDecode函數,解析DNS應答,並返回給瀏覽器真實的ip地址。有效防止了DNS泄露,DNS劫持,等n多問題

    因爲大部分代碼都在拼http報文的head部分,就不去探究了。我們只用關心DOHEncode和DOHDecode兩個函數就好了。這兩個就是dns協議的拼裝和解析。其實也不用過度解讀。。。

  26. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @梅菲斯特 #6 那是因爲我沒葱發文章,才發水樓。發一個35葱,都沒法回本。

  27. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    @Phragmites #8 蒹葭蒼蒼?看頭像猜的。 你好啊

  28. 霏艺Faye 图书管理员
    霏艺Faye   在小组 江湖 回复文章

    不知道是哪個管理員説我退葱了?

    莫名其妙説我是小號。有什麽懷疑就説出來,你覺得我是誰的小號!

  29. 霏艺Faye 图书管理员
    霏艺Faye   在小组 江湖 发表文章

    不知道是哪個管理員説我退葱了?

    https://pincong.rocks/video/1574

    我説的很清楚,因为个人原因,情绪比较低落,想离开一段时间

    最近心情不好,和品蔥沒有任何關係!只是自己的原因!

    爲什麽,直接給我加了 品葱三退退葱声明

    我自認在品蔥,安分守己,也不和任何管理員有過矛盾!不知道是誰做的。不明白!!!

    心情不好,加上最近ESJ和真白萌的事情,更煩了!

    品蔥,我遲早得回去的。畢竟關於迷霧通的代碼分析,還沒有寫!我的廣播站還沒有講完故事。。。

    等我自己想開了,走出來了,我會回去的。我總覺得品蔥某些人針對我,我就不提名字了!對我不滿意,直接説出來,別做些莫名其妙的事情。。。

  30. 霏艺Faye 图书管理员
    霏艺Faye   在小组 江湖 回复文章

    不知道是哪個管理員説我退葱了?

    @Ephemeris #4 看到了

    过阵子我会回品葱,继续主持我的广播站

    希望你能来看看

  31. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    SSLExp_EnableESNI

    tls13_ClientSetupESNI

    tls13_ServerDecryptEsniXtn

    再談下ESNI這個代碼,我不知道和TRR有什麽關聯,必須TRR打開,ESNI功能才能使用。感覺明明是獨立的兩個功能。

  32. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 回复文章

    火狐DoH和ESNI代碼講解

    GFW的問題,我這裏網絡不好,發文章比較卡。。

    通過TRR::OnDataAvailable函授收到應答報文,只看代碼On200Response,先不考慮異常情況

    DohDecode會解析應答報文,放到mDNS裏

    最後調用TRR::ReturnData 返回查詢結果,mHostResolver->CompleteLookup

    網絡不好,排版很累,沒法預覽。我不明白,這個地方爲什麽開啓了TRR才可以使用esni,不使用的話esni沒法啓用。爲什麽呢?

  33. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    火狐DoH和ESNI代碼講解

    吐槽1: 我不明白ESJ爲什麽要和真白萌發生衝突?

    吐槽2: 拜GFW所賜,我下了7個小時22次才完成火狐源碼下載

    因爲代碼剛下好,還來不及細讀,我先給個框架吧

    首先是DoH代碼部分

    參考代碼 netwerk/dns/TRR.cppTRR::SendHTTPRequest() 函數,

    雖然代碼很長,但是實際工作的就是拼一個https報文

    分兩種情況,只能選其中一種

    情況1:你選擇發送Get請求,DohEncode生成一個tmp,對tmp 進行base64編碼,追加到uri裏,調用httpChannel->AsyncOpen(this);發送HTTP請求

    情況2:你選擇發送Post請求,DohEncode生成一個body,通過uploadChannel->ExplicitSetUploadStream放到http的body部分,調用httpChannel->AsyncOpen(this);發送HTTP請求

  34. 霏艺Faye 图书管理员
    霏艺Faye   在小组 2049BBS 发表文章

    宇多田ヒカル 「First Love」

    youtu.be/NuKluSrbHik

    大家好,我是立紗Lisa !

    这些天,我老是想起自己的初恋,心情久久不能平复。我忘不了自己的过去,活在失恋的痛苦中出不来。每天醒来就和当初刚失恋一般。

    我不希望让自己的情绪在品葱影响其他人,我就临时离开品葱了,我也不知道自己什么时候回去。

    我只是觉得自己很难过,很难过。想找个地方说下自己的感受! 就是发泄下。

    我觉得爱情是一个很难形容的东西,如果可以两个人在一起,她是糖,很甜,回忆的都是暖暖的甜味。如果不能在一起,那么爱情就像毒药,每次回忆都痛苦无比。而且不论哪种结果,爱情的记忆,都是刻入灵魂,想忘忘不了。

    小二,记得当初是想给你留言,才打算注册品葱。

    当年品葱有个帖子,关于中国人是不是值得救。你说的话,我觉得很有道理。不论是不是中国人值得救,楼主他也没有为救中国人做过什么。我们都是*普通人*,不是任何人的*救世主*。我们没有救过任何人,有什么资格评价谁值得救,谁不值得救?我们也没有打算成为救世主去努力,不过就是网上发个帖子,碎碎念一下。

    但是真的去注册的时候,你已经不在了。。。