反编译简单分析metasploit生成的安卓木马

反编译metasploit生成的安卓木马

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
最近微信看到了篇apk反编译的文章,于是就想着反编译下安卓木马看看能不能分析下meterpreter的原理。


提示:以下是本篇文章正文内容,下面案例可供参考

一、APK反编译流程

1、工具

APK反编译需要三个工具,apktool用于资源文件获取,dex2jar用于源码获取,jd-gui用于查看源码,下载链接如下:

  1. apktool:APKtool下载
  2. dex2jar:dex2jar下载
  3. jd-gui下载:jd-gui下载

2、使用

  1. 在有java环境的前提下,建apktool.bat文件,文件内的代码如下:

@echo off setlocal set BASENAME=apktool_ chcp 65001 2>nul >nul set java_exe=java.exe if defined JAVA_HOME ( set java_exe=“%JAVA_HOME%\bin\java.exe” ) rem Find the highest version .jar available in the same directory as the script setlocal EnableDelayedExpansion pushd “%~dp0” if exist apktool.jar ( set BASENAME=apktool goto skipversioned ) set max=0 for /f “tokens=1* delims=-_.0” %%A in ('dir /b /a-d %BASENAME%.jar’) do if %%~B gtr !max! set max=%%~nB :skipversioned popd setlocal DisableDelayedExpansion rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack if “%~1"“” goto load if not "%~2"”" goto load set ATTR=%~a1 if “%ATTR:~0,1%”“d” ( rem Directory, rebuild set fastCommand=b ) if “%ATTR:~0,1%”“-” if “%~x1”==“.apk” ( rem APK file, unpack set fastCommand=d ) :load %java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 “%~dp0%BASENAME%%max%.jar” %fastCommand% % rem Pause when ran non interactively for /f “tokens=2” %%# in (“%cmdcmdline%”) do if /i “%%#” equ “/c” pause

  1. 用cmd执行命令apktool.bar d -f test.apk test,将test.apk改成test.zip,解压
    在这里插入图片描述
  2. 进入dex-tools的目录内,将classes.dex拖入,然后执行代码d2j-dex2jar.bat classes.dex,获取jar包
    在这里插入图片描述
  3. 使用jd-gui打开反编译的jar文件即可
    在这里插入图片描述

二、简单分析

  1. 从MainActivity为入口,进入MainService的 startService方法。
    在这里插入图片描述

  2. MainActivity的startService方法中使用Intent()跳转到MainService启动MainService方法。
    在这里插入图片描述

  3. 通过MainService的onStartCommand正式进入payload。
    在这里插入图片描述

  4. payload的start方法首先调用了自身的startInPath方法,传入了当前文件目录的路径。
    在这里插入图片描述

  5. startInpath方法中写了I,J,S,B的解密静态方法,重点是新创建了一个e类,启用了e类的多线程run方法。
    在这里插入图片描述

  6. e类中的run方法调用了payload中的主方法main()
    在这里插入图片描述

  7. main方法似乎比较复杂,自己不是很看得懂,不过从a类不难看出,a类应该是ip和端口,利用URLConnection连接,往header头添加User-Agent等属性,以换行符和:分割等,并且不能为空。
    在这里插入图片描述

  8. 然后main()方法中应该是对a存储的ip:port进行解密还原赋值给str,然后判断str的协议类型进而执行不同的过程,分为tcp和https。
    在这里插入图片描述
    在这里插入图片描述

  9. 一般会使用reverse_tcp的反向shell,执行tcp的过程,而https显然需要SSL证书,这里与f类密切相关,f类指定协议类型是SSL,并设置了是否验证https证书。设置了SHA-1加密算法对数据进行加密,判断证书是否生效等。
    在这里插入图片描述
    在这里插入图片描述

  10. 无论是tcp还是https,最后都通过socket实例化了Input和Output流传入了h,并调用了payload中的a方法。
    在这里插入图片描述

  11. a方法首先定义了几个Object类,O1赋值为数组第一个值,O2使用随机数的方式拼接到O1后面,O3是O2拼接上.jar后缀,str1是O2拼接.dex后缀,str2经过a方法后返回paramDataInputStream的数据流并变为String,然后创建了新文件O3,而jar文件应该存储的是前面分析的当前私有目录。
    在这里插入图片描述

  12. 随后创建了Ouput流,并将paramDataInputStream的数据写入到.jar后缀的文件中,然后实例化了一个DexClassLoader赋值给localObject1并加载.jar后缀文件,最后启动localObject1中的start方法。
    在这里插入图片描述

  13. 也就是说整体流程就是

  14. 经过一堆参数后进入payload的main方法

  15. main方法对ip:port进行解密,然后判断https和tcp,最后都通过socket套接字连接控制

  16. 将套接字的Input和Output数据流传入a方法

  17. a方法在软件当前目录,将数据存储接收写入为jar文件

  18. 最后通过start方法调用jar文件

总结

也就是说,meterpreter的安卓木马是通过IO流来对jar文件进行执行,通过动态执行jar中的代码对靶机进行控制。java基础比较差,分析的不是很到位。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M03-Aiwin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值