导语:本文详细介绍了将Meterpreter嵌入到现有APK文件的步骤,并提供了一个自动化python脚本。

当今世界,移动电话无处不在。我们日常生活中的许多应用程序正在迁移到云部署,从而使前端技术重新回到瘦客户端的时代。我们的瘦客户端可以是任何东西,从JavaScript浏览器框架到支持移动设备的前端,例如Apple iOS上的Objective-C,或基于Android的Java。

Apple继续维持范例,审查所有进入iOS应用程序商店的应用程序。即便如此,仍然存在恶意软件蔓延的情况。与Apple不同,Android市场是一种开放的方式,允许任何人为游戏商店做出贡献,而且占据了移动市场份额的大部分江山。此外,还有各种第三方网站可以直接下载Android应用程序包文件(APK)。

Metasploit项目允许测试人员使用功能非常强大的meterpreter命令生成Android有效载荷,该meterpreter可以加载到Android设备上。通常,通过Android调试器“adb”侧面加载APK。从测试者的角度来看,有趣的事情是将合法(可能有趣)的应用程序与Meterpreter相结合,并将该应用程序侧加载到Android设备上。当然,您可能会考虑将该设备作为礼物或类似的社会工程方法发送给“朋友”。 

Android应用程序是用Java编写的,它编译成Dalvik可执行格式DEX。应用程序的编译版本是DEX字节码文件的ZIP文件。 Android上的Dalvik虚拟机最近被Android RunTime(ART)取代,后者执行额外的优化并将DEX字节码编译为本机汇编代码。Dalvik VM主要执行大部分字节码的即时(JIT)解释。ART比Dalvik虚拟机具有更高的性能,Dalvik虚拟机仅优化应用程序频繁执行的字节码部分。

Smali /baksmali是Android DEX字节码的汇编程序/反汇编程序。一个名为apktool的Android工具可以将压缩的DEX(APK文件)反汇编成smali文件,并将smali文件重新组合回DEX,然后重新组合为压缩的APK格式。我们可以使用此工具来反汇编和修改现有的APK文件。在此情形之下,我们可以使用该工具进行反汇编,并在初始Android Activity的smali代码中添加一个额外的静态入口点,以启动我们的Meterpreter。

总的来说,将Meterpreter嵌入现有APK文件的步骤如下:

1.在apkmonk.com或类似的镜像站点上找到有吸引力的APK应用程序。

2.生成Metasploit APK文件。

3.使用apktool反汇编Metasploit APK文件以及打算修改的APK文件。

4.将所有Meterpreter smali代码复制到新的APK smali目录。

5.通过查找下面的intent-filter,在APK应用程序的AndroidManifest.xml文件中找到代码的入口点:

<action android:name="android.intent.action.MAIN"/>

6.包含此intent-filter的行为名称就是要搜索的入口点。

7.修改活动.smali文件以包含启动Meterpreter阶段。

8.将Meterpreter AndroidManifest.xml中的所有Meterpreter权限复制到修改后的APK的AndroidManifest.xml中。

9.重新组成DEX压缩格式。

10.使用jarsigner为新创建的APK文件签名,然后将其加载到目标Android设备上。

用一个具体的例子来理解上述步骤要容易得多。为了说明这一点,我从apkmonk.com下载了一个名为Cowboy Shooting Game的APK文件。

生成恶意软件APK

使用msfvenom命令生成Metasploit APK,如下所示。

反汇编APK文件

然后使用apktool对这两个文件进行反汇编(baksmaling !!!),如下所示:

将恶意软件代码复制到牛仔工具游戏中

一个简单的方法是将目录更改为Metasploit APK目录,然后将smali目录下的所有文件复制到“com.CowboyShootingGames_2018-09-22”目录中。我从系统管理员那里学到的使用“tar”命令备份整个目录树的一个老技巧很方便,可以将tar的输出传输到第二个命令,该命令改变目录并解压缩生成的文件。

找到Activity EntryPoint

可以看到entry activity被列为“com.CowboyShootingGames.MainActivity”。我们知道这一点,因为XML中包含一个带有“android.intent.action.MAIN”的intent-filter。

修改Activity EntryPoint Smali文件

从上面可以看出,文件将被命名为MainActivity.smali,并且将根据完全限定类路径中的句点(“.”)位于com / CowboyShootingGames目录中。

在MainActivity.smali文件中,我们正在寻找onCreate()方法。

我们需要在onCreate()方法调用的正下方添加一行smali代码来调用Meterpreter。

invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V

请注意,以上是一行代码。可以使用与“com/metasploit/stage/Payload”不同的路径名来进行模糊处理,但是如果这样做,则必须修改“Payload”中包含的所有“smali”文件中对路径的所有引用,并更改目录名称本身。这可以手动完成,但容易出错。在没有任何混淆的情况下可以继续进行,修改后的最终结果如下面的屏幕截图所示。

 

为修改的APK“AndroidManifest.xml”文件添加权限

下一步,使用grep搜索Metasploit AndroidManfest.xml文件中所有包含字符串uses-permission和uses-feature的行到修改后的APK的AndroidManiest.xml文件中。

需要使用编辑器在新的AndroidManifest.xml文件中的适当位置插入权限。搜索现有的“use-permission”行作为插入文本位置的指导。

最终可能会获得一些重复的权限。可以选择删除它们,但确实无关紧要。

构建新的APK包文件

现在再次使用apktool重新组合生成APK包文件。将最终结果写入APK目录的dist目录中。

重新签名生成的包文件

对于签名来说,一种简单的方法是使用安装Android studio时构建的Android调试密钥库。调试密钥库包含在UN * X系统上主目录中的“.android”隐藏目录中。

另一种方法是使用Java“keytool”生成自己的自签名密钥库,并使用jarsigner工具对其进行签名,如下面的屏幕截图所示。

此时,final.apk文件已准备好使用adb加载到Android系统上。

在此特定情况之下,运行GenyMotion的副本,这是一个基于x86的模拟器,它使用VirtualBox可以进行非常高性能的Android模拟。可能会遇到的挑战之一是x86仿真本身不支持ARM处理器。为了应对这一挑战,可以在线获得一些ARM翻译库。搜索“Genymotion-ARM-Translation_v1.1.zip”,然后将ZIP文件拖到正在运行的GenyMotion Android系统上。不幸的是,这不是100%可靠,并且可能会导致一些应用程序崩溃。

确保ARM APK文件在设备上运行的一种方法是使用硬件设备本身。我发现Nexus 6系列设备非常适合使用,因为“rooting”套件相当可靠,并且通过USB电缆连接进行测试并不是太麻烦。

最后一步当然是尝试新感染的牛仔射击游戏。我们很快发现,在启动游戏的那一刻,我们在KALI系统上获得了一个Meterpreter Shell,感觉非常好。

我真的不认为我会花时间玩这个游戏,坦率的说这只是在apkmonk.com的随机选择。

如此多的复杂步骤……每一步都可能出错……

因此,在执行了上述所有必要步骤后,我立即感到沮丧。有这么多步骤,错误的可能性非常高。可能还有其他工具可供使用,但我决定使用快速的Python脚本来自动执行此过程。我称它为android_embedit.py,我现在会警告你,这绝对是一项快速而恶劣的努力,无需花费太多精力来加强逻辑,就可以完成工作。

android_embedit.py的想法是,提供Metasploit生成的APK文件、要修改的原始APK和密钥库,它将以自动方式执行所有步骤并生成结果。

以下是运行该工具的示例。所有临时文件和输出都将存储在“〜/ .ae”目录中。

该工具还将删除metasploit目录名,并自动使用随机字符串目录名对其进行混淆处理。可以在下面的屏幕截图中看到此结果,其中列出了APK “smali/com”目录的内容。名为dbarpubw的目录实际上包含Metasploit stager代码。

移动应用及其相关的应用程序编程接口有很多乐趣。如果想玩Android嵌入,可以通过访问https://github.com/yoda66/AndroidEmbedIT从我的github下载。

源链接

Hacking more

...