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.delegate

Cycript で SpringBoard のアラートメッセージをトリガーしてみましょう。

Cycript でアプリのドキュメントディレクトリを見つけます。

コマンド [[UIApp keyWindow] recursiveDescription].toString()keyWindow のビュー階層を返します。keyWindow のすべてのサブビューとサブサブビューの説明が表示されます。インデントスペースはビュー間の関係を反映しています。たとえば、UILabelUITextFieldUIButtonUIView のサブビューです。

また、指定された Objective-C クラスのインスタンスをヒープから検索する choose などの Cycript の組み込み関数を使用することもできます。

詳しくは Cycript マニュアル をご覧ください。

Last updated

Was this helpful?