no-image

Electra for iOS 11.3.1をビルドする

えっ、まだ企業証明書を使ったTweakBox版Electra使っているんですか????

企業証明書取り消されすぎ

詳しい経緯はこれを見てくれって感じ。

なぜ企業証明書を使うのか

どうしてこうも企業証明書の話がでてくるのか簡単にご説明します。

まず、Electra for iOS11.3.1には二つのバージョンが存在します。一つはVFS版でもう一つはMultiPath版です。

どちらもCydia Impactorを使うことで自分の証明書を使ってインストールできるのですが、これには問題がありました。

というのも、Cydia Impactorを使うにはAppleIDが必要なのですが、これは通常のアカウントと開発者用アカウントの二つが存在するのです。

そして通常のアカウントでは自己証明書の有効期限が一週間しかない(開発者アカウントは一年間)ので(昔は90日有効だったのですが、Sideloadが流行りすぎて短くされた)、一週間ごとにアプリを再インストールする必要がありました。

また、VFS版はどんなアカウントでも使えるのですがMultiPath版は開発者アカウントでしか使えないという問題もありました。

しかもMultiPath版の方がはるかに脱獄成功率が高いので、一般ユーザは成功率の低いVFS版を一週間に一回インストールしなければいけないという不自由を強いられていたわけです。

それに比べて企業証明書では有効期限が一年間あり、しかもMultiPath版がつかえるので便利というわけです。

なぜ取り消されるのか

普通、企業証明書とはストアで配布されない企業内だけで使うアプリ(例えば本屋の検索アプリや、料理店の注文アプリなど)をいちいち審査に出さずに使えるようにするための仕組みです。

要は一般公開が許されていないわけなのですね。

それを脱獄ツールを誰でも使えるようにするためにアプリを企業証明書で署名して公開していたらAppleにバレて証明書が取り消されてしまうわけです。

これは今後ずっといたちごっこが続くと予想されます。つまり、今回の企業証明書を使ってもまたすぐに取り消されてしまうわけです。

Electraはオープンソース

作者のCoolStar氏がソースコードを公開してくれているおかげで、なんとElactraは自分でビルドができるのである。

じゃあ、自分でやればええやん!ってなったのはここだけの秘密。

必要なものは以下の通り。

  • Mac
  • Xcode
  • iOS11.0-11.3.1のiPhone/iPad
  • Apple開発者アカウント(年間12000円払う必要があります)
  • それなりのプログラミング知識
  • くじけない心

なぜビルドするのか

初めにお断りしておきますが、ここからの手順は完全に自己満足です。

というのも、開発者アカウントを持っているなら最初から普通にCydia Impactorを使って開発者アカウントで署名すればいいからです。

こうすれば何の不自由もなく一年間の署名つきでElectraが使えます。

なぜ自分でビルドするかというと、他人に証明書を渡すことなくElectraをインストールできるような環境を作るためです。

開発者アカウントでは開発機として100台のデバイスを登録できるようになっています。そして、登録したデバイスではAd Hocという仕組みを利用してストアに公開していないアプリをインストールできるのです。

こっそり公開しているRanking Helperがその最たる例で、UDIDさえ登録してしまえばいつでも何度でもSafari経由でインストールができてしまうのですね。

つまり、開発者アカウントを持っていない友人のUDIDを登録しておけば、その友達もMultiPath版のElectraをいつ取り消されるかわからない企業証明書を使わずに利用できるわけです。

うむ、素晴らしい!!

ソースコードと前準備

まずはソースコードを引っ張ってきます。

git clone https://github.com/coolstar/electra1131.git
cd electra1131

既にxcodeprojがあるのでこれをひらけばすぐにビルドができそうな気がするのですが、そう上手くはいきません。

やればわかるのですが、ldid2がないとかのエラーが表示されて失敗します。

なのでまずはその環境を作ります。これは前バージョンのElectraから存在する問題らしいのでちゃっちゃと解決してしまいましょう。

brew b install ldid
ln -s /usr/local/Cellar/ldid/1.2.1/bin/ldid /usr/local/bin/ldid2

ldidをbrewでインストールしてシンボリックリンクを貼ります。

curl https://raw.githubusercontent.com/GaryniL/ldid/master/ldid2 -o ldid2
sudo mv ldid2 /usr/local/bin/
chmod +x /usr/local/bin/ldid2

ldid2をダウンロードしてファイルを移動させた後、実行権限を付与します。

えむいーさんの環境ではこのコマンドを叩くだけで何の滞りもなくビルドに成功するようになりました。

署名問題

ちょっと躓いたのが署名の問題でした。

実はこの手順は不要でした。スルーしてください。

普段であれば適当に設定しておけばよかったのですが…

署名自体はAutomatically manage signingで簡単に行えるのですが…

ここがしっかりとMultipathに対応していなければいけません。

MultiPathと表示されていないとError:exploitと表示されて脱獄することができません。

ビルド

無事にldid2の問題が解消したら、ターミナルからビルドを行います。

プロジェクトファイルのあるところでmakeとコマンドを叩きます。するとビルドが始まって…

約10秒ほどでビルドが終了します。 ** BUILD SUCCEEDED ** と表示されていたら成功です。

electra1131/build/Release-iphoneos/内にelectra1131という20MB近いファイルが生成されていたら上手くいっています

上手くいっているんだけど、上手くいっていないという不思議な状態です。

署名の作成

Certificate

ここからCertificates, Identifiers & Profilesを選択します。

Certificatesから+を選択して新規証明書を作成します。

どのタイプの証明書を作るかときかれるのでApp store and Ad Hocを選択します。

証明書の作成にCSRファイルが必要なのでこれを用意します。

CertificateSigningRequest

キーチェーンアクセスを開きます。

キーチェーンアクセス>証明書アシスタント>認証局に証明書を要求

ディスクに保存にチェックを入れて保存します。

CertificateSigningRequest.certSigningRequestというファイルが作成されたことを確認します。

先ほどのCSRファイルを選択するページに戻って、作成したCertificateSigningRequest.certSigningRequestを選択します。

すると無事にiOS Distributionの証明書が作成できました。

Identifier

次にIdentifierを作成します。+を押して新規作成します。

Bundle IDを設定しますが、大体こんな感じになっていたら問題ないです。推奨のバンドルIDはURLを逆順に入力するらしいので、今回は推奨された記述方法にしたがって設定しました。

ここで、機能の欄で必ずMultipathにチェックを入れます。こうしないとError: exploitが表示されて絶対に失敗します。

Provisioning Profile

最後にProvisioning Profileを作成します。

Allを選択すると現在発行しているProvisioning Profileの一覧が表示されるので、そこから新規作成を行います。

今までと同じように+をクリックして次に進めます。

今回はAd Hocで公開することを考えているのでAd Hocを素直に選択します。

先ほど作成したMultiPathが有効になっているIdentifierを選択します。

証明書を選択する必要があるので、最初に作成したiOS DistributionのCertiicateを選択します。

どのデバイスで有効にするかときかれるので、Ad Hocインストールを許可したいデバイスを選択します。

もしここのデバイスを増やしたい場合は、Deviceの欄から増やすことができます。

デバイスの登録はUDIDを使って行います。端末のUDIDを調べたい場合はitunesを使うのが最も手っ取り早いです。

矢印の部分をクリックしていると表示される内容が、

UDID>ECID>機種ID>シリアル番号>UDID

の順で変化します。右クリックで保存しましょう。

iOSの端末で設定のApple IDから開発者アカウントでログインしている場合はここの登録は不要です。

無事にプロファイルが作成できたらそれをダウンロードします。

iOS App Signer

Macでしか動作しないけど、死ぬほど便利なツールなので是非とも導入して欲しいところ。

Input Fileにelectra1131.ipaを指定します。

Input Fileにelectra1131-1.0.3-mptcp.ipa指定します。

現状Xcode(コマンドからmakeしたのを含む)でビルドしたelectraではどうしてもPlease Wait (1/3)でコケてブラックアウトしてしまいます。公式で配布されているelectra1131-1.0.3-mptcp.ipaを利用するようにしてください。

Signing CertificateにiPhone Distributionを選択して、Provisioning ProfileをChoose Custom Fileを選びます。

そこで先ほど作成したProvisioning Profileである.mobileprovisonを選択します。

ちなみに、それぞれの項目を選択した結果です。

Re-Sign Only

インストール不可

iOS Distribution Provisioning Profile

インストール成功

iOS Development Provisioning Profile

インストール不可

iPhone DistributionとiOS Distribution Provisioning Profileの組み合わせがAd Hocインストールに不可欠な署名方法であることがわかりました。

Developerの署名じゃないけどMultiPathはちゃんと動くの?というのは疑問でしたが、実際に実行してみたらちゃんと動作したので問題ないと思われます。

manifest.plist

最後にAd Hoc配布用のmanifest.plistを作成します。

記述する内容はこんな感じです。

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>items</key>
        <array>
            <dict>
                <key>assets</key>
                <array>
                    <dict>
                        <key>kind</key>
                        <string>software-package</string>
                        <key>url</key>
                        <string>https://tkgstrator.work/app/electra/electra1131.ipa</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>display-image</string>
                        <key>url</key>
                        <string>https://tkgstrator.work/app/electra/icon.png</string>
                    </dict>
                    <dict>
                        <key>kind</key>
                        <string>full-size-image</string>
                        <key>url</key>
                        <string>https://tkgstrator.work/app/electra/image.png</string>
                    </dict>
                </array>
                <key>metadata</key>
                <dict>
                    <key>bundle-identifier</key>
                    <string>work.tkgstrator.electra1131</string>
                    <key>bundle-version</key>
                    <string>1.0.3</string>
                    <key>kind</key>
                    <string>software</string>
                    <key>title</key>
                    <string>electra1131</string>
                </dict>
            </dict>
        </array>
    </dict>
</plist>

適時、必要なところは書き換えてください。

配布用URLはSSL対応(HTTPS)限定なので、SSL対応したWebサーバを持っていない方はcertbotなどでSSL化してしまいましょう。あ、SSL化の記事もそのうち書きます。

ファイル自体も公開しておくので、もし利用したい方がいればどうぞ。

Dropboxを利用する方法でも問題ないようです。

HTML

アプリをインストールするためのHTMLを作成します。

<html>
  <a href="itms-services://?action=download-manifest&url=https://tkgstrator.work/app/electra/manifest.plist">install app</a>
</html>

最低限、これくらい書いておけばなんとでもなります。

ウェブ上でのファイルの配置はこんな感じです。

manifest.plist, electra1131.ipa, index.html以外は多分必要ないです。