ページ内のBase64エンコードされた文字列を全てデコード
by
unarist
2017-04-15 [2017/04/15 16:21:04]
全Textノードを舐めてそれらしい文字列をデコードしてみるという大胆さ
/*
* @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 です。