アプリケーションの実行中に個々のアセンブリ命令を変更するにはどうすればよいでしょうか?
既存のアプリケーション用に書いている Mobile Substrate の微調整があります。微調整のコンストラクター ( MSInitialize
) では、アプリのコード内の個々の命令を書き直すことができる必要があります。つまり、アプリケーションのアドレス空間には変更したい場所が複数ある可能性がありますが、各インスタンスで変更する必要があるのは 1 つの命令だけです。私はすでにアプリケーションの ASLR を無効にしており、パッチを適用する命令の正確なメモリ アドレスを知っています。また、新しい命令の 16 進バイト (char[] として、ただしこれは重要ではなく、必要に応じて変更できます) を持っています。変更を実行する方法を理解する必要があります。
iOS がデータ実行防止 (DEP) を使用して、実行可能メモリ ページも書き込み可能にできないこと、およびその逆を指定することは知っていますが、ジェイルブレイクされたデバイスではこれをバイパスできることはわかっています。また、iDevices で使用される ARM プロセッサには、変更を反映するために更新する必要がある命令キャッシュがあることも知っています。しかし、私はこれをどこから始めるべきかさえ知りません。
ですから、そうでなければきっと尋ねられるであろう質問に答えるために、私は何も試していません. これは私が怠け者だからではありません。むしろ、これがどのように達成されるのかまったく見当がつかないからです。どんな助けでも大歓迎です。
編集:
それが少しでも役立つなら、私の最終的な目標は、App Store アプリケーションをフックする Mobile Substrate の微調整でこれを使用することです。以前は、このアプリケーションを変更するには、まずアプリを解読してバイナリにパッチを適用できるようにする必要がありました。私は強く反対している著作権侵害につながる可能性があるため、人々がアプリをクラックする必要がないようにしたいと考えています。すべての作業が Objective-C ではなく C++ で行われ、アプリケーションが取り除かれ、使用するシンボルが残っていないため、通常は Mobile Substrate を使用できませんMSHookFunction
。