好きなIPAファイルを署名不要で永続的に使えるアプリへ変換する「permasigner」が登場!&実際に使ってみた [JBApp]

(106)

IPAファイルからアプリをインストール…といえばAltStoreReProvision Rebornを使用するのが一般的ですが、個人のApple IDにて署名を行う関係上7日ごとに再署名の作業が必要という制約があります。

先日その制約を回避し、再署名不要で永続的にアプリを使用できるようになる脆弱性の存在が明かされ、実際に署名が不要なTaurineもリリースされています。

そして今回、好きなIPAファイルを署名不要で永続的に使えるアプリに変換するスクリプトがリリース!

スポンサーリンク
スポンサーリンク

permasigner

今回リリースされた「permasigner」は、好きなIPAファイルを署名不要で永続的に使えるようにするスクリプトとなっており、IPAファイルを指定すると変換作業などを行いつつ…DEBファイルとして出力してくれます。
完成したDEBファイルをデバイスへインストールすると…taurine-permanentと同様に、署名不要でずっと使える状態に。

実際にUnc0verのIPAファイルを変換して試してみましたが、以下の通り正常に動作しており、署名不要でデバイス再起動後の入獄環境でも起動できました!

howto-permanently-signs-ipa-on-jailbroken-permasigner-2

特徴

  • iOS 14.0〜14.8.1に対応
  • iOS 15.0〜15.4.1でも手法自体は使用可能だが、変換後のアプリインストールに脱獄環境が必要なため、iOS 15.xで使用するには脱獄がリリースされる必要がある
  • 好きなIPAファイル(アプリ)を指定し、署名不要な脱獄アプリ(DEBファイル)へと変換してくれる
  • 変換後は「DEBファイル」となるため、それをインストールするために脱獄環境が必要
  • インストールされたアプリは、デバイス再起動後の入獄環境でも動作可能
  • 署名不要なため、AltStoreやReProvision Rebronでの再署名作業が不要となり、署名切れによるアプリが起動不可…という事も無くなる!

スクリプトが使用可能な環境は?

スクリプトはMac上で動作するものとして作成されており、現時点ではそれ以外のOSでは動作しない状況となっています。
ただし、今後Linuxへの対応は考えられているとのことです。

また、Windows向けにはどうか?という点ですが、これについて開発者さんからは触れられていません。
他の開発者さんからは…スクリプト自体はPythonベースなためWindowsへの移植も可能ではあるだろうが、必要となるバイナリなどがWindowsに対応出来るかが問題である…とされています。

実際に使ってみた! [準備編]

ということで、実際に今回のスクリプト「permasigner」を使用し、IPAファイルを署名不要なアプリへと変換してみました。

まずはpermasignerを使えるようにするためにダウンロードやインストールなどの作業が必要なので、最初にこちらをやっちゃいましょう。

準備① permasignerのダウンロード

Github「permasigner」より、各種ファイルを全てダウンロードします。
ブラウザからダウンロードすると問題が発生する原因にもなりやすいため、ターミナルより以下のコマンドを実行し、ダウンロードするのが推奨。

git clone https://github.com/itsnebulalol/permasigner

準備② permasignerフォルダへ移動

準備①にてダウンロードしたpermasignerのフォルダへ移動します。通常は準備①コマンドを実行したディレクトリ直下にダウンロードされるため、以下コマンドで移動出来るはずです。

cd permasigner/

ダウンロード先が直下でなかったり、上記コマンドでエラーになる場合は【cd (末尾に半角スペース)】まで入力した後、Finderから「permasigner」フォルダをターミナルへドラッグ&ドロップすることでパスを挿入することが出来ます。

準備③ 必要な物をインストール

permasignerの動作に必要な物を以下コマンドにてインストールしていきます。必要な物は最後に指定されているrequirements.txtに記載されているため、以下コマンドだけでインストール可能です。

pip install -r requirements.txt

公式手順では上記「pip」コマンドとなっていますが、私の環境(MacOS Monterey以降かな?)ではpipではなく「pip3」での実行する必要がありました。
そのため、私の環境で実行したコマンドは以下になります。

pip3 install -r requirements.txt

準備④ dpkgをインストール

更に「dpkg」パッケージもインストールする必要があります。以下コマンドを実行し、インストールを行いましょう。

brew install dpkg

「brew」コマンドからインストールを行っていますが、純正Macには備わっていないため、Homebrewを未インストールの方は先にそちらをインストールする必要があります。
Homebrewのインストールについては公式サイトの先頭にかかれているコマンドを実行してあげればOKです。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

permasignerを使用して変換する!

前項までの手順でpermasignerを使用する準備が整いましたので、ここからは実際にpermasignerを使用してIPAファイルを変換していきます。

今回は分かりやすいように【unc0ver】を署名不要なアプリへと変換していきますが、元となるIPAファイルに制限はなく、基本的にはどの様なアプリのIPAファイルであっても使用可能です。
ただし、ごく一部のアプリについては資格部分「app.entitlements」を編集する必要が出てくるものもあるとのこと(一部エミュアプリなどが該当するそうです)。

① スクリプトの実行!

ターミナルが「permasigner」フォルダにいる状態で、以下コマンドを使用してpermasignerスクリプトを実行します。

python3 main.py

実行時にパーミッション関連のエラーが発生する場合は、以下コマンドを実行してから再度試してみてください。

sudo chmod +x main.py

② IPAファイルの保管場所を指定

main.pyを実行すると以下のような画面で停止します。
これは「指定するIPAファイルはオンライン上のURLを指定するか?それともローカルに保存されているIPAファイルを指定するか?」という選択肢になります。
基本的にはブラウザなどからIPAファイルをダウンロードし、そちらを指定して実行するのが余計な問題が起こらず安全です。

  • URLで指定する:【external】と入力
  • 保存済みIPAファイルを指定する:【local】と入力

howto-permanently-signs-ipa-on-jailbroken-permasigner-3

③ IPAファイルのパスを入力

次に以下のような画面で停止し、IPAファイルのファイルパスの入力を要求されます。
手順②にて「external」を指定した場合にはIPAファイルのダウンロードURLを、「local」を指定した場合にはIPAファイルのファイルパスを入力してください。

IPAファイルのファイルパスはターミナルへIPAファイルをドラッグ&ドロップすると自動挿入されるため、ミスがなくオススメ。

howto-permanently-signs-ipa-on-jailbroken-permasigner-4

IPAファイルをドラッグ&ドロップした際、以下画像のように末尾にスペースが自動挿入される場合があります。スペースがあるとエラーが出てしまうため、末尾のスペースは削除しておきましょう。

howto-permanently-signs-ipa-on-jailbroken-permasigner-5

④ DEBファイルへの変換完了…!

DEBファイルへの変換が完了するまで待ち、スクリプトの動作が終了すれば…変換作業の完了です!
完成したDEBファイルは「output」フォルダ内へ保存されていますので、こちらをデバイスへ転送し、インストール作業を行っていきます。

howto-permanently-signs-ipa-on-jailbroken-permasigner-6

DEBファイルをインストール

最後に…IPAファイルから変換したDEBファイルを、デバイスへインストールしていきます!
とはいっても一般的なDEBファイルと手順は同じで、Filza File Managerなどからインストールを行うだけ。

① DEBファイルをFilzaへ転送

インストールのために使う脱獄アプリはどれでも大丈夫なのですが、今回はよく使用されるFilza File Managerで行っていきます。

変換し完成したDEBファイルをどの様な手順でもイイのでデバイスへ転送(AirDropやiCloudドライブ経由が楽ちんです)。
そして共有よりFilzaへ転送してあげましょう。

howto-permanently-signs-ipa-on-jailbroken-permasigner-7

② Filzaでインストールを行う

Filzaへ転送されたDEBファイル(.deb)を選択し、画面右上「インストール」よりインストールを実行してあげます。

howto-permanently-signs-ipa-on-jailbroken-permasigner-8

③ インストール完了後は

インストールが完了した後は、画面右上「アクション」を選択し、「uicache」を実行してください。
さらに、uicache後は再度アクションから「リスプリング」を実行すれば…ホーム画面へアプリが出現するはずです!
これで署名不要なUnc0verがデバイスへインストール出来た!ということになります。

howto-permanently-signs-ipa-on-jailbroken-permasigner-9

おまけ: 削除するには?

本手順でインストールされたアプリ(今回の記事ではUnc0ver)は、CydiaやSileoなどからは通常の脱獄アプリと同じ扱いがされます。
そのため、アプリを削除したい場合はホーム画面から削除するのではなく、CydiaやSileoからパッケージを削除してください。

基本的にパッケージ名はアプリ名が使われますので、判別もしやすいかと思います。

howto-permanently-signs-ipa-on-jailbroken-permasigner-10

すっごい…。脆弱性の詳細&PoCの公開から1日ちょっとでここまで話が進むとは…スゴイ…。

もちろんAltStoreやReProvision Rebronにて再署名の自動化をさせておけばイイ話ではあるのですが、再署名のミスなどに怯える必要もなく、楽すぎる…!
もちろんIPAファイルからの変換作業は必要なものの(Unc0verなどの有名所はそのうちCydiaなどからインストール出来るようになりそうですが…)、作業自体に難しい部分はなく、この程度の作業で出来ちゃうのであれば…もう快適すぎて…。

コメント

  1. 革命ですな

  2. これはえぐい

  3. すげぇぇぇえ!!

  4. 大革命起きててワロタ

  5. Windows対応してくり

  6. これはLINE2いけるかな?

  7. permasignerはiOS 14.0〜14.8.1に対応だそうですが、Unc0verがiOS14.3までしか対応していないので14.4は無理?ですか??

  8. すげえの来たけどios15なので使えず
    かなc

    • 15.4.1以下ならまだ希望ある。

  9. こんなに早く対応してくれるとはよっぽど実用性のある脆弱性なんだろうな
    期待できそうだ

  10. これ入れられる上限ないなら2つまでの制約すらなくなるのか…

    • 3つ以上インストールできる回避があるよ

      • kwsk

        • NoFreeAppLimitのこと?

        • kawasaki?

    • 試した限りでは上限はなさそうかなと思います(5つまでは確認しました)

  11. なんか、一気にぶっ飛んだなぁ!

  12. 例えばios14.xでアプリインストール後にios15にした場合でも同様に永続的に使えるんですかね

    • 多分ダメだと思う。

    • システムアプリはOSを更新したタイミングで更新されるから多分消される

  13. これは通常アプリと同じでサンドボックス化されてるのか、システムアプリ扱いなのか。
    システムアプリ扱いだとしたら、DocumentsとかLibrary内のファイルはアプリ削除しただけだと消えなさそう。
    そこのとこどうでした?

    • 入獄したら削除されると思います。

      • そうだけどそういう事じゃない

    • 試してみたらシステムアプリ扱いですね。
      ゴミは残りそうなので気になる人は気になるかも。逆もまた然り。

  14. これ非脱獄でも出来たらいいのにな…

  15. Mac対応→Win対応→単体で可能

    という流れが見えた

  16. OS 14.0〜14.8.1に対応とありますが、これで作成したdebファイルはそれ以下のOSにはインストできないのですね?

    • そうですね

      • ありがとうございます。
        今後に期待ですね。

    • インストール出来るかどうか…は元のIPAファイル側の設定が継承されているはずなので、そちらが許可されていればインストール自体は可能かと思われます。
      ただし、今回の署名不要に使われている脆弱性が、現時点ではiOS 13以下だとまだ機能しないため、permasignerの対応バージョンはiOS 14.0以降となっています。

  17. JB環境に関わりなくiOS 14.4までは使えて、14.5以降はインストール時に弾かれてインストールが出来ないようなアプリにも使用可能なのでしょうか?
    例えばAdBlock 2.8.2.ipa
    現在はそれらを使用したいために、iOS 14.4.2で留めています。

    • 脱獄関係ないけどiFunBoxでインストールできない?iPad非対応アプリはいける。

  18. AltStoreが一向に自動で再署名してくれないし、だけどMac持ってない…
    Windows対応してくれればなぁ。

    • ほぼ失敗するけどショートカット使えば自動署名できるよ。
      ほぼ失敗するけどね!

    • Hackintoshすれば?

    • ホントにたまーに自動署名してくれるから、忘れてた!ってなった時に確認して7daysにっなってたら「今日はついてるなー」程度の運試し感覚でやってるわ

  19. これってpermasignerさえ通したらいいってことなら脱獄環境あればそのdebファイル公開してくれたら誰でもいいってことですか?

    • ものにもよりますが、基本的にはそうなります

  20. 見知らぬエラーが2,3個出てきて手間取ったけどなんとかunc0verインストールできたぁ〜

  21. ipa2debの完全版ですな!

  22. インスールをファイラーからなんて、ある意味iOSのWindows化だな

  23. Linux既に対応してて草
    仕事早すぎ(笑)

    • までぃ?やってみよー

  24. M1 Mac mini だと sudo pip3 install -r requirements.txt かな

  25. iOS12でも使えるようになってほしい

    • もう見向きもされないバージョンでは?
      わざわざ対応させる意味が??

  26. インストールは終わったが、署名不要なUnc0verはどこで判別しますか?

    • ホーム画面から見た目上の判断は出来ない(署名以外は同一アプリなため)ので、アプリの配置されている場所などで判断してください

      • ReProvisionの画面にUnc0verの署名残が表示される。プロファイルもUncoに検証済になっている。これは変換失敗かな?放置して7日後が楽しみ…

        • 署名をされているわけではないので、プロファイルが追加されたり、ReProvision Rebronの画面にアプリが表示されることはありません。
          そちらに残っている…ということであれば、通常署名でインストールしたUnc0verがデバイス内に残っていると思われます。

  27. That file does not exist! Make sure you’re using a direct path to the IPA file.
    から進みません。ファイルの場所はいろいろ変えてみたんですが、、

    • きちんとしたフルパスで入力されているかを確認してみてください。
      もしくは、permasignerフォルダ内にIPAファイルを配置し、ターミナルでpermasignerフォルダ内へ移動した上でそちらから実行し、IPAファイルの指定時にIPAファイル名のみ(例えばunc0ver_Release_8.0.2.ipaとだけ)入力する方法でも大丈夫です

      • 回答ありがとうございます。ファイルをターミナルにドロップしてますのでパスは間違ってないはずなんですけどね〜、ご教授頂いた方法などいろいろやってみます。

        • 最後の半角スペースを消しました?

          • もちろん消してます。が、やはりエラーでダメですね。
            MacのOSが10.15のカタリナだからかな?

          • permasigner自体はCatalinaでも動作するはずです。
            使い方等にミスがない場合、環境に起因する可能性が高いので、必要パッケージのインストールやリンクに問題が発生していないかを確認してみるとイイかもしれません。

          • Mac OS X 10.5.0 (?) or laterって書いてあるからそれだろうなぁ

          • それにしてもカタリナだけ無理ってことはないでしょ

      • 長文すみません。以下の文が出ますが、これは成功しているのでしょうか?
        OUTPUTフォルダもどこにあるかわかりません。もう一度ご教授お願いします。

        [*] Reading plist…
        Found plist!
        Executable found.
        Found information about the app!

        [*] Preparing deb file…
        Making directories…
        Copying deb file scripts and control…
        Copying app files…
        Traceback (most recent call last):
        File “main.py”, line 335, in
        main(args)
        File “main.py”, line 290, in main
        copytree(f”{tmpfolder}/app/Payload/{folder}”, f”{tmpfolder}/deb/Applications/{folder}”, dirs_exist_ok=False)
        TypeError: copytree() got an unexpected keyword argument ‘dirs_exist_ok’

        • 私も同様で、質問しています。
          サンタさんが返信してくれているので、読んでみて下さい。

  28. 15.1待機勢なので試せないから気になるんですけど、これでインストールしたアプリは、ホーム画面長押しぷるぷる状態から、消せるものなんですか?

    • プル消せるよ

    • 基本的にはホーム画面から消すことも出来ますが、パッケージ自体は削除されないため、ホーム画面からではなくCydiaなどパッケージマネージャからアンインストールしていただくのが安全です

      • お二方、ありがとうございます。
        debでインストールしてるのに、ホーム画面で消せるっていうのはなんとも不思議な感覚ですね。

  29. 自分が使ってるストアアプリもIPAを持っていればDEBインストール出来る
    滅多に無いけど古いVerの方が良かったなんて場合は便利だよね
    これでiCloudもAppleStoreも全く必要無くなった

  30. 再,deb化の際に、エラーが出ます。
    エラーの意味を、教えて下さい。
    copytree(f”{tmpfolder}/app/Payload/{folder}”, f”{tmpfolder}/deb/Applications/{folder}”, dirs_exist_ok=False)
    TypeError: copytree() got an unexpected keyword argument ‘dirs_exist_ok’

    • copytree部分でエラーが出ているということになります。
      環境にもよりますが、まずはpython3で実行されているかを確認してみてください。

      • ありがとうございます。

        ***@MacBook-Air permasigner % python3 main.py

        IPA Permasigner | Version main-11b7790
        Program created by Nebula | Original scripts created by zhuowei | CoreTrust bypass by Linus Henze

        [?] Would you like to use an IPA stored on the web, or on your system? [external, local] python3 main.py
        [*] Created temporary directory.

        [-] That is not a valid option!
        ***@MacBook-Air permasigner % python3 main.py

        IPA Permasigner | Version main-11b7790
        Program created by Nebula | Original scripts created by zhuowei | CoreTrust bypass by Linus Henze

        [?] Would you like to use an IPA stored on the web, or on your system? [external, local] local
        [*] Created temporary directory.

        [?] Paste in the path to an IPA in your file system: /Users/***/Downloads/unc0ver_Release_8.0.2.ipa

        [*] Unzipping IPA…

        [*] Reading plist…
        Found plist!
        Executable found.
        Found information about the app!

        [*] Preparing deb file…
        Making directories…
        Copying deb file scripts and control…
        Copying app files…
        Traceback (most recent call last):
        File “main.py”, line 322, in
        main(args)
        File “main.py”, line 280, in main
        copytree(f”{tmpfolder}/app/Payload/{folder}”, f”{tmpfolder}/deb/Applications/{folder}”, dirs_exist_ok=False)
        TypeError: copytree() got an unexpected keyword argument ‘dirs_exist_ok’
        ***@MacBook-Air permasigner %

        python3で実行して、エラーが出るpermasignerに戻ります。(変わります)
        macの種類は、関係ないでしょうか?
        MacBook Air バージョン 10.15.7です。

        • python3 の version は,
          python 3.8以降でしょうか.

          • 2、〜でしたので、3.9.5にしてみました。
             ***@MacBook-Air permasigner % python –version

            Python 3.9.5
            ***@MacBook-Air permasigner % python3 main.py

            Traceback (most recent call last):
            File “/Users/***/permasigner/main.py”, line 5, in
            import requests
            ModuleNotFoundError: No module named ‘requests’
            kinta@MacBook-Air permasigner %

            モジュールをどうして良いか分かりません汗

          • requests モジュールが
            pip3 install -r requirements.txt
            でインストールされてなかったということだね

      • [*] Unzipping IPA…

        [*] Reading plist…
        Found plist!
        Executable found.
        Found information about the app!

        [*] Preparing deb file…
        Making directories…
        Copying deb file scripts and control…
        Copying app files…
        Changing deb file scripts permissions…
        Changing app executable permissions…

        [*] Signing app…
        Signing with ldid…

        [*] Packaging the deb file…
        dyld: Library not loaded: @rpath/libmd.0.dylib
        Referenced from: /Users/***/permasigner/./dpkg-deb
        Reason: image not found

        [*] We are finished!
        [*] Copy the newly created deb from the output folder to your jailbroken iDevice and install it!
        [*] The app will continue to work when rebooted to stock.  

        これで完成でしょうか?
        outputフォルダが空ですが、まだ作業が必要でしょうか?

        • 解決しました、お騒がせしました。
          本当の原因は分かりませんが、permasignerのフォルダの一部が重複していたので、削除して再インストールしたら成功しました。
          ですがUnc0verは、18/32で失敗しました。
          iPhone XS14.8

          • unc0verの場合は,環境によって途中で止まって上手くいかない場合があるらしい.
            私のは,繰り返し脱獄を試みると上手く行くようになりました.@ iPhone 12 Pro + unc0ver v8.0.2 debファイル化

          • 繰り返しとは、どういった作業でしょうか?
            脱獄できない時点で、繰り返しできないと思います、、、
            unc0ver失敗した場合、再起動せず再度unc0verした場合、途中で再起動かかってしまいます。

  31. 最後のFilzaでインストールの時は、既存のUncvaはどうしますか?先に削除するのか、またはそのままで上書きされるのですか?

    • どれもいいですけど、上書きしません。削除しない場合、2つのicon(既存とdebでインストールした)を表示します。

    • 今回の手法でインストールしたアプリと、通常署名でインストールしたアプリは、別アプリとして認識されます。
      そのため、それらは共存することが可能です。
      先に通常署名でインストールしたアプリを削除してしまっても大丈夫ですし、今回の手法でインストールしたアプリが正常に動作する事を確認してから削除しても大丈夫です。
      もちろん共存が可能なので、2つともそのまま共存させつつ使い続けることも出来ます。

  32. macOS 10.14 Mojaveでは動作しないとかありますか?

    • 10.14.6で問題なく作動しました。

    • 動作すると思われます。
      うまく動作していない場合は、使い方 or 環境に起因する物と思われますので、エラー文などを確認してみるとイイかもしれません。

    • ありがとうございます。1カラ挑戦してみます。

    • pip install -r requirements.txt
      pip3 install -r requirements.txt

      で”pip: Command not found.” ”pip3: Command not found.”と出て先へ進むことが出来ません。

      何か足らないですか?

      • pipが無いって返されてるよ

      • pipがインストール出来ません。

    • Homebrewのインストールで、Illegal variable name.
      となりますが、コレはちゃんとインストール出来てませんよね?

  33. 未だにios13.5なんだけど…

    • 15.3よりいい

  34. インストールしようとしても、Processing triggers for cydia (1.1.36) …bash-5.0#で止まってしまいます。

    • 記事中の画像を見ていただくと分かりやすいですが、それで正常です。

  35. これって思うんだけど脱獄端末でターミナル使って同じことできるんじゃね?

    • どうなんだろうね?
      iOSは別物で、それ用にコンパイルしなきゃならないとかなら素直にパソコンでやった方が楽。

    • permasignerのPythonスクリプトに手を加えれば、もしかしたら動作するかもしれません。

  36. Linux構築するの面倒だったからAndroidのUserLAndでやったらうまくいった

  37. GitHubに「unc0ver will probably fail to jailbreak. It works for some people but not everyone.」ってあったんですが、皆さんunc0verうまく動いてますか?

    • 私は18/32で毎回エラーが出て止まってしまいます。

  38. LinuxにてUnc0verのIPAファイルを変換して署名不要のdebファイル作成成功です
    SANTAさんの記事はMacでのやり方なのでLinnuxだと2ヶ所ほどコマンド実行が増えますが無事作成することができました
    いつもわかりやすい説明ありがとうございます

  39. Mac OS X 10.15 Catarinaで作ったunc0verは 18/32 まで
    Ubuntu 21.10で作ったunc0verは 19/32 まで
    の脱獄途中で失敗してしまう…
    ipaだと普通に一発で成功。
    なんなんだろう…

    • unc0verは一部の人は動くけどほとんどの人は動かん的なこと書いてある

    • Mac OS X 10.14.6で作ったUnc0verは動かない。署名済Unc0verで脱獄後なら起動する。エラーなどはなかったと思う。xs max ios14.8

      • 脱獄後に起動しても・・・
        この手法で作成したunc0verで脱獄できた人はいるのでしょうか?

        • 出来ましたよ。Unc0ver debでのjailbreak

    • Unc0verは一部環境の方のみ動作する様ですが、多くの場合は18/32ステップなどで停止してしまうようです。
      ちなみに、私の環境では18で停止後にUnc0verをスイッチャーから完全終了させ、その後改めてUnc0verを実行するとうまくいきました。
      ただし、他の環境で試したところ2回目の実行でデバイスが再起動してしまうという状況です。
      permasignerの作者さんからもこの点については言われており、Taurineが対応アップデートされた様にUnc0ver側の対応が必要かもしれません。

  40. from pip._internal.index import PackageFinder
    ImportError: cannot import name ‘PackageFinder’ from ‘pip._internal.index’ (/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/pip/_internal/index/__init__.py)

    pip3 installのところで上記エラーが出て進めません。
    何か良い対処法ありますか?

スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました