Cycript は、Objective-C と JavaScript を組み合わせたコンソール ベースのアプリケーションです。Cycript は、iOS アプリケーションの動的分析に非常に役立ちます。
メソッドまたは完全な ipa を Swift で記述した場合、ジェイルブレイクされたデバイスでアプリケーションをフックすることは可能ですか? それとも、Swift は iOS の「ネイティブ C」コードのように安全ですか?
Cycript は、Objective-C と JavaScript を組み合わせたコンソール ベースのアプリケーションです。Cycript は、iOS アプリケーションの動的分析に非常に役立ちます。
メソッドまたは完全な ipa を Swift で記述した場合、ジェイルブレイクされたデバイスでアプリケーションをフックすることは可能ですか? それとも、Swift は iOS の「ネイティブ C」コードのように安全ですか?
Cycript にはあまり詳しくありませんが、Swift コンパイラについては少し理解しています。
Swift コードはフックに対してより耐性がありますが、完全に不可能というわけではありません。@objc と宣言された NSObject サブクラスと Swift クラスは、Objective-C コードと同じようにアクセスできる必要があります。純粋な Swift コードは、特に最適化されたビルドでは、コードを挿入するのが難しくなります。これは、多くの場合静的にディスパッチされ、多くの場合、呼び出し元のコードに実際にインライン化されるためです。
コードがインライン化されていない場合、メモリ内の関数自体にパッチを適用して別の関数にジャンプすることは可能かもしれませんが、関数テーブルを変更するだけでは簡単ではありません。
主要な関数がインライン化されている場合、コードの一般的なパターンを識別でき、関数が十分に長い場合、代替バージョンへのジャンプでパッチを適用できる場合は、各使用法を見つけて変更することが可能かもしれませんが、これは本当に非常にトリッキーです。