1. 程式人生 > >【逆向實戰】解析與利用安卓載荷_metasploit

【逆向實戰】解析與利用安卓載荷_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埠!
開啟編譯好的病毒!
成功上線!監聽的埠回彈連結!並且安裝了病毒的手機可以正常被我控制!!

在這裡插入圖片描述