iOS app hacks all_map

1
2. iOS の画面録画 3. Google 先生に聞く Capture 方法 7月上旬 AppStore から消える.... iOS application hack プライベートAPIiOS Dev Forumでも話題に 専用ストア Cydia Jailbreak 20126月中旬頃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の解析スレッド dlsym dlopen UIGetScreenImage IOSurface キーワードをゲット! Display recorder UIGetScreenImage 5. iOSのマルチタスキング 録画中にステータスバーに 音楽再生マークが表示 VoIP Location Audio 無制限 通常 最大10(600) 6. iOSアプリの構造 ipa形式でPC内に保存 (ipa = zip file) たいていは、Xcodeによりプリマルチプルドアルフ ァ処理が施されるため、MacQuickLookでは表 示できない。 PNG画像 アプリに関する各種設定 plist アプリケーションのインターフェイス画面。基本的 にバイナリ形式で保存されている。 nibファイル サウンド、動画ファイルなど各種リソースファイル その他 mute500ms.caf Do you know Display Recorder? 7. バイナリ解析 strings < アプリバイナリ > ログテキスト ●バイナリ内に含まれる文字列を抽出してくれる strings 関数名から動作を予測することができる。 otool -L アプリバイナリ ●アプリがリンクしているフレームワークとそのバージョンが表示される otool -tv アプリバイナリ ●ディスアセンブラコードの表示 otool 怪しいメソッドの実装コード量や実装を確認すること ができる。オプション次第でデータセクションの情報 を取得できたりする。 otoolでフレームワークを把握し、具体的にどの関数や 定数が使われているか調査する時に利用できる。 nm -u ●アプリがリンクしているシンボルがリストアップされる nm AVAssetWriterの利用 stringsnmの結果から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が用意されているところをみ るとこれを使ってフレームワークバッファに直接アク セスする方法で実現されていると思われる。 解析結果

description

iOS app hacks all mindmap

Transcript of iOS app hacks all_map

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が用意されているところをみるとこれを使ってフレームワークバッファに直接アクセスする方法で実現されていると思われる。

解析結果