2010年11月29日月曜日

Androidとセキュリティ:プログラム難読化ツール - ProGuard

はじめにこのエントリでは、Androidアプリという知的財産を守る方法の一つとして、難読化ツールであるProGuardを紹介し、実際にAndroidアプリに組み込む方法を示します。ソフトウェアの価値ソフトウェアでは処理の流れ(アルゴリズム)を記述したソースコードが大きな価値を持つため、(特に商用のソフトウェアは)ソースコードを非公開とし、コンピュータで実行可能な必要最小限の中間コードやネイティブコードに限って配布することで、ソフトウェアビジネスを成立させています。つまり、処理の流れを「隠す」ことにより、その会社(あるいは人)にしか解決できないという「情報に対する付加価値」を与え、ソフトウェアビジネスを成立させていると言えます。一方で、何らかの形でこの「隠した部分」が明らかになり白日の下に晒されると、類似したソフトウェアが流通するなど、もはや処理の流れという情報としての「価値」は失われ、ビジネスとして成立しなくなります。さて、Androidに限らず、最近のソフトウェアは高級言語(Javaなど)を用いて記述され、翻訳(コンパイル)を通じて最終的にはコンピュータが処理可能な「中間コード」や「ネイティブコード」に変換されます。この変換は言語ごとに定められた「文法」によって翻訳されるため、その翻訳ルールさえ判れば逆翻訳(デコンパイルやデアセンブルと言います)が可能です。つまり、「中間コード」や「ネイティブコード」から逆翻訳を行い、人間が理解可能なソースコードを生成することが可能ということです。このままでは、ちょっとした知識があればソースコードが推測されてしまいます。その為、商用ソフトなどでは難読化を行い、逆翻訳された場合でもソースコードを読みにくくするなどして、簡単に処理の流れが明らかにならないように対策しています。難読化とは先に記した通り、難読化とは「ソースコードを読みにくくすること」です。難読化の手法は様々ありますが、下記のような方法によって、翻訳時にソースコードを可能な限り読みにくくします。クラスやメソッド、変数名を省略・無意味化コメントの削除空白(行)の削除また、翻訳時に処理パフォーマンスが良くなるように処理の最適化(繰り返し処理の簡略化、関数・メソッドのインライン化等)が行われますが、その結果、人間にとって理解が困難なコードとなることもあります。Androidの難読化ツールAndroidのビルドプロセスにも適用可能な難読化ツールが存在します。その名も「ProGuard」。ProGuardは、Javaのクラスファイルの圧縮・難読化・最適化・前検証を行うツールです。使われていないクラス/メソッド/変数を検知・削除したり、バイトコードを最適化したり、クラスやメソッド名を無意味化したりします。ProGuardは一般的なAndroidアプリケーション開発に用いられるEclipseではなく、CUIベースのビルドツール「Ant」に統合される形で利用できます。Antによって、Androidアプリケーションの翻訳や難読化はもちろん、アプリケーションの署名や端末へのインストールも自動化することができます。ProGuardの概要引用:http://proguard.sourceforge.net/manual/introduction.htmlProGuardは、jar/war/zip/ディレクトリなどを入力として、次の4つのステップを経て、最終的にjar/war/zip/ディレクトリへ処理結果を出力します。圧縮ステップ(shrink)最適化ステップ(optimize)難読化ステップ(obfuscate)前検証ステップ(preverify)圧縮ステップでは、プログラム中の利用されていないクラスやメソッド等を取り除きます。このステップは再帰的に処理されるので、全てのクラス・メソッドが対象となります。最適化ステップでは、エントリポイントではないクラスやメソッドをprivate/static/final属性に変換、使われていないパラメータは削除され、一部のメソッドはインライン化されます。難読化ステップでは、エントリポイントではないクラスやメソッドの名前を変更します。エントリポイントとなるクラスやメソッドは、オリジナルの名前でアクセスできるようにするために変更されません。前検証ステップでは、実行時・ロード時のバイトコードの検証負荷を減らすために、あらかじめ型情報を調査し、その情報をクラスファイル内に添付します。Android(Java6)では使用しません。開発したプログラムは外部から提供されるライブラリを使用することがありますが、これらはProGuardの処理の対象外となります。ProGuardの適用それでは、以下ではAndroidのプロジェクトにProGuardを適用し、難読化&最適化を行う方法について説明しましょう。システム要件AndroidのプロジェクトにProGuardを適用する場合、次の条件を満たしている必要があります:Android [...]

2010年11月24日水曜日

Threelmのトム モスさんに会ってきました

ThreeLMの(元GoogleのAndroid統括部長)のトム モスさんから電話があり会ってきました。みなさんもご存知なようにGoogle Developer Day 2009 Japanで基調講演をされた方ですね。現在はThreeLMという会社を立ち上げて新しいスタートを切られています。ThreeLMというのはThree [...]

2010年11月19日金曜日

Google Developer Day 2010 Prague で Androidロボット展示

Androidロボット展示の旅の終着点はロボット縁の地(そしてWilliam Gibson好きにも堪らない)プラハで開催されたGoogle Developer Day 2010 Pragueです。プラハではフリーな時間を利用して、市内観光もしてきました。市内は石畳と古い建物が多く情緒あふれる街並みでした。プラハでGDDを開催したのは経済の発展が望めること、そして景観が良いからとグーグルの人が言っていたくらいです。プラハで一番おおきな本屋LUXORにも行ってきました。Androidの本を探しに! スマートフォンは「ハードウェア」のコーナーにありましたが、Androidの本は置いていません。店員さんに聞いたところチェコ語で書かれたAndroidの本は一冊もないとのことでした。カレル橋から、市内を流れるヴルタヴァ川(モルダウ)を望む。観光案内所。セグウェイツアーの文字が見えます。市内の何箇所かでセグウェイが使われているのを見ました。(セグウェイ屋さんもありました)市内を走るトラム。線路沿いや道路沿いにはSamsungの企業ロゴが散見されました。電気屋の商品も、ホテルのTVもSamsung、LGなどが多数でした。観光を終えてホテル入りするAndroidロボット。GDD前日、Androidロボットの動作確認のために会場へ。展示スペースのGoogleのパネルの前でおどけるRT社のお二人。今回、付きっ切りでリモコン操作しなくて済むようにシナリオ再生モードを実装しました。そして、再生しすぎで(?)首がおかしくなってしまったAndroidロボット。部屋に戻って修理するRT社西岡さん、とプラハまで来てtwitterなう(の合間にチェコ語のTTSを設定中)な弊社近藤。当日、会場のCLARION [...]

2010年11月14日日曜日

FeliCaハッカソンが開催されました

本日「FeliCaハッカソン」が日経BPさん主催で行われました。FeliCaハッカソンは、Androidで初めてFeliCaチップが載るIS03端末を使用して、FeliCaAPIを使ったアプリを一日掛けて開発するイベントです。当日行われた資料とコードはGoogle Codeにアップされ、開催模様はUSTにて録画されております。参加メンバー事前応募された開発者約20名、スタッフはKDDIさん・SHARPさん・フェリカネットワークさん・日経BPさん・ブリリアントサービスの5社から各社2-6名ほど加えた計40名近く集まったハッカソンとなりました。弊社はハッカソンの講師を担当させて頂きました。午前中のセッションKDDIさんとSHARPさんによるIS03の説明と、フェリカネットワークさんによるFeliCaAPI利用方法の解説が行われました。フェリカネットワークさんによるプレゼン資料及びサンプルコードがGoogle [...]

2010年11月13日土曜日

チェコ プラハ 日本大使館でAndroidとロボットの講演しました

現地時刻2010年11月12日18時から在チェコ共和国日本国大使館でロボットについてとGoogle Androidに関する講演をしました。チェコ、プラハにある日本大使館前です。日の丸の国旗と菊の御紋があります。弊社の杉本は、Google Androidに関して、日本には日本Androidの会という会があるということ、ブリリアントサービスの取組みについて、Google [...]

2010年11月10日水曜日

Google Developer Day 2010 MunchenでAndroidロボ展示(続き)

GoogleよりミュンヘンとプラハのGoogle Developer Day 2010(以下GDD)に招待され、まずはミュンヘンのGDDで展示を行ったの巻、の続きです。男性比率が高かったのですが、特に女性に大人気でした。プラハのGDDでは簡易占い機能でも付けようかと思います。表にあったでっかいGoogle風船RTの社長の中川さん。わが子に対するような愛情を感じるショット。セッションがひと通り終わり、2Fに移動すると、そこにはドイツらしく、ビールが振舞われました。当然のように生ビールも!オリゼーっぽいどろいどくん(仮称)そんな中、blinkendroidというアプリを使った、ギネスへの挑戦が始まっていました。参加者から借りたAndroidデバイスを並べて、ひとつの大きなディスプレイとして使うという面白い試みです。下の写真は端末を並べたところを上から撮影したもの。静止画なのでわかりませんが、実際にはぐりぐりと端末をまたいで動画がうごいています。81台の端末が揃って、見事にギネス認定されたようです!blinkendroid、是非日本でもやって、ギネス記録を塗り替えたいですね!帰り際になって、たくさんの人達が記念写真に押し寄せました。取り外し可能な耳(?)を自分につけて写真を撮るのが大流行。耳をかじる人まで出てきました。展示途中、電源の線が切れたり、ネットワークが不調になったりなどのトラブルがありましたが、なんとか上手く乗り切ることができました!ミュンヘンのGDDは東京のGDDに比べてると、ゲームコーナーやフリードリンク、朝食、昼食などがあったり、会場に響き渡るBGMでよい雰囲気を醸しだしており、Google [...]

Google Developer Day 2010 MunchenでAndroidロボ展示

Google Developer Day 2010 Munchenの朝。 Googleさんに招待頂き2010年11月9日 ドイツ ミュンヘン(MOC Munich Order Center)で開催されたGoogle Developer Day 2010 ミュンヘンにAndroidで動くアンドロイド [...]
Related Posts Plugin for WordPress, Blogger...