挨拶
皆さん、はじめまして、中国人のroysue(ID)と申します。(twitter:https://twitter.com/r0ysue)八年前にようやく日本語を勉強したが、せっかくJLPT N1をとったが仕事になかなか使うチャンスなくて、下手にならないように日本語ブログをはじめました。
今はiOSリバース・エンジニアリングを専攻しています。
iOSリバース・エンジニアリングに関して皆さんと一緒に検討しましょう。
少しずつ毎日ブロクを書くので、トリックは小さけれとも、誰かに役に立つかもしれないので、うるさくて喋る私を勘弁してください。
これからはよろしくお願いします
コンセプト
Soft Reverse Engineeringとは、あるプログラミングあるいはシステムAPI、構築、行為を分析して、技術方面の実現方法を推定する意味です。あるソフトウェアに気に入ったけど、Source Codeを手に入れないときは、Reverse Engineeringでソフトウェアの内部仕組みを分析できます。
IOS開発者にとって、IOSに搭載する様々なアプリは想像のかぎり最も奇妙な複雑で素晴らしい仮想品です、デリケートで美しい、斬新で想像力抜群。開発者として、これらのアプリを見ながら、やむを得ずこう思います、エレガントな皮膚の下に一体どんな技術を使ったのか?我々はアプリの仕組みから何か得られるのか?明日にIOSに関してのReverse Engineeringをご紹介します。
Intro
たとえコカ・コーラの調合指令書は最高秘密としても、ほぼ同じ味を調合できる飲料水会社もあります。たとえ他人のSource Codeを手に入れないとしても、Reverse Engineeringでプログラムの仕組みを覗けます。
Basic Requirement
iOS Reverse Engineeringはソフトウェアの枠内で行われた分析行為です。逆向分析をする前に、まずは正方向のIOS系アプリの開発方法を知るべきです、それだけではなく、IPHONEとMACのハードウェア、システムの特性などは基礎中の基礎です。どんなアプリでも入手しても、すぐに項目の規模とか、使われた技術とか、MVC(Model-View-Controller)とか、どんなFrameworkをImportしたとか、どんなLibraryを使ったとか、推測して頭のなかに明白にわかることは肝心です。
これらの要求は素人に対して難しけれども、必要なんです。でも今はできなくても大丈夫です、好奇心と根気さえあれば、日々を重ねてきっとやり遂げます。研究するうちに、強い好奇心の駆使で飯も忘れてクラシックなAPPを分析し続けて、壁にぶつかることも止むを得ずいつもあります、こんな時は根性は次から次への困難に乗り切る鍵となります。どうか信じてくれ!大量の時間と精力をつかってCodeを書いて、プログラムをdebugして、ロジックを分析するうちに、どんどん試験とエラー仕組みから、Reverse Engineeringの美しさを体験できる。能力も上がる一方で、最後の勝利に導くだろう。
Reverse Engineeringの役目
Reverse Engineeringは矛と同じ、開発者から安全だと思っているAPPの守り『盾』を刺し潰すことは役目です。現実は、多くのAPP開発者はまだこんな矛の存在を認めていません、また自分のAPPはてっきり潰されないと思い込んでいます。
Line或いはTwitterみたいのIM類APPにとって、コミュニケーション能力はコアです。銀行、ネット販売、支払うのAPPにとって、個人データと取引データはコアです。全てのコアデータは守らなければならない存在です、開発者はAnti-debugger、データ暗号化、コード混乱化する多種の手段を使って、情報を漏らさないようにReverse Engineeringの難易度を高めます、もしお客様の個人データを流出したら会社も潰されるかもしれないので。
でも現在に使われているAPPを守る手段は、Reverse Engineeringと比べて、比べものにならないぐらい、次元が違うんです。一般的のAPPはお城と同じ、APPのMVCを城内に仕組み、城の周りに古部を立て、河を掘って、見回りの軍隊を設置します、他人から見れ万事万全みたいですね。
だがもし大陸から脱出して、空に飛んだら、城の内部は丸見えです。
objcファンクションも、Propertyも、外部ファンクションお、グローバル変数と全てのロジックは目の前に暴露しています。建物、河、軍隊を設置するのも無意味です。レベルが違うから。我々の狙うのは、建物とか軍隊とかを潰すことではなく、誰かを探して経由として将軍家の金庫を開くことです。
Reverse Engineeringとは正面衝突ではなく(戦争は嫌い)、高い視線から物事の流れを把握して、APPのコアデータとデザイン、protocolを盗んで。APPの流れを変更して、自分の奴隷にする時もあります。ここ数年Reverse Engineeringをした成果、ほぼ全部のAPPは逆方向分析できます、そのデザイン・セオリーと実現方法は細部まで丸見えです。
以上は全て私の一言で、Reverse Engineeringの威力をみんなに示すことです。略して言えば、主な役目は二つ:
- 目標プログラムを分析して、コアデータを手に入れること、情報セキュリティーの所属。
- 他人のプログラムの構築を覗いて、自分のプログラムを開発する、ソフトウェア開発に所属。
情報セキュリティーに所属するReverse Engineering
情報セキュリティー業界は一般的に沢山のReverse Engineeringを使っています。例えば:金融類のAPPを逆分析して、APPの安全レベルを評価しまするとか、ウイルスを逆分析して、抵抗する方法を探すとか、iOS電話帳とメッセージを逆分析して携帯ファイアウォールを組み立つこととか。
1、安全レベルを評定すること
取引の能力を持つAPPはまずデータを暗号化して、ローカルで保存してからネットワーク通してサーバーと通信します。もしこの流れに安全意識が欠けているなら、お客様の個人データ(銀行口座とか、パスワードとか)を直接保存してHTTPで通信したらやばいことになります。
もしある業界大手はある銀行端末APPを作ろうを考えています、会社の誇りに拘りがあるので、市場に流す前に、セキュリティー会社を雇ってAPPの安全レベルを評定します。普通の場合このセキュリティー会社はAPPのソースコードは手に入れず、正面分析は出来ません。 Reverse Engineeringに頼るしかないです。APPをブラックボックスにおいて、攻撃して評価します。
2、ウイルスとトロイ木馬を逆分析すること
iOSはスマートシステムです、本質はコンピューターシステムと全く同じです。1代目からネットワークの能力を与えられています、ネットワークこそがウイルスの拡散の源です。2009年に流出したIKeeウイルスガiOSの歴史上第1目のウイルスでした、JailbreakされてSSHサービスもインストールされて、そして黙認の暗号”alpine”も変更されずの端末を感染してロックスクリーンの背景写真をあるイギリス歌姫を変更します。2014年末に現れたWireLurkerウイルスガお客様のプライバシーインフォメーションを盗みます、PCあるいはMACの通して拡散できでて、一般市民が多大の被害を受けています。
ウイルスの開発者にとって、Reverse Engineeringを使って、システムとソフトのバグを探して、バグを使って目標システムに潜り込んで、データを盗んで好きがってやっています。
アンティ・ウイルスのソフトの開発者にとって、Reverse Engineeringを使ってウイルスサンプルを解剖して、ウイルの行為を観察してそのウイルスを閉める方法を研究します。
3、ソフトウェアの裏口をチェックすること
Open Sourceサフトの長所の一つはそのいい安全性。多くのプログラマーに見られて、編集されてコードに裏口が存在することはありえないです、ソフトのセキュリティー問題も天下に暴く前にとくに解決されていました。プライベートなソフトの状況は別だ、みんなに校閲されずに安全性は確保出来ません。こんな時はReverse Engineeringの出番です。もしアップルの公式APP Storeを迂回してCydiaとかの他のマーケットからソフトをインストールしたら、そのソフトの安全性に疑いがあります。わざに裏口を設置して発動する機会を待つAPPも存在するかもしれません、このようなAPPに逆分析しようとしたらReverse Engineering技術は必要です。
4、ソフトウェアをリミットから解放すること
iOS開発者はアップルの公式APP STOREとかCydiaとかで自分の開発したアプリを売って収入をもらって生活を求めます。ソフトウェアの世界に正規版と海賊版の戦いは終えていません、多少のプログラマーはアプリに海賊版を防ぐ技術を設置しました。だか、矛と盾の戦いは延々に続くだろう、たとえ今の先端技術としてもいつか爆発される始末です。次から次への海賊版から見れば、アンティ・海賊版はもうimpossible missionになりました。例えばCydiaで最も有名のApt Sourceのxsellizeは殆どのアプリをデビュー後の1日中、攻撃を完成して海賊版もデビューする、この行為は業界恥と思われています。
ソフトウェア開発に所属
1、システムのAPIを逆分析すること
プログラマーが開発したソフトはシステムで運行して様々のサービスを提供できるのは、システム自身がそのサービスを提供したということです、ソフトはサービス(API)たちの組み立てをやり直しただけ。周知の通り、APP STOREに出品できるアプリの提供したサービスは少ないです、アップルに厳しく制限されています。アプリはアップルの公開された書類を基づいて開発されるしかできません、メッセージとか電話とかは書類に記入されないサービスの使用は禁じです。その代わりに、Cydiaに向けてソフトは、競争から勝てるため、全部非公開のサービスを使っています。非公開のサービスを提供したければ、iOSのシステムAPIをReverse Engineeringするしかできないです、システムサービスを逆分析して、相応のCodeを還元して自分のソフトに仕込むとこです。
2、他人のソフトを覗いてコピーすること
Reverse Engineeringとは元々他人のソフトの仕組みの覗きたいため提唱された技術。APP STOREに出品したアプチはそもそも技術が複雑ではありません、アイディアと会社の経営が成功の肝心です。もし単純にどんなAPIを使ったのかを知りたければ、アップルの開発書類を読むだけです。だがもしアプリのプライベートなサービスの仕組みを知りたければReverse Engineeringは必要です。例えばたくさんの私有関数を使われているCydiaに出品したソフトに、Reverse Engineeringで逆分析しないと何もわかりません。2013年3月にデビューした世界一の通話録音アプリAudio RecorderはOpen Sourceではありません、システムのAPIを使われて面白いです。このアプリを解剖するにはReverse Engineeringするしかできません。
業界大手会社のエリート開発者たちの得意アプリが、コードが美しくて、サービスの実現もエレガントでした。我々は先輩たちの深い技術力を持たず、先生たちの腕を学びたいなら、Reverse Engineeringに頼るしかないです。アプリを逆分析して、実現方法を中身から抜けて自分のアプリに設置して、自分のアプリのデリケートさを高めます。例えばWhatsAppの安定性と頑丈性は抜群、もしIMアプリを開発しようとしたら、Reverse EngineeringでWhatsAppのアーキテクチャ構築とデザイン・アイデアに全面参考したほうがいいです。