先日、Minecraftの偽アプリを分析しているときに、その偽アプリがSmalihookと呼ばれるハッキングツールを使用していることに気付いた。そのためSmalihookついて調べてみた。

 このツールはJavaのファンクションをフックするためのもので、他のフックライブラリとまったく同様に動作する。ファンクションのトリガーをフックしたのち、呼び出し元に任意のものを返すことができる。今回のケースでは、以下のファンクションがフックされる。

  •  getInstallerPackageName(String packageName)
  •  getPackageInfo(String packageName, int flags)

 getInstallerPackageNameというファンクションは以下を行う。

  •  あるパッケージをインストールしたアプリケーションのパッケージ名を取得するこれにより、どのマーケットからパッケージがやってきたのかを識別する

 Smalihookはトリガーをフックすると、当該アプリがGoogle Play Storeからダウンロードされていなくても「com.google.android.feedback」という値を返す。そこから来たように見せかけたいだけだ。

 getPackageInfoというファンクションは以下を行う。

  • システムにインストールされたあるアプリケーションに関するすべての情報を取得する

smalihook (6k image)

 このフックは、2番目のパラメータが定数0x00000040 (64) GET_SIGNATURESを用いているかを監視し、dexファイル内にあるオリジナルのMojang社の証明書を返す(このトロイの木馬型のアプリ自体はデバッグ用の証明書で署名されている)。これは、ベースとしている正規のアプリケーションが認証用のルーチンを含むために行われる。この認証ルーチンは証明書の妥当性を確認し、正規の証明書が見つからなければ実行を中止する。特に、Mojang社のアプリは無料ではないのだから、開発用の証明書を使って署名されたパッケージのアプリケーションが広まることを明らかに望みはしないだろう。

 SmalihookはAntiLVLというクラッキングツール(Android License Verification Library Subversion)の一部のように見受けられる。こうしたツールの目的はライセンス保護システムを破ることで、一般的な種類の攻撃に対して自身が保護されているかをテストしたい開発者に狙いを定めている。

 このツールは公然と提供されており、以下のリンクからダウンロードできる。

  •  http://androidcracking.blogspot.fi/p/antilvl_01.html

 Smalihookも同じページから入手できる。

  •  http://androidcracking.blogspot.fi/2011/03/original-smalihook-java-source.html

 Smalihookの作者は「lohan」というタグを使っているようだ。作者の連絡先情報も同じページに記載されている。

 ちなみにこのサイトには以下の注意書きがある。

androidcracking (7k image)

 「For educational purposes only(教育目的に限る)」いや、待て…。


—————

Post by — Marko