iOSのサードパーティアプリケーションをデバッグするときにASLRを無効にする

この記事では、iOS向けのサードパーティアプリケーションにパッチを適用して、デバッグ中にASLRを無効にする方法について、簡単な短い説明を提供します。 読者は次のものを持っていることになっています。



  1. evasi0nジェイルブレイクを備えたiOS 7.0-7.0.4デバイスと、Xcode 5.1.1およびMachOView 2.4がインストールされたMac OS X 10.9.4を搭載したコンピューター(他のバージョンでも動作する可能性が高いですが、試していません)
  2. iOS用のサードパーティアプリケーションのデバッグの経験あります。ASLRとは何か、 ASLRを無効にする理由を理解することをお勧めします


さあ、始めましょう。



まず、デバッグするASLRを無効にする必要がある実行可能ファイルを選択します。 デーモン/usr/sbin/absd



とします。これは、一部のAppleサービスの承認を担当します。 もちろん、 absd



ここにありますが、実際には、任意の実行可能ファイルを使用できます。



scp



を使用して、実行可能ファイルをコンピューターにコピーします(以降、 192.168.1.112



はiOSデバイスのIPアドレスです):



 $ scp root@192.168.1.112:/usr/sbin/absd ./
      
      





警告! absdで何かを行う前に、必ずコピーをどこかに保存してください!



次に、 codesign



codesign



ユーティリティを使用して、実行可能ファイルから資格のリストを含むplistを抽出します(ロシア語でどのようになっているのかわかりません。「権利のリスト」かもしれません)。



 $ codesign -d --entitlements - absd > absd.entitlements
      
      





その後、MachOViewで実行可能ファイルを開き、関心のあるアーキテクチャのMachヘッダーを見つけます。 ファットバイナリの場合、このようなヘッダーがいくつかあります(アーキテクチャごとに1つ)。 ファットバイナリがない場合、ヘッダーは1つだけになります。 ヘッダーでMH_PIE



フラグを見つけ、対応するオフセットを覚えておいてください。 MachOViewでは、すべて次のようになります。







フラグをリセットする必要がありますが、これはMachOViewで実行できません。したがって、HEXエディターで実行可能ファイルを開き、対応するオフセットに移動して、フラグをクリアします。 次に、保存された資格で実行可能ファイルに再署名します。



 $ codesign -s - --entitlements absd.entitlements -f absd
      
      





それをデバイスにコピーして戻します



 $ scp ./absd root@192.168.1.112:/usr/sbin/absd
      
      





それだけです。 デーモンを呼び出して(たとえば、iMessageにログインして)、lldbでデバッグを実行すると、次のように表示されます。







(lldbではなくgdbを使用している場合は、 適切なコマンドを使用してください)。 スクリーンショットからわかるように、これ以上ASLRはありません! これが全体の説明です-記事の冒頭で約束したように、シンプルで短いものです。



PS念のため:著者は、記事で提案されている方法が常に最適とはほど遠いことを認識しています。 著者はまた、ASLRを無効にする別の方法を知っており、それらは将来の記事で議論されるかもしれません。 しかし、ここは今日です-Machヘッダーのパッチに関する記事です。



楽しいデバッグ!



All Articles