kiến thức Tổng hợp những addon chất cho Firefox / Chromium

Attachments

  • 1683288039694.png
    1683288039694.png
    103.6 KB · Views: 37
Đưa thử link mình test thử xem, mình xem vẫn có ảnh bình thường, thử vào Settings chỉnh node thành Scribe xem sao, thằng này nó có nhiều thể loại alt front-end cho nhiều nhu cầu, nặng nhẹ quốc gia các kiểu:

Không thì tự thêm node mới là scribe.bus-hit.me cái mình đang dùng.

sLH34jq.png
https://scribe.rip/touchdownvc/honesty-is-more-powerful-than-positivity-8ec021291e55
Có trang bị, có trang thì ko.
Mềnh làm theo y chang 100%.
 
Mình làm y chang các thứ luôn vẫn ko vào được medium thím nạ.

View attachment 1815900

View attachment 1815902
Có vài lưu ý:
  • Firefox ở trên là 113 beta 0, bản beta mới nhất hiện tại là 9, thử update lên beta 9 đã vì ECH mới chỉ có ở beta 8
  • Đây có phải Firefox cho Mac ? Nói chung không thể chắc chắn Firefox Mac sẽ có ECH như Firefox Windows được mà phải test cẩn thận mới biết
https://ftp.mozilla.org/pub/firefox/releases/113.0b9/
 
Có vài lưu ý:
  • Firefox ở trên là 113 beta 0, bản beta mới nhất hiện tại là 9, thử update lên beta 9 đã vì ECH mới chỉ có ở beta 8
  • Đây có phải Firefox cho Mac ? Nói chung không thể chắc chắn Firefox Mac sẽ có ECH như Firefox Windows được mà phải test cẩn thận mới biết
https://ftp.mozilla.org/pub/firefox/releases/113.0b9/
Có vẻ hạp lí. THoi về lại 112 vậy. b8. b9 đều ko dc.
 
Tìm hiểu chút về tính năng seen thì mình phát hiện ra rằng hoàn toàn có thể dùng Userscript nhúng code để "lọc" WebSocket. Và cái extension J2Team cũng dựa vào cách này để chặn seen trên Facebook. Đây là đoạn code nhỏ của cái J2Team dùng để chặn seen, cách thức của nó là cứ thấy gói tin WebSocket nào gửi ping lên Facebook báo người dùng đã đọc tin nhắn thì nó chặn, hoàn toàn có thể biến thành Userscript để có tính năng chặn seen:

Code:
l = new Proxy(e.WebSocket, {
      construct: function(e, t) {
        var l = new(Function
            .prototype.bind.apply(e,
              [null].concat(
                _toConsumableArray(
                  t)))),
          c = function(e) {},
          h = function(e) {
            e = new Uint8Array(e
              .data);
            var t = parser(u);
            2e3 < e.length && (t.on(
              "packet",
              function(e) {
                "publish" === e
                  .cmd &&
                  "/ls_resp" ===
                  e.topic &&
                  1 === e.qos &&
                  f.push(e
                    .messageId)
              }), t.parse(e))
          },
          p = function d(e) {
            l.removeEventListener(
                "open", c), l
              .removeEventListener(
                "close", d), l
              .removeEventListener(
                "message", h)
          };
        return l.addEventListener(
            "message", h), l
          .addEventListener("open",
            c), l.addEventListener(
            "close", p), l.send =
          new Proxy(l.send, {
            apply: function(e, t,
              f) {
              var l =
                new Uint8Array(
                  f[0]),
                c = parser(u);
              c.on("packet",
                function(l) {
                  var c =
                    void 0;
                  try {
                    if (o
                      .includes(
                        l
                        .topic
                        ) || s
                      .includes(
                        l.cmd)
                      ) return e
                      .apply(
                        t, f
                        );
                    if (l
                      .payload &&
                      "/ls_req" ===
                      l.topic
                      ) {
                      var h =
                        r(Buffer
                          .from(
                            l
                            .payload
                            )
                          .toString()
                          );
                      if (i
                        .block_typing_chat &&
                        h &&
                        4 ===
                        h.type
                        ) {
                        var
                          p =
                          r(h
                            .payload
                            );
                        if (
                          p ||
                          e
                          .apply(
                            t,
                            f
                            ),
                          c =
                          r(p
                            .payload
                            ),
                          c &&
                          c
                          .thread_key
                          )
                          return
                      }
                      if (i
                        .block_seen_chat &&
                        h &&
                        3 ===
                        h.type
                        ) {
                        var
                          d =
                          r(h
                            .payload
                            );
                        if (
                          d &&
                          d
                          .tasks &&
                          1 <=
                          d
                          .tasks
                          .length
                          ) {
                          for (
                            var
                              g = !
                              1,
                              y =
                              0; y <
                            d
                            .tasks
                            .length; y++
                            )
                            "21" ===
                            d
                            .tasks[
                              y
                              ]
                            .label &&
                            (g = !
                              0,
                              d
                              .tasks[
                                y
                                ]
                              .payload =
                              JSON
                              .stringify({
                                thread_id: a
                                  .toString(),
                                last_read_watermark_ts: n()
                              })
                              );
                          return g ?
                            (h.payload =
                              JSON
                              .stringify(
                                d
                                ),
                              l
                              .payload =
                              Buffer
                              .from(
                                JSON
                                .stringify(
                                  h
                                  )
                                ),
                              f[
                                0] =
                              generate(
                                l,
                                u
                                ),
                              e
                              .apply(
                                t,
                                f
                                )
                              ) :
                            e
                            .apply(
                              t,
                              f
                              )
                        }
                      }
                    }
                    e.apply(t,
                      f)
                  } catch (
                  b) {
                    e.apply(t,
                      f)
                  }
                }), c.on(
                "error",
                function(r) {
                  e.apply(t,
                    f)
                }), c.parse(l)
            }
          }), l
      }
    })

Ngoài ra đây là bài test chứng tỏ Javascript có thể hook WebSocket:


Nói chung cứ nghiên cứu code của J2Team chắc chắn có thể tạo ra cái Userscript chặn seen nặng 1KB, chả cần tới vài MB như cái extension của Chrome.

Cái extension J2Team này nó mã hóa code nên khó đọc, đó là điểm khiến mình khó ăn cắp công nghệ của nó được, cũng có thể gọi thằng này là mã nguồn đóng.
 
ech thì trang web phải hỗ trợ nữa, thường hiếm trang web nào code để dùng ech lắm, chỉ có web chạy cloudflare là 100% chạy đc ech vì cloudflare bật ech mặc định
mà không hiểu sao giờ qua chromium enable cái ech flag lên dùng doh rồi vẫn không được mà firefox lại bình thường trong khi thằng chromium ech support có từ lâu rồi
 
mà không hiểu sao giờ qua chromium enable cái ech flag lên dùng doh rồi vẫn không được mà firefox lại bình thường trong khi thằng chromium ech support có từ lâu rồi
cái đó cũng chịu, t thì ngược lại, vừa lên thử firefox 113 bật ech ko vào đc, còn chrome vào bt.
 
bật xong vẫn chả thấy gì, vào pornhub vẫn k đc, thôi sài vpn cho khỏe
Kết nối của trình duyệt web giờ nó phức tạp lắm, nên như @Bin_kutakoto_99 nói là phải khởi động lại máy, lý do là để:
  • Đóng kết nối gói tin HTTP3 đang mở, bởi nếu dùng lại nó vẫn gửi gói không có ECH
  • Đóng kết nối gói tin TLS đã gửi
  • Xóa cache DNS của Firefox bởi Firefox nó có DNS cache riêng của nó
  • Xóa cache TLS của Firefox
  • Xóa cache DNS của hệ thống, có thể dùng ipconfig /flushdns
Bét nhất điều nhỏ nhất phải làm cũng phải là khởi động lại trình duyệt.
Rất nhiều nguyên nhân để ECH chỉnh xong không hoạt động luôn.
 
Back
Top