[iOS] SemiRestore 11の動作をコマンドからやってみた&データを維持しつつ脱獄対策を回避できるかも検証

(61)

iOSバージョンを維持したまま入獄&データの初期化を行える「SemiRestore 11 / Rollectra」がリリースされていますが、これと同じ動作をコマンドからも出来るよ!という事がCoolStar氏より報告されていたので、実際に試してみました…!

また、入獄だけ行ってデータを削除しない…といった動作も可能なのか、その場合脱獄対策はどうなるのか、この辺りも少しだけ検証。

*今回の記事は何かの「方法・手順」という物ではなく、単純に私がやりたかった事をやっているだけで、ダラダラ〜っとした物を書きたかっただけなので、長いですし…お暇な時にでもどうぞ…。

スポンサーリンク

コマンドから実行可能?

CoolStar氏より「SemiRestore 11 / Rollectraと同じ事はコマンドから行える」という事で、その手順が紹介されています。

それによると、二つのコマンドすべてのコンテンツと設定を消去を実行するだけなのだとか。
これはSemiRestore 11が行っている手順と全く一緒の様です。

手順は…

*こちらはCoolStar氏から提示された手法ですが、一部抜けているポイントがあり、素直にこのままやると…失敗します。その点については次項以降に…*

  1. 初めにデバイスのGUIDを調べます、以下のコマンドを実行。ここで出力された英数字の羅列を使用します。
    ioreg -p IODeviceTree -l | grep boot-manifest-hash

  2. 続いて、Electra脱獄時に作成された純正ファイルシステムのスナップショット(バックアップ)「orig-fs」の名前を変更。
    変更後の名前は「com.apple.os.update-[GUID]」となります。

    snapUtil -n orig-fs com.apple.os.update-[GUID] /

  3. 最後に、設定アプリから「すべてのコンテンツと設定を消去」を実行。

準備編

ということで、実際にやってみました。以下、色々と躓きながら…のお話です。

最初の問題「snapUtil」

コマンド「ioreg」はもちろん脱獄直後でも使えるのですが、スナップショットの名前を変更する「snapUtil」コマンドがありません。

Electra(iOS 11.1.2以下用)時代にどこかで見た記憶があるのですが、現在はElectraリポジトリにもなく、その他リポジトリを探してみても見当たらず…。

ということで、仕方ないので…こちら【GitHub – ahl/apfs】でソースが公開されているため、自分でコンパイルして使用することに。
また、最終的には【snapUtilOpRoot.c · GitHub】の方にオプションがひとつ追加されているので、そちらと合体・編集しながら使用しました。
ちなみに、iOS用にコンパイルするには少し修正が必要な箇所が存在したので、エラーを見ながら修正していきましょう。

まだまだ続くsnapUtil地獄

ちなみに、snapUtil実行時に『Operation not Permitted』が出てしまったので、これについては前Electraの【Ent.plist · coolstar/electra · GitHub】をEntitlementsとして流用、Makefileを色々と編集することで…どうにか解消し、実行可能な状態まで持っていくことが出来ました。

snapUtilを/usr/bin/に配置し、実行してみると…動いたよ!

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-2

失敗編

さて、これで準備が整ったので、実際にCoolStar氏から報告された手法を実践してみようと思います。

素直な私は、何かを間違えた

ioreg -p IODeviceTree -l | grep boot-manifest-hash」を実行すると以下のような形で出力されます。
目的のGUIDは<>に挟まれた英数字の羅列で、デバイスにより文字数が増減しますが、これ。

例:    | |   "boot-manifest-hash" = <7aa43c4c9e610502f82bcab53378a8f1c7709077>

ということで、CoolStar氏の説明通りですと、次のコマンドは以下の様な形になります。
ちなみに、このコマンドはElectra脱獄時に作成された純正ファイルシステムのスナップショット「orig-fs」を「com.apple.os.update-[GUID]」という名前に変更する…という物です。

例:snapUtil -n orig-fs com.apple.os.update-7aa43c4c9e610502f82bcab53378a8f1c7709077 /

リネームが出来たので、最後に設定アプリ > 一般 > リセット > すべてのコンテンツと設定を消去を実行して、完了。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-3

出来ないじゃないか…!

リセットを行ったため、全てのユーザーデータが消えたのは当たり前なのですが、脱獄関連のファイル何も消えてないじゃないか…。これは失敗だ…。
Cydiaなどのアイコンはキャッシュ関係で残っているだけかと思いきや、Electraでは「Enable Jailbreak」の表示。これは入獄が出来ていない証拠です。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-4semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-5

ちなみに…

ちなみに、脱獄環境なのに「すべてのコンテンツと設定を消去」を実行してしまうと、以下のエラーが発生してCydiaがまともに使えなくなります。
これはDelectraなどで対処するしかなく、このまま作業を進めることが出来ません。
私の場合は検証…という目的があったので、Futurerestoreを使ってiOS 11.3.1に復元しなおし、Electraで脱獄、ある程度脱獄アプリをインストールして環境復帰…。と何度も繰り返しました。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-6

成功編

実は、そんなはずは無いだろう…と何度も失敗編の方法を繰り返し行っていたのですが、どうしても出来ない。
ならば…と、snapUtilのオプションを使って無理やり再起動時にスナップショットをマウントさせてやると入獄は出来るのだけど、それをするとElectraで再脱獄する時に「Error: rootfs remount」が発生して、どうしても回避することが出来ない。

そのため、そもそも変更後のスナップショットの名前が間違っているのでは…と思い、色々とドキュメントなどを読み漁って見たのですが…やっぱり間違えてたよ!

大文字でした

先程の失敗した手順では出力されたGUIDを「com.apple.os.update-[GUID]」として、そのまま以下のように使いました。これが大きな間違い

例:snapUtil -n orig-fs com.apple.os.update-7aa43c4c9e610502f82bcab53378a8f1c7709077 /

実際は、以下の様にGUIDを全て”大文字”で記入する必要があります。たったこれだけの違い。

例:snapUtil -n orig-fs com.apple.os.update-7AA43C4C9E610502F82BCAB53378A8F1C7709077 /

実際の手順はこちら

ioreg -p IODeviceTree -l | grep boot-manifest-hash」を実行して<>に挟まれた英数字の羅列(GUID)をコピーし、全て大文字に変換。

例:    | |   "boot-manifest-hash" = <7aa43c4c9e610502f82bcab53378a8f1c7709077>

大文字にしたGUIDをコマンド「snapUtil -n orig-fs com.apple.os.update-[GUID] /」に組み込み、実行。

例:snapUtil -n orig-fs com.apple.os.update-7AA43C4C9E610502F82BCAB53378A8F1C7709077 /

リネームが出来たので、最後に設定アプリ > 一般 > リセット > すべてのコンテンツと設定を消去を実行して、完了。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-3

成功したよ!

ドキドキしながらiOSの初期設定を終え、ホーム画面へ戻ると…Cydiaアイコンなども全部消えた状態に!
Electraを再インストールして表示を確かめてみると、きちんと「Jailbreak」となっており、現在入獄となっている事が分かりました。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-7semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-9

結論【SemiRestore 11 / Rollectraを使うのが、すげぇ楽】

スナップショット名が合っていれば…

今回の作業でわかったことは、スナップショット名が「com.apple.os.update-[大文字GUID]」となっていれば、再起動時に書き戻しが発生して入獄となる…という事。

であれば、最後のリセット作業は要らないんじゃ…と思って、次のステップへ。

データを維持しつつ…編

一番気になるであろう「ユーザーデータ(アプリなど)を維持しつつ入獄は出来ないのか?」を、実際に試してみました。

方法はほぼ同じ

ioreg -p IODeviceTree -l | grep boot-manifest-hash」を実行して<>に挟まれた英数字の羅列(GUID)をコピーし、全て大文字に変換。

例:    | |   "boot-manifest-hash" = <7aa43c4c9e610502f82bcab53378a8f1c7709077>

大文字にしたGUIDをコマンド「snapUtil -n orig-fs com.apple.os.update-[GUID] /」に組み込み、実行。

例:snapUtil -n orig-fs com.apple.os.update-7AA43C4C9E610502F82BCAB53378A8F1C7709077 /

最後にリセットではなく、普通にデバイスを再起動する。もしくは、コマンドの「reboot」を使用してもオーケー。

すると…

リセットではなく、単純に再起動をしただけでも入獄状態となりました。
Electraの「Jailbreak」という表記で入獄の確認ができます。ただし、Cydiaなど脱獄関連のアプリがキャッシュの関係でホーム画面に残ってしまうのは、仕様。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-8semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-9

Cydiaなどを消すには…

ホーム画面に残ってしまうCydiaなどの脱獄関連のアプリアイコンですが、既に実体はなく、uicacheと同じ様な事が起これば消えます。
再起動を繰り返すといつの間にかなくなっている…事が多いのですが、タイミングが分かりにくく、地味に大変。

そこで、適当なダミーアプリを作成し、info.plist「CFBundleIdentifier」の内容を消したいアプリと同じ物に設定(Cydiaであれば”com.saurik.Cydia”)。
これをCydia Impactorなどでインストールすると、元あったアイコンに上書きでインストールされます。

すると通常のipaからインストールしたアプリと同じ扱いになるので、ホーム画面からこいつを削除してあげれば…Cydiaアイコンなども消せる!

まぁ……そこまでやる必要があるかは微妙ですが…。どっかのフォルダにまとめて放置しておけば、そのうち消えそうです。

脱獄対策を回避出来ているか、検証

さてさて、更に気になるのはこの状態で脱獄対策は発動しないのか?です。

今回はコメントでよく頂くアプリ「どうぶつの森」、「パズドラレーダー」、「Fate/GO(FGO)」、「妖怪ウォッチ ワールド」で検証してみました(他にこれ以上に強力な脱獄対策が入っているアプリがあれば教えてください…)。

どうぶつの森

今回のアプリ達では「どうぶつの森」が対策手法が違ったはずなので、ある程度予想はしていたのですが…単純にスナップショットを書き戻す入獄作業だけでも起動可能となりました。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-10

その他はだめ

ですが、それ以外の3アプリはダメ。脱獄対策が発動してしまい、起動することが出来ません。
我々脱獄犯からは悪名高い「CrackProof」と呼ばれる脱獄対策が入っているアプリがあるだけに、一筋縄では行きません。

あと、FGOさん…脱獄対策が発動するまでに時間が掛かり、最終的にメールアプリに飛ばすのやめて欲しい…。

起動可能になったよ

とは言え、ファイルシステムは全て純正状態に戻っており、あと反応する部分…といえばユーザーデータ内の何らかのファイルを検知しているのだろう…と思ったので、色々いじってみた所…起動したよ!

一番やってる人が多そうなFGOさんも、この通り。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-11

パズドラレーダー、妖怪ウォッチワールドも、この通り。これら3アプリは全て同じファイルを削除しただけで起動できるようになりました。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-12semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-13

これを削除した

分かってしまえば非常に簡単だったのですが、【/var/lib/】フォルダを削除する事で3アプリ全てが脱獄対策を発動しなくなりました。

「ユーザーデータどうやって削除するの」という点ですが、ちょうど昨日…入獄環境で使える『FilzaEscaped』がリリースされていたので、こちらを使いましょう。
成功率が低いので起動するまでが大変ですが、起動してしまえば普段通り使えます。

semirestore11-manually-snaputil-jailbreak-detection-bypass-for-jailed-20180721-14

【追記】他のアプリの脱獄対策は…

追記2018/07/21 22時00分:Twitter等で教えていただいた、他の脱獄対策が入っているアプリについても検証しました。

アプリ名 回避可能? 備考
dTV 入獄時点で回避
torne /var/lib/削除で回避
刀使ノ巫女 刻みし一閃の燈火 /var/lib/削除で回避
戦国アクションパズル DJノブナガ 入獄時点で回避
ディバインゲート /var/lib/削除で回避
歌マクロス スマホDeカルチャー /var/lib/削除で回避
きららファンタジア /var/lib/削除で回避
プリンセスコネクト!Re:Dive /var/lib/削除で回避
Liberty Liteでも可
ヴァルキリーアナトミア -ジ・オリジン- /var/lib/削除で回避

今回色々と弄っていてわかったことは、脱獄対策を回避するための入獄モードは…こういう事かもしれないという点でしょうか。

ありえる流れとしては「脱獄環境のスナップショットを作成」>「ユーザーデータ内にある脱獄関連のフォルダやファイルを退避」>「純正スナップショットで書き戻し」…といった感じ?
再脱獄時には「脱獄環境のスナップショットを書き戻す」>「退避したフォルダやファイルを戻す」という動作になる雰囲気?

正直、実際に登場してみるまでは分かりませんが、とりあえず、今回の方法で完全な入獄や、ユーザーデータを維持したまま入獄&脱獄対策の回避が行えるという事が判明。

この辺り、色々と面白いのでちょっと今後も遊んでみようかな…と思ったり。

〆〆

だっらだらしたブログを書きたくなり、たまには…と書いてみたはイイものの…すっごい長くなっちゃった!お暇な時にでもお読みいただけていれば、幸いです。

また、今回の記事が何かの役に立つのかと言われると、何とも言えず…。
本当はsnapUtilを公開できればイイのですが、ライセンス関係が全く分からなくてですね…。どういった風に扱えば良いのやら…と。

コメント

  1. 脱獄対策を回避できるかも

    脱獄対策を回避できるかを

    • 普通に合ってない?
      コマンドから実行できるかを主目的として、それで脱獄対策の回避ができるかをおまけで検証ってことでしょう

    • 粗探しに躍起になってるとこうなるってはっきりわかんだね

  2. やはり脱獄したまま起動させたいよなあ…

  3. はぇ~…本当にデータ維持したままの入獄&検知回避出来るんですなぁ
    入獄モード実装も不可能なことではないんですね

    そして、こんなレポートを載せられたらやってみたくなる…サブ機使おうかな

  4. これ入獄モードに入ったあとの再脱獄ってどうやるんだろう?
    「cydiaや他アイコンは残る」とあるけど
    普通にそこからまた脱獄ができるんだろうか

    • 普通にElectraからでしょ

    • 実体は既になく、ただキャッシュ内にアイコンが残ってしまっているだけです。なので、そちらは気にしないでください。
      再脱獄自体はElectraを使って最初からやり直していただくだけです。

  5. 検証お疲れ様でした。
    大変参考になりました。

  6. 検証お疲れさまです
    用心深くやらないと沼りそうだし大人しくElectraの回避機能待ちかな…

  7. やってみるかと思ったが自分でソースからコンパイルする必要があるのか
    知識もないから誰かが公開するまで待つしかないな
    この回避方法が運営にバレて更なる対策をされないといいが…

  8. 回避できるのはいいけどかなりめんどくせえな

  9. とてつもなく有り難い……
    やってみたいけど初心者的にはやっぱり怖いね!

  10. 可能ってことがわかったから後はツール化されるのを待てばいいし、待てないならSSH叩きまくって遊べばいいってことよ

    • そうですね、Electra自体に組み込まれるのかどうかは不明ですが、出来るという事はわかったので、そのうちツール化もされるのではないかなと思います

  11. 2回目の「お暇な時に」までガッツリと読んじゃったじゃないか

    • (●´ω`●)おっひまぁ〜!

  12. torneもなかなか強力ですよ!

  13. 何で校正したがる輩が沸くのか不思議。
    おまけに日本語が得意じゃなさそうな人が多い気がする。

    • 楽しいツッコミならいいけど真面目に校正されてもねぇ

    • 年齢層が異なると語彙もビミョーに異なるからなぁ

    • 日本語が不得意だから、少しでも間違ってると理解できないんじゃないかな
      普通の人は多少間違ってても意味は通じるからね

  14. 入獄モードが超簡単だったら
    今は脱獄回避できないアプリは
    会社のiPhone7(非脱獄)でやってるけど
    メインのXに移せるな・・・。
    割と面倒なやつだったら現状維持かな・・・。

  15. ポケモンGoもこれで回避できますか?

  16. 欅のキセキ の脱獄回避ってなんか可能なアプリありますか?

    • Liberty Liteでいけてる

  17. Gesturesを使ってる方はいませんか?
    LINEでフリック入力する時に画面が上に行って使い難くないですか!

    誰か解決策知らないですか?

    • LittleXで個別に設定する

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

  18. MacのTimeMachineみたいなものがsnapUtilで実現できそうな気がする もしできたら面白そう

  19. 去年FGOが脱獄対策されてるなんてなんも知らずに勧められてインストールしてやってたらメールアプリに飛ばされてキレたのなんとなく思い出した

  20. 自分もsnapUtilを自分でビルドして実行できた!
    一応ビルドの方法を書き残しておきます(SANTAさん,ダメそうならこのコメントを削除していただけますか…すみません)
    1. XCodeとかiOS SDKとかをMacにインストール

  21. なんか途中で送信されたのでコメントしなおし
    1. MacにXCodeやiOS SDKをインストール
    2. ソースをとってくる
    3. clang -arch arm64 -isysroot (SDKのパス) -miphoneos-version-min=11.2 -Wall -Os -g -o snapUtil snapUtil.c
    4. Coolstar氏のEntitlementを,Levin氏作成のjtoolを使って,出来上がったバイナリ(snapUtil)に署名
    5. 端末の/usr/binにコピー
    これで完成!
    もちろんだけど,実行にはrootになる必要がある。mobileだとfs_snapshotとかなんとか表示されちゃう

    • おぉ素晴らしい!私が色々いじっていたのが嘘かの様なシンプルさです……!

    • なぜか私の環境ではjtoolがうまく動かなかったようなので、ldid -S[entiltlementsのpath] [バイナリのpath]で署名したら動きました(´ー`)
      3日無駄にしたぜ・・・!

    • jtoolだとコマンド多いからldidでいいのでは
      同じことできるし

  22. FGOの脱獄検知に関してはDelectraのGitHubのissuesに載ってますね
    脱獄した時は/private/var/libを事前にとっておいたバックアップから戻せば元に戻せます

  23. コマンド入力はSSHですか?

    • SSH経由でも構いませんし、NerTerm 2の様なターミナルアプリからでも構いません。
      ただ、GUIDが長いので、SSH経由でPCから行うほうが楽ちんかなと思います

  24. 全てOSSならばコンパイル済みバイナリをgithubでレポジトリとして流しているひといないかしら

  25. お疲れ様です…。

  26. 暇だから 【完】まで読んじゃった!

  27. ビデオパスは起動出来ますか?

  28. /var/libは再起動前に削除しても問題なさそうですね
    umang氏の脱獄検知回避まではこれで凌ごう

  29. dTV torneもこれで回避できるんですね。すごい…
    いつも回避できないという結果ばかりを見てたので、今回初めて突破したことになるのかな

    • dTVはFlex 3 Betaを使用することでも回避出来たりします。

  30. ゲームも銀行系アプリも使わないワイ、Anycaで脱獄対策アプリに初遭遇
    Tweakで回避できた方いたら詳細教えてください(__)

  31. snapUtilをうっかり小文字で実行してしまって再脱獄したらいつの間にか11.3.1から11.2になってた・・・どうしてこうなった

  32. ・・待機します

  33. プリコネRがLiberty lite で脱獄できなくなったんですけど私だけですかね?

  34. SANTA氏何者…?

  35. GUIDの出力かつ大文字化はこちらで可能です
    ioreg -p IODeviceTree -l | grep boot-manifest-hash | sed -E ‘s/\s|\||(“.{0,20}”)|[,=]//g’ | sed -E ‘s/(.)/\u\1/g’

  36. この方法はios11に限定されるのですか?

  37. snapUtilをビルドして使用したところ、
    Usage:
    Segmentation fault: 11
    とでてしまうのですがなぜでしょうか?

  38. せっかく起動できたかと思えばlibフォルダが見当たらない…
    だからと言って脱獄検知もされてしまう、なってこった…
    ios11.3.1 Iphone7 plus

  39. ダミーアプリってどうやって作ればいいですか?適当なアプリを使えばいいんですか?

    • はい、もしくは何か適当なipaファイル(Electraの様な物でも可)のinfo.plistを編集してしまっても大丈夫です(アプリを起動して使用はしないでください)

  40. きらファン起動しましたね!
    脱獄状態でVar/lib削除→起動不可
    Var/lib削除した後に記事の方法でデータ維持しながら入獄→起動!
    入獄モードが実装されたらメイン機(ios9.3.2)も11に上げようかな?