LoginSignup
26

More than 5 years have passed since last update.

iOS バイナリーファイル解読

Last updated at Posted at 2017-05-15

上篇:iOS ファイルシステム紹介

初心者の段階に我々の目標はApplication、Dynamic Library(略称dylib)とDaemonこの3つの種類のバイナリーファイル、理解はふかければ深いほどバイナリーにの逆分析はうまく行けるようになります。3つの種類のバイナリーの役目も違うしそれなりのフォルダー仕組みもパーミッションもそれぞれです。

Application

Applicationとは毎日使われているアプリのことです。IOS開発者にとって仕事そのものがアプリと付き合うことです。Reverse EngineeringにとってはIOSアプリ開発者と全く違うものに興味を持っています。これからReverse Engineeringに大事なコンセプトをご紹介します。

1,Bundle

BundleのコンセプトはNeXTSTEPから継ぐ生まれるもの、ファイルではありません、ある標準で構築されたフォルダーです。その中に実行ファイルに必要とされている環境も、サポートファイルも、写真、音声ファイルも保存しています。IOS開発にとってアプリもFrameworkもBundleの形で存在しています。Reverse Engineeringによく見られているPreferenceBundleもSettingに依存するアプリ、構築もアプリと似てて、本質もBundleです。

FrameworkもBundleであり、中身は実行ファイルの代わりに、dylibです。一般的にFrameworkの地位はアプリより高い、アプリは皆Frameworkを調達して役目を達成できることになります。あるBundleを目標に確定したら殆どの手懸かりはBundleの中で見つけられます、難易度は随分に下がるだろう。

PreferenceBundle
image
---------------------------------------------------------------------------------------------------

2,アプリフォルダーの中身

Reverse Engineeringにとってフォルダーにの熟練程度は仕事の効率に関わる鍵です。Bundleの中に下の3つの部分が肝心です。

Info.plist

Info.plistがAppのMetadataを記録しています、Bundle Identifier、Bundle Name、Icon、配布設置など。この中にBundle IdentifierがTweakの大事なパラメ—タとなる。Macでは直接OpenできますダブルクリックしてXcodeで開きます。

Xcodeでplistを見る
image
---------------------------------------------------------------------------------------------------

Xcodeで搭載されたCMDコマンドラインツール:plutilと使って同じ効果です。一般的にはCMDツールをおすすめします。

snakeninnysiMac:~ snakeninny$ plutil -p
/Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5/SiriViewServic
| grep CFBundleIdentifier
"CFBundleIdentifier" => "com.apple.SiriViewService"

実行ファイル

実行ファイルは言わなくても私達の目標としてナンバーワンです。Appフォルダーのコアです。Info.plistを観察して実際の実行ファイルを定位する。

plistファイルを観察してExcutable Fileを定位
image
---------------------------------------------------------------------------------------------------

lproj フォルダー

lproj フォルダーは様々なグローバル・ローカル言語設定ファイル(.strings)、**リバースエンジニアリングに重要な手懸かりであります、plutilで観察できます。これからどんどん紹介します。

snakeninnysiMac:~ snakeninny$ plutil -p
/Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5/SiriViewServic
{
"ASSISTANT_INITIAL_QUERY_IPAD" => "What can I help youwith?"
"ASSISTANT_BOREALIS_EDUCATION_SUBHEADER_IPAD" => "Justsay "Hey Siri" to learn more."
"ASSISTANT_FIRST_UNLOCK_SUBTITLE_FORMAT" => "Yourpasscode is required when %@ restarts"
……

3,システム・アプリ VS AppStore・アプリ

/Applications/にシステムAppとCydia Appを保管しています、CydiaからインストールしたAppもシステムAppと見られます。/var/mobile/Containers/にはAppStoreからダウンロードしたAppです。同じAppに認定されても、以下のように区別があります。

フォルダー組成

AppのBundle内部は殆ど同じ、Info.plist、実行ファイル、lprojフォルダーなどは存在しています。Dataフォルダーの位置は違います、AppStoreのアプリは/var/mobile/Containers/Data/にあり、ユーザーのmobileとして起動したシステムアプリは/var/mobile/にあり、ユーザーのrootとして起動したシステムアプリは/var/root/にあります。

インストーラーのフォーマットとパーミッション

Cydiaアプリのインストーラーフォーマットはdeb、Debianから継ぐインストーラーパッケージです、Cydiaの作者SaurikよりIOSに移植しました、debパッケージのオーナー・ユーザーはrootで、オーナー・グループはadminであります、rootのパーミッションで全システムで動くます。AppStoreアプリはアップル専有のIPAでインストールされます、オーナー・ユーザーとオーナー・グループは全部mobileで、mobileのパーミッションでシステムの一部地域しか動けません。

Sandbox

  • 一般的に言えば、IOSのSandboxは訪問制限ルールセットであります。ルールのセットファイル(entitlements)はIOSのコアセキュリティ対策の一つであり、その実現は複雑すぎて今の私達にとって手は及びません。今はただ、SandboxはAppを梱包して、全ての接続はApp以内に限定されていることを知ればいいです。Appは隣のAppの存在すら分からないぐらい厳しくて、接続などはもちろん話にならないです。Appno機能もリミットされています、例えばICLOUDに接続したら必ずSandboxを通します、システムのメッセージもメールも通話にの接続も全部Sandboxを通さなければなりません。
  • 今はSandboxの存在を意識するだけでいいです、脱獄はもうIOSの殆どのセキュリティ対策を抜いています。Sandboxのルールのセットファイル(entitlements)にも手術をして、それを感じなくぐらいにさせた。もしTweakを作った途端、あるファイルが書き込めませんとか、函数を調達しても効果が出ないとか、自分のコードを確保するうえ、Sandboxのルールのセットファイル(entitlements)は問題あるかどうかに振り返して見てみよう。
SandboxはAppを管理している
image
---------------------------------------------------------------------------------------------------
次章はIOSのDynamic Library とDaemonを解読します、お楽しみに!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26