メソッドスウィズリングを学ぼうとしています。クラス内のメソッドを呼び出すだけの目的の C でプログラムを作成しました。現在、DYLD_INSERT_LIBRARIES を使用して動的ライブラリをロードしようとしているため、動的ライブラリで定義されている新しいメソッドでメソッドの実装をオーバーライドできます。目的は、引数を変更してから、元の関数呼び出しを呼び出すことです。
プログラム コードは、http://pastebin.com/a0b3qkgB で入手できます。ダイナミック ライブラリのコードは、http: //pastebin.com/Ndf6VdUtで入手できます。
行「if (self == [Encryption class]) {」が動的ライブラリで実行されるとすぐに、コードにクラス名が表示され、奇妙なメッセージが吐き出されることがわかりました。完全な出力:
Test-IPhone:~ root# DYLD_INSERT_LIBRARIES="./evil7.dylib" ./new
objc[324]: Class Encryption is implemented in both /private/var/root/evil7.dylib and /private/var/root/./new. One of the two will be used. Which one is undefined.
Inside load function
objc[324]: Encryption:
Trace/BPT trap
コードの何が問題なのかわかりません。どんな助けでも大歓迎です。
目的は、動的ライブラリ (コード インジェクション) を使用して目的の C メソッドをオーバーライドすることです。