iOSリバースエンジニアリング - 脱獄から始める

この記事からは、iPhone の脱獄を起点として、iOS リバース開発で使用されるさまざまな技術と知識を整理してみましょう。

脱獄(jailBreak)について

iOS システムのセキュア ブート チェーンの脆弱性を悪用することにより、信頼チェーン内の検証を担当するコンポーネントが禁止されます。iOS システムの最大権限ROOT 権限を取得します。

iOS システムセキュリティブートチェーン

iOS システムがインストールされたデバイスを起動すると、iOS システムはまずシステムのブート プログラムである読み取り専用 ROM から初期化コマンドを読み取ります (実際、すべてのオペレーティング システムは起動時にこのステップを実行する必要があります) 、プロセスが少し異なるだけです)。このブート ROM には、低レベル ブート ローダー (LLB) の署名を検証する Apple の公式認証局の公開キーが含まれており、検証に合格するとシステムが起動します。LLB はいくつかの基礎作業を行ってから、第 2 レベルのブートローダー iBoot を検証します。iBoot が開始されると、デバイスはリカバリ モードに入るか、カーネルを起動できます。iBoot がカーネル署名の正当性を検証した後、ドライバーのロード、デバイスの検出、システム デーモンの起動など、ブート プロセス全体が正しい方向に進み始めます。この信頼の連鎖により、すべてのシステム コンポーネントが Apple によって正式に作成、署名、配布され、サードパーティ組織からのものではないことが保証されます。ジェイルブレイクの動作原理は、この信頼の連鎖を攻撃することです。すべてのジェイルブレイク ツールの作成者は、この信頼チェーンの抜け穴を見つけて、信頼チェーン内の検証を担当するコンポーネントを無効にする必要があります。iOS システムの最大権限ROOT 権限を取得します。

無題2.001.png

完璧な脱獄か、完璧ではない脱獄か

脱獄のさまざまな条件に応じて、次の 2 種類の脱獄に分けることができます。

  • 完全な脱獄 いわゆる
    完全な脱獄とは、iOS システムの脆弱性を突破した後、システムが再起動するたびに、挿入された悪意のあるコードが自動的に呼び出され、セキュリティ検証を破って ROOT 権限を再度取得できることを意味します。

  • 不完全な脱獄
    いわゆる不完全な脱獄とは、システムを脱獄した後、セキュリティ チェーンが完全に破壊されておらず、一部の情報や機能が適切に適用されていないことを意味します。たとえば、シャットダウンした後、起動するには脱獄ソフトウェアを接続する必要があります。または再起動すると脱獄に失敗します。; このような脱獄は「不完全な脱獄」と呼ばれます。

では、どうやって脱獄するのでしょうか?

私たちは通常、携帯電話を脱獄するためにunc0ver 脱獄を使用します。現在iOS11~iOS14.8システムに対応しています。

  • 上記の Web サイトから、のインストール パッケージをunc0ver入手できます。ipa
  • Xcode を通じて新しいプロジェクトを作成し、携帯電話で実行できます。
  • 次に、プロジェクトのルート ディレクトリにAPPという名前の、ipaこのフォルダーの下にパッケージを置きます。
  • 次に、ここに来て、 appSignという名前の再署名スクリプト ファイルを取得できます。
  • Xcode プロジェクト設定 -> ビルド フェーズ -> 新しい実行スクリプト フェーズの追加 -> コンテンツは ./appSign.sh です。
  • プロジェクトを再度実行します。アプリが起動したら、デバッグを停止します。現時点では、unc0verそれはすでに携帯電話で実行されています。
  • を開きunc0ver、左上隅に設定してチェックを入れInstall OpenSSH、戻ったらクリックしてジェイルブレイクを開始します(途中でスタックする可能性があります。もう少し試してください)。

上記の手順を実行した後、携帯電話はすでにジェイルブレイクされています。

次に、Cydia を介してリバース開発で一般的に使用されるソフトウェアをインストールできます。

共通ソフトウェアをインストールする

携帯電話がジェイルブレイクされた後、次のような一般的に使用されるソースを Cydia に追加できます。

  • ビーソース apt.cydiami.com
  • 雷峰源 atp.abcydia.com

OpenSSH

OpenSSH は、SSH (Secure SHell) プロトコルの無料のオープンソース実装です。SSH プロトコルは、リモート制御やコンピュータ間のファイル転送に使用できます。\

SSH

SSH是一种网络协议,用于计算机之间的加密登录。 
1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

OpenSSH

它是一款软件,应用非常广泛。

越狱的过程中我们已经安装好了OpenSSH, 这时,我们就可以通过电脑的终端来连接手机。

  • 打开手机的wifi,找到手机的IP
  • 我们通过 ssh 用户名@手机IP地址 连接到手机 如: ssh [email protected]
  • 默认密码 alpine

iOS下有两个用户 root、mobile

  • Root用户:最高权限用户,可以访问任意文件
  • Mobile用户:普通用户,只能访问改用户目录下文件/var/Mobile

SSH的相关操作

  • 删掉保存的服务器地址的key
  • ssh-keygen –R 服务器IP地址(当SSH登录手机,手机就是服务器)
  • know_hosts文件:用于保存SSH登录服务器所接受的key -在系统~/.ssh 目录中保存
  • ssh_host_rsa_key.pub文件:作为SSH服务器发送给连接者的key
  • 在系统/etc/ssh 目录中保存
  • Config文件
  • 在~/.ssh 目录下创建一个config文件。内部可以配置ssh登录的别名。
    • Host 别名
    • Hostname IP地址
    • User 用户名
    • Port 端口号\

パスワード不要のログイン
パスワード不要のログインは「公開鍵ログイン」とも呼ばれ、原則として、ユーザーは自分の公開鍵をリモート ホストに保存します。ログインすると、リモート ホストはランダムな文字列をユーザーに送信し、ユーザーはそれを秘密キーで暗号化して送り返します。リモート ホストは、あらかじめ保存されている公開キーを使用して復号化を行い、成功すると、ユーザーが信頼できることを証明し、パスワードを必要とせずに直接ログインが許可されます。

  • 公開キーを SSH サーバーにコピーします $ssh-copy-id username@server IP

USBログイン

Apple には と呼ばれるサービスがありusbmuxd、このサービスは主USBTCPプロトコル上で複数の接続を実装するために使用されます。

IPプロキシポートマッピング

  • libimobiledevice ツールをインストール
    $ brew install libimobiledevice
    • マップされたポート
    • iプロキシ 12345 22

USB のポート マッピングを構成して、12345 ポートを 22 ポートにマッピングし、携帯電話へのssh -p 12345 root@localhost接続に。

さて、今日はここまでです。今日はほんの始まりです。次に、脱獄した携帯電話を使用して逆研究を開始します。

おすすめ

転載: juejin.im/post/7221531861738471480