1. 程式人生 > >第一篇】【安卓微信】HOOK微信發訊息,當HOOK遇上HOOK。

第一篇】【安卓微信】HOOK微信發訊息,當HOOK遇上HOOK。

前人栽樹,後人吃桃。

準備入坑 安卓 xposed hook 微信(及時通訊),好吧,第一步當然是論壇裡面搜尋啦,像擲骰子、計步器什麼的都是小孩子過家家入門級別的,當然是要搞就搞(及時通訊)。微信 apk都60多M了,總不能反編譯後全部取看一邊一點一點的摸索吧,那樣的話對於我來說簡直就是慘絕人寰,這種事情別人肯定是做過的,於是乎,又用上了搜尋功能滿世界的查詢。

微控工具xp模組-開發版[微信(wechat)二次開發模組]

付費入群,高階功能要錢,這不符合我的原則。這不符合我的原則。對不住只能XX了。

一不小心就找到了這個xp模組,我想作者會恨我。作者絕對會恨我的。我下載了大的模組,大致的用 JEB2.0 看了一下,好像似乎大部分hook方法都寫在native裡面了。應該是 libwtool.so 裡面了吧,怎麼辦好捉急呀。呀!忽然靈光一閃。不對呀~,Xposed 只能 hook java應用層,那麼問題來了,他把核心程式碼放到native裡面,到頭來還是要呼叫:

XposedHelpers.findClass
XposedHelpers.findAndHookMethod
XposedHelpers.findAndHookConstructor
XposedHelpers....

那麼我們只要把xposed 的 XposedHelpers 類 hook 起來,就可以知道原作者呼叫了微信的那些api,配合反編譯的微信分析 api 相關的功能。當然 自己hook也是必不可少的。這樣下來至少可以節約 1 個月的工作量。

當hook遇上hook,神奇的事情即將發生。

當下全網都找思域,那麼接下來就得用我們吉利美人豹(cydia substrate 老掉牙,停產,不更新)對戰 十代思域(Xposed)了。

findClass hook 原始碼:

        MS.hookClassLoad("de.robv.android.xposed.XposedHelpers", new MS.ClassLoadHook() {

            public void classLoaded(Class<?> clazz) {
                Log.w(TAG, "classLoaded: " + clazz.getName());
                Method[] methods = clazz.getMethods();
                for
(final Method method : methods) {                     MS.hookMethod(clazz,method,new MS.MethodAlteration(){                         @Override                         public Object invoked(Object thiz, Object... args) throws Throwable {                             if ("findClass".equals(method.getName())){                                 //public static Class<?> findClass(String className, ClassLoader classLoader)                                 Log.w(TAG, "findClass: "+  args[0]);                             }                             return invoke(thiz, args);                         }                     });                 }             }         });

logcat:

W/wechat: initialize
W/wechat: classLoaded: de.robv.android.xposed.XposedHelpers
W/wechat: findClass: android.app.ActivityThread.AppBindData
W/wechat: findClass: com.android.server.ServerThread
W/wechat: findClass: android.app.ApplicationPackageManager
W/wechat: findClass: android.app.ActivityThread$ResourcesKey
W/wechat: findClass: android.app.ActivityThread$ResourcesKey
W/wechat: findClass: android.app.ActivityThread$ResourcesKey
W/wechat: findClass: android.app.ActivityThread$ResourcesKey
W/wechat: findClass: android.app.ActivityThread
W/wechat: findClass: android.app.ActivityThread
W/wechat: findClass: android.app.ActivityThread
W/wechat: findClass: com.tencent.mm.app.Application
W/wechat: findClass: com.tencent.tinker.loader.app.TinkerApplication
W/wechat: findClass: android.app.ActivityThread$ResourcesKey
W/wechat: findClass: com.tencent.smtt.sdk.WebSettings
W/wechat: findClass: com.tencent.mm.pluginsdk.ui.tools.s
W/wechat: findClass: java.lang.String
W/wechat: findClass: java.lang.String
W/wechat: findClass: java.lang.String
W/wechat: findClass: java.lang.String
W/wechat: findClass: java.util.HashMap
W/wechat: findClass: com.tencent.mm.bg.g
W/wechat: findClass: java.lang.String
W/wechat: findClass: java.util.HashMap
W/wechat: findClass: com.tencent.mm.bg.g
W/wechat: findClass: com.tencent.mmdb.database.SQLiteDatabase
....

總結以及後續

大概的一個思路就是這樣的了,我們還可以加上 findmethod callmethod hook 進行更加詳細的分析,以後在慢慢的分析具體的功能吧,我也會做一些重點筆記同步到論壇。希望大家支援哦。還有原作者真心對不住了,把核心的api都用c++ 寫我也知道很累人。但是我不借鑑分析的話也很累人呀!