记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2016-01-14 15:25

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 ⚡]
└[~/Tools/android/lobotomy/output]> cd thunder
┌[rotlogix@carcass] [/dev/ttys005] [1.2 ⚡]
└[~/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 ⚡]
└[~/Tools/android/lobotomy/output/thunder]> ls
thunder     thunder.apk  
┌[rotlogix@carcass] [/dev/ttys005] [1.2 ⚡]
└[~/Tools/android/lobotomy/output/thunder]> cd thunder
┌[rotlogix@carcass] [/dev/ttys005] [1.2 ⚡]
└[~/Tools/android/lobotomy/output/thunder/thunder]> ls
AndroidManifest.xml apktool.yml         assets              original            res                 smali  
┌[rotlogix@carcass] [/dev/ttys005] [1.2 ⚡]
└[~/Tools/android/lobotomy/output/thunder/thunder]> open AndroidManifest.xml

0×04 结论

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

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

知识来源: www.freebuf.com/articles/terminal/92986.html
想收藏或者和大家分享这篇好文章→复制链接地址

“Lobotomy:Android逆向工程框架(Part2)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云