Download - iOS app hacks all_map

Transcript
Page 1: iOS app hacks all_map

2. iOS の画面録画

3. Google 先生に聞く Capture 方法

7月上旬 AppStore から消える....

iOS application hack

プライベートAPI?

iOS Dev Forumでも話題に

専用ストア Cydia Jailbreak

2012年6月中旬頃AppStore登場iOS の画面を録画できるアプリ

ブロガーを中心に話題に!本来アプリをまたいで録画はできないはず?

Reject対象!?

じゃあ、AppStore公開なしに自作してみるかと。 でした....

とりあえず、ゲームプレイ動画を撮影するのにむちゃくちゃ便利

1. iOS のビデオ書き出し

iOS Dev Center

What'sNewIniPhoneOS.pdf

歴代OSの最新機能一覧が掲載 ビデオ書き出し周りについて調査

AVAssetWriter AVAssetWriterInput AVAssetWriterInputPixelBufferAdaptor

iOS Dev Center

iOS Dev Center 『capture』で検索

Technical Q&A QA1703

アプリをまたいで録画することはできない

iOS Screen Capture API

UIGetScreenImage

Private APIカメラアプリで連写機能実装で利用OS 4で正式にカメラ用のAPIが追加され利用されなくなった

Direct access

Screen capture

4. Google 先生に聞く Display Recorder

Display Recorderの解析スレッドdlsymdlopenUIGetScreenImageIOSurface

キーワードをゲット!

Display recorder UIGetScreenImage

5. iOSのマルチタスキング

録画中にステータスバーに 音楽再生マークが表示

VoIP Location Audio

無制限

通常

最大10分(600秒)

6. iOSアプリの構造

ipa形式でPC内に保存 (ipa = zip file)

たいていは、Xcodeによりプリマルチプルドアルファ処理が施されるため、MacのQuickLookでは表示できない。

PNG画像

アプリに関する各種設定

plist

アプリケーションのインターフェイス画面。基本的にバイナリ形式で保存されている。

nibファイル

サウンド、動画ファイルなど各種リソースファイル

その他

mute500ms.caf

Do you know Display Recorder?

7. バイナリ解析

strings < アプリバイナリ > ログテキスト ●バイナリ内に含まれる文字列を抽出してくれる

strings

関数名から動作を予測することができる。

otool -L アプリバイナリ ●アプリがリンクしているフレームワークとそのバージョンが表示される otool -tv アプリバイナリ ●ディスアセンブラコードの表示

otool

怪しいメソッドの実装コード量や実装を確認することができる。オプション次第でデータセクションの情報を取得できたりする。

otoolでフレームワークを把握し、具体的にどの関数や定数が使われているか調査する時に利用できる。

nm -u ●アプリがリンクしているシンボルがリストアップされる

nm

AVAssetWriterの利用 ●strings、nmの結果からAVAssetWriterを使っていることが判明。 ●定数などもnmツールの結果から利用しているプロパティの値も判明。 ●これによりiOS 4.1 SDK以上を利用していることが確定!

UIGetScreenImageが見当たらない ●dlsymを使っているところをみると動的に呼び出している可能性は高い。 ●strings の結果から _OBJC_IVAR_

$_DetailViewController._dylib_handler_uikit があることを発見。dlopenでシンボルを読み出し、dlsym用のハンドラを保持している。

利用しているUIKitのバージョン ●UIKitのバージョンは1700。最新のSDKを利用していることが判明。 試しに古いバージョンのSDKをダウンロードして、dmgからSDKを取り出し、XCodeにインストールして試してみたところ、そのバージョンは、iOS SDK 4.1

で1300だった。

Direct Accessモード ●Display Recorderには、2つのモードがあるが1つは、UIKit内のUIGetScreenImage関数を使ったCapture mode。 もう一つのDirect Accessモードは、dylib_handler_iosurfaceが用意されているところをみるとこれを使ってフレームワークバッファに直接アクセスする方法で実現されていると思われる。

解析結果