はじめに
私は普段、よく使われているアプリのハック要求を満たすために、脱獄版のiOSを使う習慣があります。例えば、以下のような用途があります:
- YouTubeの広告除去&バックグラウンド再生の解除
- アプリ起動時の広告削除
- アプリのバックグラウンド動作の実現
しかし、システムを脱獄すると一定のセキュリティリスクが伴い、一部のアプリは脱獄環境下での実行を阻止する場合があります。このような脱獄検出を回避する手法を「jailbreak bypass」と呼びます。
ここでは、ある銀行のアプリを例に挙げ、重要な関数を特定し、それをフックする基本的な方法を紹介します。
材料
- Hopper Disassembler(ARMバイナリ解析ツール)
- Theos(フック用ツール)
ポイント関数を探す
i. アプリ内での警告メッセージに基づき、Hopper Disassemblerでバイナリ実行ファイル内の該当文字列を検索します。

ii. 検索した文字列の参照先で、対応する仮想アドレスを特定します。例では、0000000103e264d8が該当します。

iii. 仮想アドレス0000000103e264d8を右クリックして、このアドレスに関連する参照アドレスを調べます。

すると、以下の参照が見つかります:
103fc5620 dq ___CFConstantStringClassReference, 0x7d0, 0x103e264d8, 0xc ; u"检测到您的设备非安全设备"
上記のアセンブリコードを見ると、定数文字列クラスCFConstantStringClass内のARM命令dqが、この文字列のメモリ割り当てを完了していることが分かります。
iv. 重要な参照関数を特定し、Hopperの逆アセンブル機能を使用して疑似コードを確認します。

疑似コードを見ると、CIBDeviceSaveToolクラスの静的メソッド+(void)checkCibSaveEmvがこの文字列を参照していることが分かります。この関数が重要な役割を担っていると特定したら、この関数をフックして実行をスキップする準備を進めます。
フック
コードは非常にシンプルです:
// 詳細は http://iphonedevwiki.net/index.php/Logos を参照
#if TARGET_OS_SIMULATOR
#error シミュレータはサポートしていません。本物のiPhoneデバイスを使用してください。
#endif
#import <UIKit/UIKit.h>
%hook CIBDeviceSaveTool
+(void)checkCibSaveEmv {
// 何もせず、関数ロジックをスキップ
NSLog(@"checkCibSaveEmv がフックされました");
return;
}
%end
完成

フックが成功し、アプリに非安全デバイスの警告が表示されなくなりました。
Comments | NOTHING (这是个静态化页面,评论后要等CDN刷新啦~)