Skip to content

Instantly share code, notes, and snippets.

@ntddk
Last active January 9, 2018 01:40
Show Gist options
  • Save ntddk/02662ecd23d29febd826 to your computer and use it in GitHub Desktop.
Save ntddk/02662ecd23d29febd826 to your computer and use it in GitHub Desktop.

これはなに


Androidアプリケーションの解析ツールについて,導入手順と使い方をメモする.

Smali


概要

Smaliとは,apktoolをはじめとした多くの解析ツールで用いられる擬似コードのフォーマット.
Javaとのセマンティックギャップはあるものの,可逆性を備えており,apkファイルに変換することができる.

apktool

apktoolはAndroidアプリケーションの解析において最も汎用的なツール.
apkからSmaliを生成するには,以下のコマンドを実行する.

$ apktool -d [file]

apkをリビルドするには,以下のコマンドを実行する.

$ apktool -b [files] [rebuild].apk

Smali-CFG

Smali-CFGsは,SmaliからControl Flow Graphを作成する.

Smali2PsuedoJava

Smali2PsuedoJavaは,SmaliからJavaのコードを擬似的に生成することができる.

$ java -jar Smali2PsuedoJava.jar [files]

SmaliSublimeSyntax

sublime-smali

APKInspector

APKInspector is a powerful GUI tool for analysts to analyze the Android applications.

Androguard


概要

Androguardは,Androidアプリケーションの解析ツール.
パーミッションに対応している箇所のコードを表示したり,Control Flow Graphを描画したりといった機能を備えている.
Python2.6のもとで動作し,以下のフォーマットを対象としている.

  • Dex/Odex (Dalvik virtual machine) (.dex) (disassemble, decompilation),
  • APK (Android application) (.apk),
  • Android's binary xml (.xml),
  • Android Resources (.arsc).

VirusTotalの中でも動いているらしい.

コンテナの実行

DockerHubのリポジトリhoneynet / androguardをもとに導入する.

Dockerの初期設定

$ sudo apt-get install docker.io
$ sudo update-rc.d docker.io defaults
$ sudo docker.io infosudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

コンテナの実行

$ sudo docker run -it -v ~/samples/:/root/samples/ honeynet/androguard

Sublime Text 2との連携

Youtubeに公開されている動画をもとに導入する.

Androlyze

androlyze.pyがAndroguardの本体.コンテナからそのまま実行できる.

root@e33c364e00ef:~# androlyze.py -s
Androlyze version 2.0
In [1]: ls
samples/

ファイルを指定してやる.

In [2]: apk = APK('samples/filename.apk')

In [3]: apk.get_files()
Out[3]: 
[u'assets/bin/Data/Managed/Assembly-CSharp-firstpass.dll',
 u'assets/bin/Data/Managed/Assembly-CSharp.dll',
 u'assets/bin/Data/Managed/Assembly-UnityScript.dll',
 u'assets/bin/Data/Managed/Boo.Lang.dll',
 u'assets/bin/Data/Managed/Mono.Security.dll',
 u'assets/bin/Data/Managed/System.Core.dll',
 u'assets/bin/Data/Managed/System.dll',
 u'assets/bin/Data/Managed/UnityEngine.dll',
 u'assets/bin/Data/Managed/mscorlib.dll',
 u'assets/bin/Data/Resources/unity_builtin_extra',
 u'assets/bin/Data/1682092270f88d04bb434756a984ea87',
 ~
 略
 ~
 u'assets/bin/Data/f4f0faf73e6bf89419cf29b611f29ade',
 u'assets/bin/Data/level0',
 u'assets/bin/Data/level1',
 u'assets/bin/Data/level2',
 u'assets/bin/Data/level3',
 u'assets/bin/Data/level4',
 u'assets/bin/Data/mainData',
 u'assets/bin/Data/settings.xml',
 u'assets/bin/Data/sharedassets0.assets',
 u'assets/bin/Data/sharedassets1.assets',
 u'assets/bin/Data/sharedassets2.assets',
 u'assets/bin/Data/sharedassets3.assets.split0',
 ~
 略
 ~
 u'assets/bin/Data/sharedassets5.assets.split9',
 u'assets/bin/Data/splash.png',
 u'assets/bin/Data/unity default resources',
 u'classes.dex',
 u'res/drawable/app_icon.png',
 u'res/drawable/app_omotenashi_close_button.png',
 u'AndroidManifest.xml',
 u'resources.arsc',
 u'res/drawable-hdpi/app_icon.png',
 u'res/drawable-ldpi/app_icon.png',
 u'res/drawable-xhdpi/app_icon.png',
 u'res/drawable-xxhdpi/app_icon.png',
 u'lib/armeabi-v7a/libmain.so',
 u'lib/armeabi-v7a/libmono.so',
 u'lib/armeabi-v7a/libunity.so',
 u'META-INF/MANIFEST.MF',
 u'META-INF/CERT.SF',
 u'META-INF/CERT.RSA']

In [4]: analysis = AnalyzeAPK('samples/filename.apk')

In [5]: analysis
Out[5]: 
(<androguard.core.bytecodes.apk.APK instance at 0x7f24fd397dd0>,
 <androguard.core.bytecodes.dvm.DalvikVMFormat at 0x7f24fd395490>,
 <androguard.core.analysis.analysis.uVMAnalysis instance at 0x7f2500e47878>)

In [6]: apk.get_main_activity()
Out[6]: u'com.bfsgooglegames.GoogleGamesUnityPlayerProxyActivity'

In [10]: d = DalvikVMFormat( apk.get_dex() )

In [11]: 

これはCTagsみたいなものかな.

analysis = AnalyzeAPK('samples/filename.apk')
show_Paths(analysis[1], analysis[2].tainted_packages.search_packages('gangrene'))

逆コンパイラとの連携

可視化

DroidBox


概要

DroidBoxは,Honeynet Projectによって開発されているAndroidアプリケーションを対象としたサンドボックス.

インストール

DockerHubのリポジトリhoneynet / droidbox

Dockerの初期設定

$ sudo apt-get install docker.io
$ sudo update-rc.d docker.io defaults
$ sudo docker.io infosudo ln -sf /usr/bin/docker.io /usr/local/bin/docker

コンテナの実行

$ sudo docker run -it --rm -v ~/samples:/samples honeynet/droidbox /samples/filename.apk [duration in seconds]

使い方

実行

実行すると内部でEmulatorが実行され,解析対象の挙動ログが作成される.ログは,解析対象と同じ階層に展開される.

droidbox@ubuntu:~$ sudo docker run -it --rm -v ~/samples:/samples honeynet/droidbox /samples/filename.apk
Unable to find image 'honeynet/droidbox' locally
Pulling repository honeynet/droidbox
~
(略)
~
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
Droidbox Docker starting
Waiting for the emulator to startup...
 * Starting OpenBSD Secure Shell server sshd                             [ OK ] 
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Waiting for the device...
Waiting for the device...
Installing the application /samples/filename.apk...
Running the component jp.co.cygames.daihugou/com.bfsgooglegames.GoogleGamesUnityPlayerProxyActivity...
 ____                        __  ____
/\  _`\               __    /\ \/\  _`\
\ \ \/\ \  _ __  ___ /\_\   \_\ \ \ \L\ \   ___   __  _
 \ \ \ \ \/\`'__\ __`\/\ \  /'_` \ \  _ <' / __`\/\ \/'\
  \ \ \_\ \ \ \/\ \L\ \ \ \/\ \L\ \ \ \L\ \ \L\ \/>  </
   \ \____/\ \_\ \____/\ \_\ \___,_\ \____/ \____//\_/\_\
    \/___/  \/_/\/___/  \/_/\/__,_ /\/___/ \/___/ \//\/_/
Starting the activity com.bfsgooglegames.GoogleGamesUnityPlayerProxyActivity...
Application started
Analyzing the application during infinite time seconds...
     [-] Collected 6 sandbox logs   (Ctrl-C to view logs)

VNC

アプリケーションを単に実行しただけでは,意味のあるログを取得することができない.
マルウェアであれば実行してすぐにExploitによるsuなどを確認できるかもしれないが,通常のアプリケーションはユーザーからの操作を待ち受けるからである.
そこで,DroidBoxはVNCを通じて外部からエミュレータ上のアプリケーションを操作する機能を備えている.

ssh -L 5900:localhost:5900 root@$(cat ~/samples/ip.txt)

可視化

matplotで画像を生成してくれるらしいが,未確認.

Santoku

Santokuは,モバイル機器におけるフォレンジック,マルウェア解析,セキュリティ診断のためのLinuxディストリビューション.
Kali LinuxやSANS Investigate Forensic Toolkit(SIFT)のように生き残ることができるのかは未知数.
イメージのほか,Lubuntu 12.04向けのインストールスクリプトが用意されている.
Santokuには,上で挙げたAndroguardや,hogeがインストールされている.

ruby_apk

ruby_apkは,SecureBrainが開発したAndroidアプリケーションを解析するためのライブラリ.
SDKのインストールを要求しないメリット(?)がある.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment