Sideload とは

Sideload とは

サイドローディングとは、アプリケーションストアを通じてアプリの配布や管理を行っているシステムにおいて、正規のアプリケーションストアを経由せずにアプリを入手し、インストールすることである。

非脱獄向け Tweak(?)巷で話題の Sideload を試してみたらかなりの可能性を感じた話。 (opens new window)

【iOS9.3 対応】Xcode を使った非脱獄デバイスでアプリを Sideload する方法 (opens new window)

これは最近の脱獄にも使われており、Uncover (opens new window)TAURINE (opens new window)も Sideload を使って自己署名を使ってアプリをインストールし、そのアプリから脱獄をおこなう仕組みになっている。

Sideload 自体は公式の機能であるので何ら違法性はないのだが、開発者でないアカウントの場合はインストールする際の署名の有効期限が七日しかないという制約がある。開発者アカウントの場合は一年間有効なのだが、開発者になるためには年間 12000 円程度かかるので、このためだけにわざわざ開発者になる必要はない。

で、ここで Unc0ver や TAURINE が自己署名でインストール可能なのはそれらが署名されていない IPA であり、自己署名可能だからである。

AppStore からインストールした IPA には既にアプリ開発者の署名がされているため、それらに更に署名を施すことはできない。つまり、X というアプリを購入した A くんの iPhone や iTunes から IPA を抜き出し、それを B くんの署名で B くんの iPhone にインストールすることはできない。

要するに、海賊行為はできないようになっているのである。

署名の解除

が、署名を解除する方法は存在する。もちろん普通の状態ではできない。インストールされたアプリから署名を解除するにはデバイスが脱獄されている必要がある。

脱獄されたデバイスから署名を解除した IPA をダンプする方法はいくつかあります。

dumpdecrypted (opens new window)

セキュリティ専門家の Stegen Esser 氏が開発したダンプツール。

流石に最近は動かないのではないだろうか。

Clutch (opens new window)

iOS10 くらいまでは使えていた覚えがあるダンプツール。

最近は使えないイメージがある。

Rasticrac (opens new window)

Clutch が使えなくなった後に使っていたダンプツール。

最近、公開されていないイメージがある。

bfinject (opens new window)

Rasticrac が消滅した後にしばらく使っていたダンプツール。

iOS13 くらいまでは動いていたけど最近はご無沙汰している。

bfdecrypt (opens new window)

bfinject を利用したダンプツール。

多分 iOS14 でも動く

Clutch2 (opens new window)

Clutch が進化したやつだけど、最終コミットが 8 年前なのでもう動かなさそう。

CrackerXI+

現状最もオススメできる IPA 復号ツール。

当たり前だけど、海賊行為には利用しないこと。

標準レポジトリにはないのでAppCakeをタップして追加しよう。

で、ただインストールしただけだと動かないらしいので CrackXI+をインストールする前に、

  • AppSync Unified
    • 署名のないアプリをインストールすることができるようにする
  • New Term 2
    • 必要かどうかはわからんけど、なんか書いてあった

を先にインストールしておくこと。そうでないと CrackerXI+が動作しない。また、将来的に必要になるので以下のツールもインストールしておくことを推奨する。

  • Apple File Conduit "2" (iOS 11+, arm64)
    • root 領域へのアクセスを許可する
  • Filza File Manager
    • Web サーバを立てられる便利なユーティリティツール

インストール順を間違えた場合

先に CrackerXI をインストールしてしまっていた場合には CrackerXI を再インストールすれば良い。

CrackerXI+の使い方

単に起動して署名解除をしようとするとEnable CrackerXI hook in settings tab.と表示されるのでSettingsから設定を更新しよう。

ここでCrackerXI hookを有効化します。

有効化しているとちゃんと動作します。このときYES, Full IPAを選択します。

アプリを選択すると一度画面が切り替わったあとで再びCrackerXI+がひらきます。

こんな表示がでたらダンプは成功です。

ダンプした IPA をコピー

ダンプした IPA は/var/mobile/Documents/CrackerXIの中に保存されているので、それをパソコンにコピーします。

これはFilza File ManagerWebDAV Serverの機能を使えば簡単です。

Filze File Maangerをひらいたら下にある歯車マークを押します。

そこでEnable WebDAV Serverを有効化します。更に下を見ると

Listening at https://192.168.1.13:11111
1

と書いてあるので、パソコンでそのアドレスにアクセスします。

Listening アドレスについて

この値は人によって異なるのでちゃんと自分の表示されている値を確認してください。

URL にアクセスするとこのようにデバイスの内部データにアクセスできます。

/var/mobile/Documents/CrackerXIに移動するとダンプした IPA があることがわかります。

ダウンロードしたいクリックすると以下のような画面に変わります。

ここでDownloadを押せば IPA ファイルがデバイスからパソコンにコピーされます。

ここまでの流れ

さて、ここまでできれば Sideload 用の IPA は用意できました。

しかし、よく考えるとここまでの一連の流れは意味がないことがわかると思います。

というのも、インストールされたアプリの署名を解除して自己署名でインストールする意味がないからです。それなら最初から署名の期限もない AppStore 公式の署名を使えばよいではないかと。

なので、単にダンプした IPA をインストールするのではなく、IPA にdylibを同梱します。

dylib とは

dylibとは超簡単に言うと実行時にアプリケーションのバイナリが参照するライブラリファイルのことです。

これを同梱するとどんな意味があるかというと、dylibに何らかの処理を行うメソッドを書き込んでアプリ起動時にそれを参照するようにすれば本来のアプリの挙動とは違う動作を行なうことができるようになります。

つまり、本来は脱獄 Tweak として動作させていた処理をアプリ自身から行わせることができるということになるわけです。しかも脱獄 Tweak は署名がされていないので非脱獄環境では動作させることができませんが、Sideload であれば自己署名した IPA のバイナリが呼び出すため Sandbox の制約に引っかかることもありません。

Sideload の限界

とはいっても、全ての脱獄アプリを動作させることができるわけではありません。動作させられるのはアプリのバイナリに Hook するタイプの Tweak に限られます。

また、そのような Tweak も全てが動作するわけではなく外部フレームワークを要求するものについては一部動かすことができません。

ここからの流れ

次に必要になるのはアプリを改造するための dylib を作成することです。

しかし、これはTHEOS JAILED (opens new window)の開発環境を整えたり、Objective-C や Swift などの知識が必要で一朝一夕でできる作業ではありません。

じゃあめんどくさいなあってなるところなんですが、世の中には他の開発者が作成した Tweak が山のようにあるのでそれを利用します。

要するに、

  1. 公開されている脱獄 Tweak のうち Sideload で利用できるものを探す
  2. その Tweak が Hook しているアプリを AppStore から取得する
  3. そのアプリの署名を解除する
  4. IPA に dylib を同梱した上で再度 IPA にパッケージングする
  5. 改造した IPA を自己署名でインストールする

という流れになります。

カスタマイズした IPA の作成方法

今回は Twitter のプロモーションのツイートを非表示にする方法を考えてみます。

Twitter のように超有名なアプリは脱獄 Tweak の開発も盛んなので、調べれば簡単に目的のものが見つかります。

脱獄 Tweak から DEB を入手する

今回は Hao Nguyen 氏が開発したTwitter No Ads (opens new window)を利用します。

最新のバージョンは 0.0.2 なのでそれをダウンロードします。

DEB を展開する

brew install dpkg
dpkg -x XXXXXXXX.deb YYYYYYYY
1
2

DEB 展開について

XXXXXXXXにはダウンロードしたDEBのファイル名、YYYYYYYY には展開した先のフォルダを指定して下さい。

フォルダがない時は自動的に作成されるので、適当で大丈夫です。

すると目的のdylibが手に入ります。

IPA に DYLIB を同梱させる

ここが一番めんどくさいところなのですが、IPADYLIBを同梱させた上でバイナリからDYLIBを実行するようにパッチを当ててくれるツールがあります。

上の二つがとりあえず見つかったのですが、自分は macOS が Catalina でしたので必然的にiPAPatcherを使うことになりました。

まったく難しい作業はなく、ダンプした署名解除済みのIPAと先程展開したdylibを選択するだけです

選択したらPatching.を選択します。

IPA のサイズにもよるのですが、二分ほどで終わると思います。

IPA をインストールする

ここまでできれば作成された IPA をインストールするだけです。

いろいろツールはあるのですが、個人的にはSideloadly (opens new window)が好きなのでそれをおすすめしておきます。

これ以外にも Xcode を利用する方法などいろいろあります。

完成した IPA をインストールすれば無事に全てのプロモーションが消えます。

記事は以上。