【逆向实战】解析与利用安卓载荷_metasploit

/转载请注明原作者:Kali_MG1937 QQ3496925334/
metasploit大家都知道,
其中的一个payload:
android/meterpreter/reverse_tcp
就是安卓载荷了,msf可通过发送tcp包来控制安装了此病毒的手机
●上电脑课的时候闲着无聊,就想看看这个安卓载荷的构造,顺便看看有没有能自由控制的参数
■反编译工具:apktool,eclipse,dex2jar,jd-gui
用apktool反编译载荷
第一步就是查看清单文件

在这里插入图片描述
在这里插入图片描述
类加载的主入口就是.MainActivity
permission之类的权限声明就不用看了
用dex2jar把classes.dex转成jar
在这里插入图片描述
接着jd-gui就派上用场了
先看看MainActivity.java
oncreate()方法下调用MainService这个服务类之后就立马调用finish()方法把当前的类杀掉
在这里插入图片描述
查看MainService
这个类一开头就用forName和getMethod方法调用了线程之类的东西,先不管,往下看,在onstartCommand方法调用了Payload的start方法,二话不说果断跟上去。
在这里插入图片描述
查找Payload类中的start方法
先不看start方法,一进去一个赋值为a的byte类就把我吸引了,这个byte中封装着一个极其长的字节,大概是混淆lport和lhost参数的,先注释一下,以后回来看看能不能解密
在这里插入图片描述

接下来看start方法,调用了startInpath方法,其中一些花里胡哨的内容先不看,startInpath方法调用了d类的start方法!
在这里插入图片描述
查看d类
d类是一个继承Thread的子类,看看run方法里封装了什么
调用Payload的main方法,赋值null。。。
在这里插入图片描述

。。。。。
我说你们metasploit员工写代码这么都这么喜欢绕来绕去的啊?这样写代码是会被同事按在墙角暴打的哦?
回到Payload的main方法

main方法中有些有趣的事情
它调用了之前说到的byte a!
它把a传进了b类的a中,并return了一个string
在这里插入图片描述

先不管,继续看
有参数调用了f类的公共string参数a
把a赋值给str1(string)
并对str1给了一个判断,大致如下:
如果str1开头是tcp
就用":“把str1分割为3部分
把被”:“分割的str1的第2部分取出来
用”/“分割为3部分,并继续将其第3部分打包为一个字符串
把被”:“分割的str1的第3部分取出来,转化为int
分别将取出的部分放进系统的socket类中处理。。。
接下来不用我说也懂了吧!
str1参数的格式一定是"tcp://ip:port”!!!

在这里插入图片描述
ip和port被放进socket中处理了!
那么有没有办法自由控制ip和port参数呢?
尝试控制参数
解密之前的byte a的数据吗?不可能,太耗时间。
仔细想想,str1是f类中的公共参数a的值,也就是说我只要控制了f类就好了!
我查看f类,a值是空的,那么一定是之前的byte a参数被解密后传入a了!
解密byte a参数的就是b类了!
查看b类
查找f类的线索!
在b类的a方法中我发现f类的a值被赋予了一个奇怪的参数,
查看a方法,发现要传入一个byte值!

一定是用来解密byte a的!
我果断找到控制f类的a参数的smali代码,删掉它!
(我这里由于已经放学了,所以回家用的手机的编译软件执行的操作)

我这里用的是手机的集成环境
果断回到f类
控制a参数!
写入相应的smali代码使公共参数a指向string参数"tcp://192.168.2.200:7777"
在这里插入图片描述
完成修改!回编译!签名!
打开msf监听7777端口!
打开编译好的病毒!
成功上线!监听的端口回弹链接!并且安装了病毒的手机可以正常被我控制!!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ALDYS4/article/details/85017493