ページ内のBase64エンコードされた文字列を全てデコード

    
      
  • /*
     * @title ページ内のBase64エンコードされた文字列を全てデコード
     * @description 全Textノードを舐めてそれらしい文字列をデコードしてみるという大胆さ
     * @include http://*
     * @include https://*
     * @license MIT License
     * @javascript_url
     */
    
    // base64 decoding code from http://let.hatelabo.jp/pacochi/let/gYC-y4q0j9PCQQ
    
    (()=>{
      // document.documentElementとかにすればtitleも含まれるけども。
      const iter = document.createNodeIterator(document.body, NodeFilter.SHOW_TEXT);
      while ((node = iter.nextNode()) !== null ) {
        node.nodeValue = node.nodeValue.replace(/[a-zA-Z0-9=\+\/\s\r\n]+/g, s => {
          // 関係ない文字列がエラーにならずに通ってしまうことがあるのでフィルタ。
          // Base64エンコードされてるなら大文字・小文字・数字ぐらい含んでるよね...たぶん。
          if (!(s.match(/[a-z]/) && s.match(/[A-Z]/) && s.match(/[0-9]/))) return s;
          try {
            s = atob(s.replace(/[\s\r\n]/g, ''));
          } catch(e) { return s; }
          const a = Uint8Array.from(s, c => c.charCodeAt(0));
          for (const charset of ["iso-2022-jp", "euc-jp", "utf-8", "sjis", "utf-16"]) {
            try {
              return new TextDecoder(charset, {fatal: true}).decode(a);
            } catch(e){}
          }
          return s;
        });
      }
    })();
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2017/04/15 16:21:04 - 2017-04-15
  2. 2017/04/15 16:19:03 - 2017-04-15