1. 程式人生 > >安卓逆向之基於Xposed-ZjDroid脫殼

安卓逆向之基於Xposed-ZjDroid脫殼

重定位 war fill 沙盒 mar 內存 ces 鼠標 文件加載

http://bbs.pediy.com/thread-218798.htm

前言

之前介紹了普通常見的反編譯模式 但對於使用了 360加固 棒棒 愛加密 等等的加固應用就沒辦法了、

你會發現反編譯出來的dex 只有幾個類 邏輯都是調用so

真正的dex會被加載到內存中隱藏起來 加固應用都是多dex這種形式

要想拿到他真正的dex 需要進行脫殼處理 基本原理都是從內存中dump 我一般會先用工具來嘗試 不行的話就得上 IDA(反匯編神器)超級強的一個工

具 殺手級別 貫穿移動端 PC端的逆向 但使用IDA 進行靜態分析 動態調試脫殼就變的很麻煩了 而且並不是一兩天能學會的

以後會介紹使用 我們今天先用工具嘗試簡單的脫殼

ZjDroid工具介紹

ZjDroid是基於Xposed Framewrok的動態逆向分析模塊,逆向分析者可以通過ZjDroid完成以下工作: 1、DEX文件的內存dump 2、基於Dalvik關鍵指針的內存BackSmali,有效破解主流加固方案 3、敏感API的動態監控 4、指定內存區域數據dump 5、獲取應用加載DEX信息。 6、獲取指定DEX文件加載類信息。 7、dump Dalvik Java堆信息。 8、在目標進程動態運行lua腳本。

ZjDroid github開源的一個項目 主要功能就是脫殼 基於內存dump 其他功能一般 作者很NB 總有些人可以把Xposed玩出花來

我下篇博客會介紹一個針對安卓端應用分析工具 很強大!

工具準備

已ROOT手機一臺並裝好xpsoed框架在裝上ZjDroid模塊

JEB apk專業逆向工具 但是和IDA一樣要花錢 吾愛論壇提供破解版本

這裏提一下jeb的優勢 可以直接打開apk進行反編譯 而已還原效果好

jd-gui看反編譯出來的jar(源碼)有些代碼為註釋狀態 顯示不出來 但JEB 肯定可以全部還原

愛盤地址 ZjDroid地址

實戰案例

某個朋友托我逆向個應用 叫微丟丟 微信營銷的 去官網下載APK 拖到JEB裏簡單的看了下

只有幾個類 一看就是加固應用 並且使用的是360加固 這種結構的類 在有個Application 鐵定的加固應用

至於做了哪些操作 基本都是常見的套路 釋放so文件 到應用沙盒目錄下

註意 JEB 反編譯出來的代碼 初始狀態都為smali 需要用快捷鍵Q或者鼠標右鍵Decompile下

技術分享

簡單分析過後 下載apk到安裝好ZjDroid的手機中 打開應用到主界面

技術分享

我們需要獲取這個應用的pid值 這就需要用到一個命令了 PC端 WIN+X+R CMD 進入CMD窗口輸入命令

命令: adb shell dumpsys activity top

獲取到當前程序的Activity信息 這個命令很實用 最好記一下

如果顯示過多 可以寫成 adb shell dumpsys activity top |more 按行輸出

技術分享

獲取這個應用的包名 com.haiqu.oem 還要牢記這個pid 8445之後的操作都會用到他

接著我們來使用pid查看這個應用在手機裏面 dex 所在的位置

查詢 dex 信息 所在位置

am broadcast -a com.zjdroid.invoke --ei target 8445 --es cmd ‘{action:dump_dexinfo}‘

有些時候輸入這條命令會報一條警告:

WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.
WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.

警告:鏈接器:app_process有文本重定位。 這是浪費記憶,是一個安全隱患。 請修復

無視就可以 警告而已

記住先adb shell 一下進到手機目錄 在輸入這條命令

技術分享

輸入這條命令 我們發現並沒有什麽實際的變化 需要使用ZjDroid 特有的查看LOG命令

LOG 查詢 後戳為你要查詢應用的包名
adb logcat -s zjdroid-shell-com.haiqu.oem

記住在開個CMD窗口哦

技術分享

這就獲取到了 apk所在的位置 filepath: /data/app/com.haiqu.oem-1.apk 記下來 下一步我們會用到這個

這裏說明下 5792 是我重啟了次手機 pid變成了5792

開始脫殼 命令:

am broadcast -a com.zjdroid.invoke --ei target 5792 --es cmd ‘{action:backsmali, "dexpath":"/data/app/com.haiqu.oem-1.apk"}‘

輸入完命令 回到LOG cmd窗口進行查看

技術分享

上面的/data/data/com.haiqu.oem/files/dexfile.dex 就是脫出來的dex 拿到了dex基本就是拿到了源碼

我們使用RE文件管理器 進到這個目前下 直接使用QQ發送電腦不行 該文件不支持此操作

需要把他挪到根目錄下 在使用豌豆莢或者其他工具 直接發送到電腦上

技術分享

技術分享

在使用 安卓逆向助手把dex轉成jar 或者用dexjar 都行 就可以使用jd-gui直接查看代碼 工具很多 我之前有一篇博客介紹了安卓逆向助手的使用 不懂的可以去看下 JEB也可以直接打開dex格式文件 直接進行查看

技術分享

總結

到這裏這個工具最重要的功能介紹完畢 很簡單 但也能對付一些普通加殼應用

但勝在效率快 很方便 缺點不能重打包但如果單純的想看代碼 進行學習或者HOOK操作 也夠用了

安卓逆向之基於Xposed-ZjDroid脫殼