デバッグ不可能なアプリをデバッグする
- 最近、デバッグ不可能なアプリに遭遇した。このアプリはデバッガの接続を遮断し、コード注入時に早期終了し、脱獄済みデバイスで実行すると端末全体をクラッシュさせる。
- 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件のコメント
Hacker Newsの意見
Bryce Bostwickは、デバッグやリバースエンジニアリング系のアプリでとてもクールで刺激的な取り組みをしている
DOS/Windowsでは、アンチデバッグのトリックは昔から一般的だった
AppleのApp Store審査が、直接システムコールを行うアプリを拒否しないのは驚き
著者が
mov w16, #26ではなくsvc 0x80を検索した理由が気になる著者は質問に答える用意がある
冒頭の動画は非常に優れたプログラミング動画
このアプリが正規のアプリなのか、それともマルウェアの疑いでデバッグされたものなのか気になる
PT_DENY_ATTACHの回避(Hard Mode)
"com.apple.tw.twrr" という通知が気になる
ウェブサイトのJavaScriptコードをリバースエンジニアリングしている人たちについて知っているか気になる
脱獄したiPhoneでカスタムkextsを実行できるのか気になる