MASTG-TOOL-0046 Cycript
Cycript は Jay Freeman (別名 Saurik) が開発したスクリプト言語です。これは実行中のプロセスに JavaScriptCore 仮想マシンを注入します。Cycript の対話型コンソールを使用して、ユーザーは Objective-C++ と JavaScript のハイブリッド構文でプロセスを操作できます。実行中のプロセス内の Objective-C クラスにアクセスすることやインスタンス化することがサポートされています。iOS 上で Cydia Substrate Extensions として知られる Cydia ランタイムパッチを開発するための標準フレームワークである Cydia Substrate を使用して、デバッガと同様に Cycript を実行中のプロセスに注入できます。Cycript には、コード注入をサポートするツールである Cynject を含みます。
Cycript をインストールするには、まず SDK をダウンロードし、展開して、インストールします。
#on iphone
$ wget https://cydia.saurik.com/api/latest/3 -O cycript.zip && unzip cycript.zip
$ sudo cp -a Cycript.lib/*.dylib /usr/lib
$ sudo cp -a Cycript.lib/cycript-apl /usr/bin/cycript対話型 Cycript シェルを起動するには、"./cycript"、または Cycript がパス上にある場合は "cycript" を実行します。
$ cycript
cy#実行中のプロセスに注入するには、まずプロセス ID (PID) を見つける必要があります。アプリケーションを実行し、アプリケーションがフォアグラウンドにあることを確認します。cycript -p <PID> を実行すると、プロセスに Cycript を注入します。例として、SpringBoard (常に実行されています) に注入してみます。
$ ps -ef | grep SpringBoard
501 78 1 0 0:00.00 ?? 0:10.57 /System/Library/CoreServices/SpringBoard.app/SpringBoard
$ ./cycript -p 78
cy#最初に試してみることの一つは、アプリケーションインスタンス (UIApplication) を取得することです。これは Objective-C 構文を使用できます。
cy# [UIApplication sharedApplication]
cy# var a = [UIApplication sharedApplication]ここでこの変数を使用して、アプリケーションのデリゲートクラスを取得します。
cy# a.delegateCycript で SpringBoard のアラートメッセージをトリガーしてみましょう。

Cycript でアプリのドキュメントディレクトリを見つけます。
コマンド [[UIApp keyWindow] recursiveDescription].toString() は keyWindow のビュー階層を返します。keyWindow のすべてのサブビューとサブサブビューの説明が表示されます。インデントスペースはビュー間の関係を反映しています。たとえば、UILabel、UITextField、UIButton は UIView のサブビューです。
また、指定された Objective-C クラスのインスタンスをヒープから検索する choose などの Cycript の組み込み関数を使用することもできます。
詳しくは Cycript マニュアル をご覧ください。
Last updated
Was this helpful?