/文章作者:Kali_MG1937
QQ:3496925334
CSDN博客號:ALDYS4/
今天逛某論壇的時候發現了一篇求助貼
有意思,好久沒分析過惡意軟件了
今天就拿它來練練手
反編譯工具
apktool
jd-gui
eclipse(CFR,JD-CORE等反編譯引擎)
JADX
DEX2JAR
0x01>分析AndroidManifest.xml
先看看惡意軟件的基本信息
先百度一下惡意軟件的包名
搜索結果顯示這是一個被各大應用市場收錄的軟件
那麼我分析我手上的這個惡意軟件應該是被注入了惡意代碼
如果我是惡意軟件的開發者,一定會在第一時間讓受害者觸發惡意代碼
那麼先查看軟件的主入口
com.superthomaslab.rootessentials.main_screen.MainActivity
看來這就是軟件主入口了
0x02>分析代碼
跟進主入口
可以看到截屏中的第6行
程序引入了一個包(Unlock.Unlock),而且我與未被注入代碼的軟件對照
原軟件並沒有引入此包
果斷搜索Unlock
程序在重寫onCreateOptionsMenu方法時調用了Unlock中的方法
並向方法內傳入了一個Context
跟進Unlock
查看Unlock方法
在第一句就申請了root權限,emm
不管,先看下去
第12行,變量名爲file2的File獲取了軟件本身的資源
並將參數傳遞給zipFile2,調用getEntry方法獲取了軟件內的/lib/armeabi/libbaidu.so
接着程序又new了一個FileOutputStream對象並賦予了一個參數作爲文件輸出口
輸出的文件名爲Unlock
再看看19行
程序利用Runtime實例執行了一系列命令:
掛載/system
複製Unlock文件到/system/app/內,並命名爲Unlock.apk
給Unlock.apk以644權限(寫入系統)
接下來軟件調用了isAZ方法,並傳入了一個參數com.antilock.antilock
isAZ方法是判斷軟件是否存在的
如果手機安裝了包名爲com.antilock.antilock的軟件,就調用runtime卸載掉它
根據包名來判斷,這個軟件大概是某個木馬查殺軟件
全部的代碼執行完畢後調用reboot重啓手機
(之前惡意代碼向system分區寫入了一個apk,重啓才能讓apk安裝在手機上)
0x03>解密libbaidu.so文件
通過上一步的代碼分析可知
libbaidu.so是一個被加密過的apk安裝包,需要調用程序內的算法來進行解密
圖中就是解密算法了
程序調用了一個while死循環
循環中的變量名爲i的int被賦予了inputStream調用read方法後的值
而inputStream方法正是讀取libbaidu.so的,
若i的值爲-1(文件不存在)則跳出循環
否則就對變量名爲bArr的byte進行一系列異或算法
最後輸出文件
按照這個邏輯,我果斷打開eclipse進行代碼編寫
最後輸出一個可以正常打開的zip,將其後綴改爲apk
是個僞裝成正常應用的apk,看來之前分析的是個殼子,這就是真正的鎖機文件了
不過這包名…
0x04>分析鎖機文件代碼
老樣子,先看AndroidManifest.xml
軟件入口:com.fuck.lock.MainActivity
從第20行看出,軟件的log日誌被傳入com.aide.ui這個軟件
看來作者是用aide開發的這個軟件
A I D E 風 評 被 害(暴論)
可以看到onCreate方法內軟件發送了一個意圖
啓動了com.fuck.lock.mc這個服務
跟進
mc這個類內的一個值引起我的注意
eq參數貌似是一個被加密的值
先不管,看看onCreate方法
其中調用了a方法和c類
值得一提的是a方法
程序在手機上創建了一個覆蓋整個屏幕的懸浮窗
並且進一步分析發現,這個程序禁止了用戶在懸浮窗以外的地方進行手勢接觸
很可疑
其中0x7f700…等等16進制,通過與軟件自帶的R文件對照
發現這幾個16進制分別代表了幾個佈局文件
從病毒作者繪製的layout文件內容來看,軟件在創建懸浮窗時其真正的意圖就已經暴露了
勒索受害者,若不給錢,就惡意鎖定受害者手機
而c類就是一些密碼的加密解密之類的
不過我在瀏覽mc類的時候發現了一個有意思的方法:init
可以看到init方法內的代碼:如果有人打來的電話,就記錄下號碼
這就有意思了,爲什麼病毒要記錄號碼?信息收集?這些信息這對作者有用嗎?
並且受害者已經被鎖定,也沒法接電話,那麼收集號碼也沒什麼用啊
但是,柳暗花明又一村
我發現了一個廣播類:IncomingReceiver
這個廣播內調用了mc類的init方法
很有意思的類名,對吧
onRecevie方法內
程序正不斷監聽廣播
如果廣播內容是android.intent.action.PHONE_STATE
則程序就會截取extra爲incoming_number的值
並且利用md5加密算法加密這個值
程序正在不斷監聽來電!
調用mc類的access$L100025方法
這個方法返回了eq這個值
你還記得嗎!mc類最開始時的那個eq參數,是一串加密的密文
這讓我的大腦興奮了起來!
繼續查看廣播內的代碼
程序校驗了eq這個值是否與加密過的來電號碼一樣
如果一樣,調用endCall方法掛斷來電電話
並且將鎖機懸浮窗移除!
整理一下邏輯,程序的大致意思是:
如果有電話打來,並且加密過的電話號碼和eq密文一樣
則停止鎖機
這是作者留的後門嗎?
ん?流 向 改 變 了
不管了,將密文複製
926e459bfecfc239953d3ff5aec1446a
解密
解密後:15527952330
一 轉 攻 勢
病毒作者的手機號碼已經拿到了
已經提交給警方備案
迫害,請