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