iOS Reverse Engineeringの操作手順

上篇：[iOS Reverse Engineeringに関するコンセプト](http://qiita.com/roysue/items/161790d06acb7e1b839b)

### iOSアプリを逆分析の手順

iOSアプリを逆分析しようとしたら、手順は？どうやって仕掛けますか？このWrite-upの本音は皆さんにiOS Reverse Engineeringのドアを開けて見せて差し上げることです。

一般的に、iOS Reverse Engineeringはアプリ全面分析とコード局部分析の二つの段階があります。アプリ全面分析の場合、アプリの全面上に上からの視線で、アプリの行為とかファイルの仕組みとか、気になるところをまず探し出せ、コード局部分析の段階に入ります。そして気になる部分のコードをアセンブリ言語に還元し、CPUアーキテクチャまで分析して目的を果たす。

**アプリ全面分析**

>アプリ全面分析の段階は、目標アプリを基礎功能を把握してから、功能の組み合わせを探ります。様々の操作をさりげなく試して、なんてもやってみて、アプリの反応を観察すること。その同時にきになるところを気をつけます、例えばどのオプションでアラームするのか、どのボタンを押すと音をするのか、どにような情報を書くとどこでどんな結果が出るのか、を心にかけてください。アプリのファイルシステムも、スクリーンに映った写真もロゴも、アプリの配信Configの位置も、データベースのファイルの中身も、暗号化を状況も、この段階で全面分析します。

中国の”Twitter”——新浪微博を例として言えば、Documentの目次を観察するとき、以下のデータベースを発見しました。

```
-rw-r--r-- 1 mobile mobile 210944 Oct 26 11:34
db_46100_1001482703473.dat
-rw-r--r-- 1 mobile mobile 106496 Nov 16 15:31
db_46500_1001607406324.dat
-rw-r--r-- 1 mobile mobile 630784 Nov 28 00:43
db_46500_3414827754.dat
-rw-r--r-- 1 mobile mobile 6078464 Dec 6 12:09
db_46600_1172536511.dat
……
```
SQLiteでデータベースを開くなら、以下のようにフォローした人の個人情報が発見しました。

![屏幕截图_051017_101454_AM.jpg](https://qiita-image-store.s3.amazonaws.com/0/179982/0ad8c714-f544-ef2d-76d2-0e20b2570f18.jpeg)

このような情報は心掛いっぱい入っています：データベースの名前、ユーザーのID、ユーザーインフォのURL...etc...これら全部逆分析の入り口として潜入することができます。このような情報を探して整理して、きになるものをメモするのはiOS Reverse Engineeringの第一歩となります。

**コード局部分析**

>目標が定めたら、次はコードごとに分析を始めます。
iOS Reverse Engineeringを通して、アプリのデザイン方法、内部アゴリズム、細分実現とかを推測できます。とても複雑の過程でして、アプリをパーツごとに叩き潰して再構築します。iOS Reverse Engineeringの能力を高めたいとしたら、ソフトウェア開発、ハードウェアアーキテクチャ、iOSシステム全般的に深刻に把握することです。その把握する能力こそが、どこまでいける鍵となります。一言で全て説明するわけにはいかないので、日々の重ねてどんどん身につけることです。ここで好奇心と根性はものを言います。

この文章のシリーズはただ初心者にiOS Reverse Engineeringの筋とツールを紹介するだけです、技術も日進月歩のもので、なんとかみんなと一緒に学ぶの終生学習の取り柄です。

### iOSアプリを逆分析のツール

理論だけで物足りないので、これから様々のツールを使って理論を実現します。Reverse Engineeringだけあってのツールが、一般的のソフトウェア開発にてのIDEとかと比べれば、そんなにスマートではありません、幾つかの場合自分で調整する必要があります。ツールを使用するうちにどんどん慣れていくのも当たり前です、こういう状況にこの方法で解決できる推測できます。Reverse　Engineeringのツールは殆ど四酒類に分けます：モニター類、逆アセンブリ類、デバッガー類、Tweak開発類。

**モニター類**

>探知、モニター、記録などの機能をつけているツールはミニター類に分類されます。このようなツールは目標アプリの内部と外部の変化を検測して主人に通報します、例えばUIの変化、Network Activity、ファイルの読み書きとか。欲に使われているツールはReveal、Snoop-it、Introspy、Appmonなどあります。

欲に使われる有名なアプリUI探知ソフト：Reveal、このソフトを使って気になるUIを入口として、コードに潜り込めます。

![image](https://qiita-image-store.s3.amazonaws.com/0/179982/37780648-cace-aecd-db40-2d799cebeae1.png)

**逆アセンブリ類**

>コードに潜り込んたら、逆アセンブリのツールを使ってコードの流れを整理します。逆アセンブリツールはバイナリーを入力として処理、アセンブリコードをレイアウトします。逆アセンブリ類は高度専門家の科学領域として、よく使われるツールはだか２つ、IDAとHopper。

老舗企業のIDAは分野内最も使われる逆アセンブリツールでした、Windows、Linux、MacOSプラントフォームと多種のCPUアーキテクチャに対応しています。

![image](https://qiita-image-store.s3.amazonaws.com/0/179982/8a8b87be-3e4c-bbb1-219e-e3c0048844f3.png)

Hopperは近々デビューした後輩です、MacOS・iOSを専攻しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/179982/4ec5797d-a076-5384-eb2d-e0bda81019f6.png)



バイナリーを逆アセンブリした後、一番面白い同時に最もチャレンジところが迎えに来ました、アセンブリコードの分析です。詳しくはあとでゆっくり説明させていただきます。


**デバッガー類**

>iOSアプリ開発者にはもうなれているかもしれない、iOSアプリの開発工程中よく使われているXcodeのLLDBで、コードの途中にBreakpointを設置し、プロセスを一時中止にさせることで、そのインスタント状態を示すことが多い。Reverse　Engineeringにとっても、LLDBを使っています。

![image](https://qiita-image-store.s3.amazonaws.com/0/179982/eb1e3c74-f83a-d735-c151-5bb78433cd23.png)

**Tweak開発類**

>UIからコードを潜り込み、逆アセンブリツールとデバッガーでバイナリーを分析した後、成果をTweak開発ツール：TheosでTweakをかけることになりました。iOSアプリにとってXcodeは最も使われている公式IDEでしたが、Jailbreak　iOSに移ったら公式ツールなどは存在しないです。Xcodeを基づいてのiOSOpenDevとか、CLIを基づいてのTheosもあります。自分から言えば、Theosのほうが遥かに優秀でした。Theosを知る前にずっとAppStoreの枠内に制限されることをなんとなく感じているが、Theosを把握してからAppStoreを突破して全面的にiOSシステムに猪突猛進しました。

### SUMMARY

この文章はiOS　Reverse　Engineeringのコンセプトを紹介し、大体の流れを説明しました。詳しくの操作手順とケース学習はこれから入ります。

次の章：[iOS ファイルシステム紹介](http://qiita.com/roysue/items/4371aa29722aafdff376)