Skip to content

FoxRefire/line-firefox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LINE Firefox用非公式ポート

パッチ手順

* static/js/ltsmSandbox.js

js-beautify -r ./static/js/ltsmSandbox.js

ファイル中の全てのwindow.originwindow.location.originlocation.origin"chrome-extension://ophjlpahpchlmihnnnihgmmeilfjmjjc"に置き換え

* manifest.json

    {
    //省略
    //省略
    "background": {
--      "service_worker": "background.js",
++      "scripts": ["background.js"],
        "type": "module"
    },
--  "sandbox": {
--      "pages": [
--      "ltsmSandbox.html",
--      "cropperSandbox.html"
--      ]
--  },
    //省略
    //省略
++  "content_security_policy": {
++      "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
++  },
++  "browser_specific_settings": {
++      "gecko": {
++          "id": "LINEPorted@FoxRefire"
++      }
++  },
--  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuOql7UFiY9pkxo4aAmuN2HHlZhNT5ws6knRdxYhOACJcm1sBfB7GIIMuBwtpYSb3B3m7jbrKqX2iDdgYLxE9ZmFjYgrD6p4D4H9/4FCz/a7h66vp0onNu2PmbZOEnpZKeCgUGMDDcXk673R8tPfkBbmuzQ0rvpc1Z8hWgHo1jLtnjpkTlH4vzu9FGRQFsCuqUzJPjoPpa2rozvTPpmiO2qfcqH3FJoGJbKwXIPZ74JI8cY//o6xFDVhugveN1VqoGZA8PsVliAa5fgBqDohfiv36xkuD88BqynKNn00hGibuXrj4L6mnR+9I68dhwAiXY01gihtI6KhbekToLfoJmwIDAQAB",
    "version": "3.7.0"
    }

* background.js

js-beautify -r ./background.js
--  chrome.action.onClicked.addListener((async () => {
--  //省略
--  //省略
--  }));
++  if(chrome.windows){
++      chrome.action.onClicked.addListener(() => {
++          chrome.windows.create({
++              url: "index.html",
++              type: "popup",
++              width: 710,
++              height: 570
++          });
++      });
++  } else {
++      chrome.action.onClicked.addListener(() => {
++          chrome.tabs.create({url: "index.html"})
++      })
++  }

Writeup

まず、一般的なポート手順であるマニフェスト内のbackground.service_workerをbackground.scriptsに変更しbrowser_specific_settingsの追加を行ってmoz-extension://Internal-UUID/index.htmlを開いてみる。 このままではWebAssembly実行でCSPエラーが発生したため更にマニフェストにcontent_security_policyを追加して再実行。 1

まだ、ltsm_not_availableというエラーが発生していたが、スタックトレースからは直接の原因箇所が明らかではなかったため、大元のエラー箇所を探ることにする 2

デバッガーからltsmSandboxを呼び出しているsetup()catch内にブレークポイントを設定して、監視式にconsole.log(e)と登録してみる 3

コンソールにさらに上流のエラーと見られるError: sandbox_errorが記録された 4

更にthis.sandboxをエクスポートしてみて実際にinit()sendMessage()を実行してみるとsendMessage内でsandbox_errorが発生していた 5

しかしスタックトレースから辿ったところこのエラーも根本原因のエラーではなく、jpクラス内でr(new Op(_d.SANDBOX_ERROR))というコードによってスローされていることが分かった。 更に根本的な原因を探るためjpクラスのコンストラクタ内にブレークポイントを設定し、監視式にconsole.log(t.data)を登録 6

根本原因とみられるエラーInvalid origin: moz-extension://Internal-UUIDが確認できた 7

ltsmSandbox.jsをjs-beautifyでインデントを整えてから開き、ファイル内でInvalid originと検索してみる コードを見ると拡張機能のオリジンに応じて使用するトークンを選択しているようだ。 moz-extension://Internal-UUIDはトークンと対応していないため、エラーが発生していることが分かった。 8

そこで、ltsmSandbox.js内の全ての現在のオリジンを取得している部分の処理を本来のオリジン"chrome-extension://ophjlpahpchlmihnnnihgmmeilfjmjjc"に上書きしてみたところ、正しく動作するようになった。 9 10

About

LINE 3.7.0 Firefox用非公式ポート

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published