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)