首页
社区
课程
招聘
[原创]使用msfvenom生成恶意APP并对该APK进行拆包分析
发表于: 2020-8-19 18:17 15138

[原创]使用msfvenom生成恶意APP并对该APK进行拆包分析

2020-8-19 18:17
15138

前几天看到有帖子在写msfvenom生成恶意APP的内容,感兴趣去玩了一下,然后对生成的APK进行了拆包分析。中间遇到了不少的问题,在此记录并分享一下

使用到的工具:jre、frida

测试手机:Pixel XL、Android 9

测试平台:Ubuntu (Kali本身有自带metasploit,但这里为了同时记录安装过程,所以用Ubuntu)

https://github.com/rapid7/metasploit-framework/wiki/Nightly-Installers 官方的GitHub上有很详细的安装说明,大概步骤如下:

(注:下载过程有点漫长,可以试试科学上网或许会快一些)


安装完成后,用 msfvenom -l payloads 命令查看当前的payloads有哪些

我使用的是红框内的android/meterpreter/reverse_tcp

输入命令:

其中,-p是指定的payload,LHOST和LPORT是待会要执行攻击的主机IP和PORT,设置为本机就好了。(如下,我的Ubuntu的IP是192.168.31.103)

中途可能会提示需要安装一些工具,如apktool、jarsigner等,根据提示安装好即可



将生成的APK安装至手机,可以看到,它需要获取到很多权限


先启动msfconsole


然后开始配置metasploit


然后输入exploit命令开始监听。打开我们刚刚手机安装的APP,可以看到下图已经监听到我的手机了



可以看到下图,电脑中显示的就是我手持的手机后摄拍摄的镜头


可以看到下图,手机的联系人信息已经被导出(注:下面的电话号码是我随便乱输的,如有雷同纯属巧合)


msfconsole里面还提供了大量的命令供我们使用,这里就不一一讲解了,大家可以输入 ?  进行查看


直接将APK拖进jre


MainActivity中,它启动了一个后台服务,通过一系列的套娃,最终是到了 Payload 类的 main 方法中

代码很长,而且被混淆了,这里就不截全了。这个方法前半段主要是从 Payload.a 这个变量读取各种各样的信息,包括我们之前使用msfvenom命令设置的LHOST、LPORT等



Payload.main 方法的后半段,猜测变量 v7 是从上面获取到的IP和端口,我们利用frida去hook startsWith 这个方法看看。果然是我们最开始设置的IP与端口号。

后面根据IP和端口,new了一个Socket,拿到InputStream和OutputStream,从而能跟我们的主机(即我的Ubuntu)拿数据,然后就到了方法Payload.a(java.io.DataInputStream, java.io.OutputStream, java.lang.Object[])  


那么,拿了什么数据呢?我们再点进去 Payload.a(java.io.DataInputStream, java.io.OutputStream, java.lang.Object[])  。

这里对调用了两次 Payload.a(java.io.DataInputStream) ,同样打开这个方法看看。容易看出是通过这个方法从 DataInputStream arg11 read数据,赋值给了v3与v4。

从下面的 DexClassLoader 我们可以推出,这里动态的加载了dex,并加载了其中某个类的 start 方法。而 v3 就是这个类的名字,v4 则是这个dex

所以,我们大概可以总结出 Payload 这个类的主要作用就是先读取各种各样的配置信息,然后根据配置信息内的IP及端口从主机拿到dex,并加载该dex,执行start方法。


我们再次使用frida把这个dex给hook出来。我这里hook的是 Payload.a(java.io.DataInputStream) ,因为这个方法返回值正好是dex的byte[]数据,我们可以直接拿到写入文件中。1866.dex就是我们所需要的了



把1866.dex从手机中拿出来,拖入jre中。只有一个类 Meterpreter 和两个方法 start

分析过上面的 Payload 之后,看这段代码会感觉似曾相识。。没错,它又再一次的从 DataInputStream 中read了一个dex出来加载,真是一套又一套。

这里加载了 com.metasploit.meterpreter.AndroidMeterpreter 这个类,并调用了它的构造函数



同样的,我们需要把这个dex给弄出来,想法是hook Meterpreter.start 方法,拿到它的 DataInputStream arg14 参数,然后就可以把dex的数据给read出来写入文件中

这里踩了很多坑,查了不少的资料,尝试了多次之后才成功。主要参考的是下面两篇文章:

使用frida hook插件化apk

进阶Frida--Android逆向之动态加载dex Hook(三)(下篇)

刚开始的时候我是直接去hook Meterpreter.start 方法,结果发现根本找不到这个类,主要原因是这个类不在默认的classloader中,那么我们就需要去找到这个类对应的classloader



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2020-8-19 20:06 被Hambur编辑 ,原因:
上传的附件:
收藏
免费 8
支持
分享
最新回复 (10)
雪    币: 2107
活跃值: (1429)
能力值: ( LV8,RANK:126 )
在线值:
发帖
回帖
粉丝
2
第一次看到有人分析msf的android部分,可以的
2020-8-19 19:28
0
雪    币: 10801
活跃值: (4432)
能力值: ( LV12,RANK:404 )
在线值:
发帖
回帖
粉丝
3
2020-8-19 22:32
0
雪    币: 171
活跃值: (549)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2020-8-20 09:02
0
雪    币: 6064
活跃值: (12619)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
5
学习了
2020-8-20 09:14
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
学习
2020-9-4 15:09
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
学习学习
2020-9-7 19:27
0
雪    币: 122
活跃值: (536)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
写的非常好  解决我当前的问题
2020-12-11 12:07
0
雪    币: 1028
活跃值: (226)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
9
不错不错,学习了哈,顺便记录了一把。
2020-12-12 12:13
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
学习了,谢谢!
2021-9-25 20:27
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
写的非常好,牛逼大佬
2021-9-29 00:14
0
游客
登录 | 注册 方可回帖
返回
//