Lobotomy:Android逆向工程框架(Part2)

jopen 8年前

0×01 概述

第一部分 中,我们讲解了如何将应用程序加载到 Lobotomy 中,以及Lobotomy的全局加载器整体上是如何工作的。在第二部分(本文)中,我们将介绍如何使用Lobotomy反编译APK,以及如何将不可调试的安卓应用转换成 可调试 的应用程序。

0×02 APK反编译

Lobotomy提供了一个 Apktool 独立构建的包装器,使用它来支持APK反编译。通过使用内置的帮助功能,我们可以了解到运行反编译模块都需要什么环境:

现在,既然我们知道了所需要的条件,那么接下来我们就目标APK的路径加入到该模块中,剩下的事交给它就行:

执行结果将保在Lobotomy的输出目录中:

[~/Tools/android/lobotomy/output]> ls  d2j     thunder    ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output]> cd thunder  ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output/thunder]> ls -la  total 32    drwxr-xr-x   8 rotlogix  staff   272 Jan  9 10:33 .    drwxr-xr-x   5 rotlogix  staff   170 Jan  9 10:33 ..    -rw-r--r--   1 rotlogix  staff  9902 Jan  9 10:33 AndroidManifest.xml  -rw-r--r--   1 rotlogix  staff   309 Jan  9 10:33 apktool.yml  drwxr-xr-x   5 rotlogix  staff   170 Jan  9 10:33 assets    drwxr-xr-x   4 rotlogix  staff   136 Jan  9 10:33 original    drwxr-xr-x  73 rotlogix  staff  2482 Jan  9 10:33 res    drwxr-xr-x   6 rotlogix  staff   204 Jan  9 10:33 smali

0×03 转换成可调试的APK

通常,在一个安卓应用程序生成、签名并被提交到应用商店中之前,限定该应用程序能够调试的属性都会从AndroidManifest.xml中被删除。然而,当这个属性存在且设置为“true”时,这将允许该程序连接到调试器,例如通过 Java调试线协议 连接到 Java调试器 。可以想象,将APK从应用商店中下载下来,然后将其转换成可调试的APK,进而对其进行调试,这将非常有助于对其进行动态分析。

个人认为,如果你没有一种自动化的执行方式,那么将目标APK手动转换成可调试状态将是非常痛苦的。幸好我们手中有Lobotomy:

可调试模块所需要的调节与反编译模块的条件相同。接下来,我们指定不可调试的目标APK的路径,然后就可以开始转换过程:

(lobotomy) debuggable thunder /Users/rotlogix/android-browser-research/thunder-web-browser/apk/thunder-browser.apk  [2016-01-09 10:57:35.463305] Decompiling : /Users/rotlogix/android-browser-research/thunder-web-browser/apk/thunder-browser.apk  I: Using Apktool 2.0.2-027e13-SNAPSHOT on thunder-browser.apk    I: Loading resource table...    I: Decoding AndroidManifest.xml with resources...    I: Loading resource table from file: /Users/rotlogix/Library/apktool/framework/1.apk    I: Regular manifest package...    I: Decoding file-resources...    I: Decoding values */* XMLs...    I: Baksmaling classes.dex...    I: Copying assets and libs...    I: Copying unknown files...    I: Copying original files...    [2016-01-09 10:57:38.290216] Adding android:debuggable="true"  [2016-01-09 10:57:38.298917] Building APK : thunder  I: Using Apktool 2.0.2-027e13-SNAPSHOT    I: Checking whether sources has changed...    I: Smaling smali folder into classes.dex...    I: Checking whether resources has changed...    I: Building resources...    I: Building apk file...    [2016-01-09 10:57:44.165020] Building completed

首先,Lobotomy将反编译目标APK,向其中的AndroidManifest.xml文件中添加属性“Android:debuggable = true”,然后重建应用程序。

[2016-01-09 10:57:44.165116] APK signing process initiatedEnter keystore password:  Re-enter new password:  What is your first and last name?      [Unknown]:  Benjamin WatsonWhat is the name of your organizational unit?      [Unknown]:  LifeFormLabsWhat is the name of your organization?      [Unknown]:  LifeFormLabsWhat is the name of your City or Locality?      [Unknown]:  ATLWhat is the name of your State or Province?      [Unknown]:  GAWhat is the two-letter country code for this unit?      [Unknown]:  USIs CN=Benjamin Watson, OU=LifeFormLabs, O=LifeFormLabs, L=ATL, ST=GA, C=US correct?      [no]:  yesGenerating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days        for: CN=Benjamin Watson, OU=LifeFormLabs, O=LifeFormLabs, L=ATL, ST=GA, C=USEnter key password for <lobotomy>        (RETURN if same as keystore password):Re-enter new password:  [Storing lobotomy-key.keystore]Enter Passphrase for keystore:       adding: META-INF/MANIFEST.MF     adding: META-INF/LOBOTOMY.SF     adding: META-INF/LOBOTOMY.RSA    signing: AndroidManifest.xml    signing: assets/cachejson.txt    signing: assets/f.html    signing: assets/hosts.txt    ...    ..    .

在重建目标应用程序之后,Lobotomy就开始在下面 要求 的基础上对APK进行签名,以便这个APK文件能够重新安装到我们的目标设备或模拟器上。所以现在,如果我们检查Lobotomy的输出目录,应该能看到生成的可调试的APK文件:

[~/Tools/android/lobotomy/output/thunder]> ls -la  total 4904  drwxr-xr-x  10 rotlogix  staff      340 Jan  9 10:58 .  drwxr-xr-x   5 rotlogix  staff      170 Jan  9 10:57 ..  -rw-r--r--   1 rotlogix  staff     9894 Jan  9 10:57 AndroidManifest.xml-rw-r--r--   1 rotlogix  staff      309 Jan  9 10:57 apktool.yml  drwxr-xr-x   5 rotlogix  staff      170 Jan  9 10:57 assets    drwxr-xr-x   3 rotlogix  staff      102 Jan  9 10:57 build    drwxr-xr-x   4 rotlogix  staff      136 Jan  9 10:57 original    drwxr-xr-x  73 rotlogix  staff     2482 Jan  9 10:57 res    drwxr-xr-x   6 rotlogix  staff      204 Jan  9 10:57 smali    -rw-r--r--   1 rotlogix  staff  2494443 Jan  9 10:58 thunder.apk

为了验证这一点,我们利用Apktool对生成的APK进行反编译,然后观察androidmanifest.xml中发生的变化:

└[~/Tools/android/lobotomy/output/thunder]> apktool d thunder.apk  I: Using Apktool 2.0.3-0649d5-SNAPSHOT on thunder.apk    I: Loading resource table...  I: Decoding AndroidManifest.xml with resources...  I: Loading resource table from file: /Users/rotlogix/Library/apktool/framework/1.apk  I: Regular manifest package...  I: Decoding file-resources...  I: Decoding values */* XMLs...    I: Baksmaling classes.dex...    I: Copying assets and libs...    I: Copying unknown files...    I: Copying original files...    ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output/thunder]> ls  thunder     thunder.apk    ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output/thunder]> cd thunder  ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output/thunder/thunder]> ls  AndroidManifest.xml apktool.yml         assets              original            res                 smali    ┌[rotlogix@carcass] [/dev/ttys005] [1.2 :zap:]  └[~/Tools/android/lobotomy/output/thunder/thunder]> open AndroidManifest.xml

0×04 结论

在本部分中,我们讲解了如何反编译安卓应用程序,以及如何将其转换为可调试状态。在第三部分中,我们将深入学习Lobotomy中用来分析和枚举应用的模块。

*参考来源: rotlogix ,FB小编JackFree编译,有适当修改,转载请注明来自FreeBuf黑客与极客(FreeBuf.com)

来自: http://www.freebuf.com/articles/terminal/92986.html