1 ポイント 投稿者 GN⁺ 2025-02-19 | 1件のコメント | WhatsAppで共有

デバッグ不可能なアプリをデバッグする

  • 最近、デバッグ不可能なアプリに遭遇した。このアプリはデバッガの接続を遮断し、コード注入時に早期終了し、脱獄済みデバイスで実行すると端末全体をクラッシュさせる。
  • iOSアプリはしばしば、脱獄検知やコード難読化のような追加の保護機能を含んでいる。このアプリは特に多くの保護機能を組み合わせている。

ビデオ版

  • この投稿にはビデオ版があり、より詳しい手順を示している。

目次

  • PT_DENY_ATTACH
  • PT_DENY_ATTACH の回避(簡単モード)
  • PT_DENY_ATTACH の回避(難しいモード)
  • 端末クラッシュ
  • コード注入
  • まとめ

PT_DENY_ATTACH

  • デバッガを接続することが最初のステップである。脱獄済み端末では通常、デバッガの接続は容易である。
  • ptrace という関数がデバッガの接続を遮断する。この関数は PT_DENY_ATTACH リクエストによって、将来のデバッガ接続を拒否する。

PT_DENY_ATTACH の回避(簡単モード)

  • PT_DENY_ATTACH は呼び出し後にのみデバッガを遮断する。呼び出し前にブレークポイントを設定すれば、デバッガは正常に接続される。
  • ptrace 関数自体にブレークポイントを設定することで、呼び出しを回避できる。

PT_DENY_ATTACH の回避(難しいモード)

  • 一部の開発者は ptrace の代わりに直接システムコールを使用して、デバッガ遮断を実装している。
  • この場合、バイナリ内でそのシステムコールを見つけて回避する必要がある。

端末クラッシュ

  • アプリは特定の条件で端末をソフトリブートさせる。これはメモリ集約的なメソッドを無限ループで呼び出すことで発生する。
  • lldb を使ってこのメソッドを回避できる。

コード注入

  • コード注入時にアプリがクラッシュする。これはアプリグループ識別子が誤っていることで発生する問題である可能性が高い。
  • 脱獄済み端末では、アプリを再署名せずにコードを注入できる。そうでない場合は、メソッドをスウィズリングして問題を解決できる。

1件のコメント

 
GN⁺ 2025-02-19
Hacker Newsの意見
  • Bryce Bostwickは、デバッグやリバースエンジニアリング系のアプリでとてもクールで刺激的な取り組みをしている

    • 彼のYouTube動画で、TikTokを猫動画だけ表示するように改造する方法を見て刺激を受け、Instagramをメッセージ機能だけ残して他を取り除くように改造した
    • WindowsをWindhawkスタイルで改造することに興味がある
    • BryceはiOS上で、リアルタイムのステップごとの動画を通してこうした作業を紹介している
  • DOS/Windowsでは、アンチデバッグのトリックは昔から一般的だった

    • ユーザーがどれだけ容易に制御できるかは、プラットフォームのユーザー敵対性に反比例する
    • PT_DENY_ATTACHは後者のための機能に見える
    • Windowsには、アプリが自分自身にアタッチするようにするトリックがある
  • AppleのApp Store審査が、直接システムコールを行うアプリを拒否しないのは驚き

    • Appleプラットフォームではシステムコールは安定したABIではないため、libSystemを経由すべき
    • 直接システムコールを行うアプリは、やってはいけないことをしているということ
  • 著者がmov w16, #26ではなくsvc 0x80を検索した理由が気になる

  • 著者は質問に答える用意がある

  • 冒頭の動画は非常に優れたプログラミング動画

    • テンポが速く、前提知識の置き方も適切で、優れたデモが流れを妨げない
  • このアプリが正規のアプリなのか、それともマルウェアの疑いでデバッグされたものなのか気になる

    • そうでないなら、かなりの労力がかかったはず
  • PT_DENY_ATTACHの回避(Hard Mode)

    • macOSでは、カーネルをパッチしてPT_DENY_ATTACHが何もしないようにする
    • macOSでは、パッチ済みカーネルを実行するのは簡単
    • iOSでは、さらに多くの問題があるはず(KTRRなど)
    • XNUは技術的にはオープンソースだが、再コンパイルするよりhexeditorでパッチするほうが簡単だった
  • "com.apple.tw.twrr" という通知が気になる

    • なぜcom.appleで始まるのか
    • そのアプリはApple製アプリではない
  • ウェブサイトのJavaScriptコードをリバースエンジニアリングしている人たちについて知っているか気になる

  • 脱獄したiPhoneでカスタムkextsを実行できるのか気になる

    • カーネル自体を変更するほうが、よりクールなやり方だ