1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iOS 50年の封印を解く

Posted at

はじめに

突然ですが、皆さんはこのような画面に遭遇したことはあるでしょうか。

なんと2500万分後(=約50年後!?)に試してくださいなどと表示されてしまっています。

なぜこのようなことが起こるのかは後で述べるとして、私は、自分が小中学生の時にどんなサイトを見てたのだろうと興味を持ち、暫く起動していなかった初代iPadを充電したところ、このような画面になっていました。


調べてみると、いくつか事例があるようです。

ただ、上記のサイトにはいずれも、再び使用するにはデバイスをリカバリーモードにして初期化するしかないと書かれています。
しかしながら、初期化してしまえば目的であった「自分が小中学生の時にどんなサイトを見てたのか」の情報は闇に葬られてしまいますし(バックアップもない)、そもそも古いiPadを初期化によって使えるようにしたところで何かやれることもありません。かといって50年後も生きてる保証がありません。
で、どうにかならないかと試行錯誤した結果、データを消すことなくiPadを復旧することができたので、そのやり方を残しておきます。
記事の最後で上記の画面の再現方法も記載しているので、よかったら最後までご覧ください。


追記
実は、パスワードを何回も打ち間違って、以下の画面のようにiPadが完全にロックされた場合でも、同様の手順でデータを消すことなく復旧できてしまいます。
(ただし、iOSの設定で「パスコードの入力に10回失敗すると全てのデータを消去する」がONになっている場合、その限りではありません)

動作環境

  • 使用PC : MacBook Pro(M4 Pro、macOS26.1)
  • 復旧対象 : 初代iPad(モデル番号A1219、iOS5.1.1)
  • iPadは電源ボタン・ホームボタンが正しく機能すること
  • iPadが既に脱獄されているかどうかは関係ありません
  • iPadが既に脱獄されている場合、Root権限のパスワードを覚えているかどうかは関係ありません
  • 上記のiPad及びiOS以外でも可能かどうかは検証してません。少なくとも最近のiPhone/iPadでは不可能です。古いものなら多分できます。詳細は、後述の Legacy-iOS-Kit 内のドキュメントを各自で調べてください
  • 以下の手順では、デバイスの脆弱性(limera1n)を利用しますので、やる際は自己責任でお願いします(まあ古い端末なので正規に使っていたところでAppleの保証対象外ですけどね......)
  • 相手の許可なくその人の端末に対して以下の手順を実行し、データを盗む行為は不正指令電磁的記録に関する罪などに抵触する可能性があるので、絶対にやめてください

そもそもなぜ50年ロックがかかってしまうのか

一言でいえば、デバイス内の時刻がリセットされてしまうからです。
まず、iPhone/iPadでパスワードを何回か・・・打ち間違って、「1分後にやり直してください」などと表示されたとします(↓は復旧後に後撮りしたものです)。

このときiPad上では、どの時刻になったらパスワードの再入力を許すか、という値を内部に保存した上で、端末内で稼働させている現在時刻と照らし合わせながら、必要に応じて画面を更新している、というのは想像がつくと思います。

さて、ここでデバイスの電源が切れた時のことを考えます。
基本的には、電源が落ちてもデバイス内の時刻は正しく進んでいきます。これは、時刻を管理するリアルタイムクロック(RTC)というICがCMOSバッテリーによって動いているからですね。CMOSバッテリーは非常に消費電力が少なく、電源が落ちても稼働し続けられるという特徴があります。

ただし、CMOSバッテリーにも限度があり、数年間充電しないまま放置した場合、CMOSも電源切れを起こします。このとき、デバイスの時刻は1970年1月1日0:00にリセットされるのですね(これはコンピュータの元年とも言われる時刻です)。前述で、どの時刻になったらパスワードの再入力を許すかをストレージに保存しているので(私の場合は2019年頃)、この差を見て、iPadが50年程度もロックがかかってしまった訳です。

復旧手順

上記の原因から考えれば、復旧方法は以下の2つが考えられます。

  • 端末の時刻を現在のものに修正させる(か、少し先の未来にする)
  • どの時刻になったらパスワードの再入力を許すかを示す値を改変する

実はどちらの手法でも復旧可能です! 以下に手順を示します。


  1. Legacy-iOS-Kit という優秀なツールをダウンロードします。以下のコマンドを実行します

    git clone https://github.com/LukeZGD/Legacy-iOS-Kit.git
    cd Legacy-iOS-Kit
    

  2. 復旧したいiPadとPCをDockケーブルで接続します

  3. 以下のコマンドを実行します

    ./restore.sh
    

    恐らく、以下のような画面になっていると思います。



  4. Useful UtilitiesSSH Ramdisk の順に選択します

  5. DFUのモードを聞かれるので、pwnDFU を選択します

  6. Yesを選択する前に、iPadをDFUモードにします。やり方は

    シャットダウン → 電源ボタンのみ3秒押す → 電源とホームボタンを両方10秒押す → ホームボタンのみ10秒押す

    となります(端末によって若干やり方が異なります)。成功しても画面には何も表示されない点に注意してください

  7. Yesを選択します。このとき、iBSS → iBEC → SSH Ramdiskがロードされるのを待ちます(たまに失敗することがあるので、その時は電源とホームボタン長押しでDFUモードを解除した上で、3. 以降の手順を繰り返してください)

  8. Connect to SSHを選択します。パスワードはalpineです
    (注:既に脱獄済みでRoot権限のパスワードを変えている場合でも、alpineでログインできてしまいます)

  9. 以下のコマンドを実行します

    mount.sh
    

マウントできました的なメッセージが出ていたら、ssh接続が完了しています。

パスワードの再入力可能な時刻を改変する

  1. 先にこちらの方法から説明します(面白いので)。別のターミナルを起動し、以下のコマンドを実行します

    scp -o HostKeyAlgorithms=+ssh-rsa -P 6414 root@127.0.0.1:/mnt2/mobile/Library/Preferences/com.apple.springboard.plist .
    

  2. Xcode又はVSCode(+拡張機能)で、ダウンロードしたplistファイルを開きます。Xcodeの場合は以下のようなウィンドウが表示されると思います



  3. この時、SBDeviceLockBlockTimeIntervalSinceReferenceDate というのが、まさに「どの時刻になったらパスワードの再入力を許すか」を示す値です!
    これはUTCで2001年1月1日0:00からの経過秒数を表しています(なぜか1970年ではない)。現在の値が580,615,188.923なので......計算すると最後にiPadを使用したのは2019年5月27日の10:59:48となりますね。私の記憶と大体一致しています。
    負の値を設定できるので、適当に-1,000,000,000.000などと改変しましょう

  4. 最後に、改変したplistファイルをiPadにアップロードします。以下のコマンドを実行します

    scp -o HostKeyAlgorithms=+ssh-rsa -P 6414 com.apple.springboard.plist root@127.0.0.1:/mnt2/mobile/Library/Preferences
    

追記:iPadの永久ロックを解除する

上記の写真にはありませんが、デバイスが永久ロックされている場合、先ほど取得したplistファイルの中にSBDeviceLockBlockedという値があると思います。
これをNOにすることで、なんと永久ロックは解除できてしまいます。
また、同じplistの中のSBDeviceLockFailedAttemptsの値が、パスワードを打ち間違った回数ですので、ここも0(または-9999とか)にします。

端末の時刻を合わせる

こちらは簡単です。最初の操作(./restore.sh等)を実行したターミナル上で、以下のコマンドを入力します。これだけです。

date 011215302026.00

指定方法は[月][日][時][分][年].[秒]です。

あるいは、Legacy-iOS-Kitの機能として既に用意されていて、exitでssh接続を終了させた後、メニューから Update DateTime を選択するだけで現在時刻が反映可能です。

変更を終えたら

  1. 最初の操作(./restore.sh等)を実行したターミナル上でexitでssh接続を終了させます
  2. メニューから Reboot Device を選択します。iPadが自動で再起動します

これにて復旧完了です。再起動が終わると......?

パスワードが入力可能な状態になりました!
後は、普通にパスワードを入力すれば、懐かしい画面と再会です。

デバイスのパスワード自体を忘れている場合

デバイスが古い以上、ここに来てロック画面で入力すべきパスワードを忘れている人も多いと思います(私は3回目でうまくいきました。なおsshのRoot権限のパスワードalpineとは別です)
残念ながら、デバイスのパスワードを知る方法はありません。ただし、パスワードの打ち間違いでiPadが完全ロックされた場合でも、上記の手順で復旧できることから、実質的に無限回試せることになります。パスコードが4桁の数字な人も多いと思うので、その場合は十分ブルートフォース可能な範囲ですね。
また、端末自体にログインせずとも、sshからデバイス内に保存されている写真やSafariの履歴を取得することが可能です。上記のssh環境において、データが保存されているパスにアクセスして(具体的な場所は各自で調べてください)、scpを実行してください。

再現方法

最後に、iPad50年ロックという奇妙な画面を自分の目で見てみたいと思う人のために、簡単にやり方を書いておきます。CMOSの電池切れを待つ必要はないです。

  1. まずは古いiPadないしiPhoneを購入しましょう。メルカリで普通に売ってます(私も、復旧方法を見つけ出すために、同機種を1台中古で買いました)

  2. デバイスにログインできる場合は(ロックされていない場合は)、いちいちDFUモードでやるよりも最初に脱獄する方が簡単なので、jailbreakしてしまいましょう。
    当時有名だったAbsinthe-2.0やredsn0wといったツールは、iTunes11のサ終により使えなくなっていました。代わりに、復旧でも用いたLegacy-iOS-Kitならば、最新のmacOS26上で脱獄成功しました!
    やり方は調べれば分かると思うので省きます

  3. ssh接続します

  4. 復旧手順に書いたようなplistの改変または時刻の変更を行います。変更後はSpringBoardの再起動をすれば、はい、みんなも最初の画面を拝めました!

結論

Safariのブックマークに保存していたサイトの多くは閉鎖していて、かなしいきもちになりました(Internet Archiveはあるけどね)。ただ、当時保存したスクリーンショットが色々残っていました。
(↓将棋ウォーズの10年以上前のイベント)

みなさんも是非、昔の自分を回顧してみてはいかがでしょうか。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?