ハードの修理:
直接ソースコード、再発行されたバージョンを変更する作品。
コールド修理:
動的ライブラリとフック技術、プログラムの起動時の修理で問題の完全なコードを使用してパッチパッケージ;ケース:iOSのリバースエンジニアリング。
特長:現在、ダイナミックパブリッシングをサポートしていない、パッチがリリースされ、元のコードを変更しません。
ホットフィックス:
修復メカニズムを起動するための実行可能ファイル内の熱に直接後継。
自宅検査プログラムの後、動的熱エンジンの修理は、パッチに完全な動的なフックを開始しました。
原理:
1、更新チェックエンジンの修理が含まれています。
2、リダイレクトメッセージ; JPForwardInvocationをリダイレクトするために新しい機能を追加するために変更する必要があります。
処理機能は、修飾および非修飾を区別JPForwardInvocation。
変更された機能は、最終的に解釈するのjs呼び出します。
図3は、修飾されたJSは、最終的OCの実行と解釈する機能が含まれ;
この方法は成功し、それを通過しますどのようなプロセスが呼び出されましたか?
これは、基本的に、プロセスパッチのメソッド呼び出しです。
まず、ボタンをクリックすると、最終的forwardInvocationがJPForwardInvocationが呼び出されるように、JPForwardInvocationメソッドは、メソッドのスウィズリング変換を使用しているになったのでこの方法は、resolveInstanceMethod-> forwardingTargetForSelector-> forwardInvocationおよび他の方法を通過するIMPのメッセージの転送方法を見出していないhandlebtn呼び出します。
まずJPSelector対応する方法があるかどうかを見てIMPを対応するコールJPSelectorがある場合、あなたは、元の前方メソッドを呼び出した場合、存在しません。
私たちは、パッチに言ったときに覚えている(すなわちdemo.js)積載方法JSValueパッチは、OC内のリスト__JSOverrideMethodsの形式で保存されます。
IMP機能はJSValue形式でJPSelectorパッチ方式店を見つけ、それを呼び出すことです。
https://www.mobilezhao.com/?tag=jspatch