msf Android马分析
type
status
date
slug
tags
summary
category
icon
password
一、运行效果以及环境搭建
已知这个马上线安卓13(我的测试机环境)是会被直接拦的,尝试了一下安卓7
可以上马,上的时候不会检测权限,但是shell不进去以及文件看不到,推测是权限管理系统拦了但是马没有申请,合理怀疑是安卓6.0以后需要动态申请权限,这里的马存在一定问题
这边上一个android5,不行,报错
上一个android6,成功!
简单看一下我们的权限:
简单来说没什么用,大概研究一下应该是进应用沙箱了,但是权限是给满的,很奇怪,还是啥也干不了
二、逆向分析
AndroidMainfest.xml
申请权限,注定这个马只能低版本使用
活动类名:
MainActivity
注册intent:
<action android:name="android.intent.action.MAIN"/>
- 指定该活动为应用程序的主要入口点。
<category android:name="android.intent.category.LAUNCHER"/>
- 指定该活动为启动器活动,即显示在设备的应用程序列表中并且可由用户启动
- 指定了
metasploit
协议链接的主机和方案
- 等等
MainService
- 尝试通过反射加载
android.app.ActivityThread
中的currentApplication
方法并通过invoke
执行,转化为context类型保存,如果获取不到Context,则通过主线程的Handler
将一个新的Runnable
对象发送到消息队列中,以便在主线程中执行,c中的逻辑为在运行时尝试通过之前传递进来的Method
对象获取Context
对象,并在获取成功时启动MainService
服务
java 反射:深入理解Java中的反射机制及使用原理!详细解析invoke方法的执行和使用-阿里云开发者社区 (aliyun.com)
- 允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性
- 程序中的对象一般都是在编译时就确定下来,Java反射机制可以动态地创建对象并且调用相关属性,这些对象的类型在编译时是未知的
- 也就是说 ,可以通过反射机制直接创建对象,即使这个对象类型在编译时是未知的
类的加载机制:JVM使用ClassLoader将字节码文件,即 class文件加载到方法区内存中ClassLoader类根据类的完全限定名加载类并返回一个Class对象反射的用途:
- 很多框架都是配置化的,通过XML文件配置Bean
- 为了保证框架的通用性,需要根据配置文件加载不同的对象或者类,调用不同的方法
- 要运用反射,运行时动态加载需要加载的对象
这里主要就是用③,实现动态加载,反射是各种容器实现的核心从类中获取一个方法后,可以使用invoke() 来调用这个方法
Service
类的重写方法,用于处理启动服务的命令。1
表示如果服务被杀死了,系统尝试重新创建服务并调用 onStartCommand()
方法;即这里会维持在后台循环启动payload我们知道,frida会悬挂进程并多起四个线程(可以自行调试,这个地方还没有具体了解原理,不过需要注意)那么我们编辑运行基本的一个脚本就会观察到有
后台重新加载了几次payload,使得vps重新接收到了sessions,随即关闭掉前面的链接,可以认为我们的推断是基本正确的,这部分实现了马的持久化
测试payload的重加载:
修改返回值,服务会快速重置,但是新的连接无法维持,原因是我们hook了返回值为
START_NOT_STICKY
Payload
class b
这里明显是一个大小端序转化,基本上就是在对payload做数据处理,先大体手动还原符号,看起来就是简单编码还原payload内容并获取信息:
这里重载函数比较多,可以直接拿脚本批量打印一下看,
可以看到两个比较关键的结果:
即,这里的payload就是msf马生成的信息部分,在b函数中还原出信息并添加生成一个http request包
payload
- 这里创建了一个
WakeLock
对象v0
,它允许应用程序保持设备唤醒状态,这里通过Payload.b.getSystemService("power")
获取了系统服务power
,并将其转换为PowerManager
对象。然后调用newWakeLock(1, Payload.class.getSimpleName())
方法创建了一个WakeLock
对象,参数1
表示创建的WakeLock
类型是PARTIAL_WAKE_LOCK
,即部分唤醒锁定,它允许CPU继续运行,但允许屏幕和其他系统资源关闭。
- 实现了禁用启动器图标,与上文callback可以隐匿在后台刷新
下面一段是进行基础的tcp解包,不需要讲,后面可以直接抓包看行为
这里很明显动态生成了文件,并反射运行其中的部分内容,相同的方法抓取方法返回值和参数,可以拿到:
反射运行了这个方法,这里仍旧是一个loader
那么这里就需要获得里面的
met.jar
,有点缺乏经验不知道怎么搞(这里需要清楚,frida去hook的是app内所有的内容,即使loader加载的也不例外),不过询问了一下可以去hook File.delete
,然后去找文件这frida确实有点好用的
met.jar
根据刚才的分析,入口类就是这里的
com.metasploit.meterpreter.AndroidMeterpreter
里面的马已经相当明文,就暂时不看了
上一篇
driver复现(铁三2024)
下一篇
pwnCollege02
Loading...