摘要:先來看看我的成果需要運行環境環境過的手機微信最新版,我用的是開始逆向,找到大致位置首先要知道微信的選擇地區的頁面在什么位置,然后我們再看對應代碼。先保持在微信的選擇地區頁面。我們需要分析微信的邏輯,隨后他的方法。
前言
今天看到網友的微信地區是一個魔法學院,微信的地區怎么可能是魔法學院呢,肯定是這位網友自己搞了一些黑科技,然后改的。他能改,我們也能改,二話不說就開干。
先來看看我的成果
xposed環境
root過的android手機
微信最新版,我用的是6.7.3
開始逆向,找到大致位置首先要知道微信的選擇地區的頁面在什么位置,然后我們再看對應代碼。
先保持在微信的選擇地區頁面。然后dump activity
首先利用命令
adb shell dumpsys activity
從日志里面我們可以看到如下所示
重點在此
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[816,1041][996,1221] (has extras) } Hist #3: ActivityRecord{2152aef u0 com.tencent.mm/.ui.tools.MultiStageCitySelectUI t266} Intent { cmp=com.tencent.mm/.ui.tools.MultiStageCitySelectUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #2: ActivityRecord{e722872 u0 com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalMoreUI t266} Intent { cmp=com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalMoreUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #1: ActivityRecord{4e7fec5 u0 com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalInfoUI t266} Intent { cmp=com.tencent.mm/.plugin.setting.ui.setting.SettingsPersonalInfoUI } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82} Hist #0: ActivityRecord{5cb9f3a u0 com.tencent.mm/.ui.LauncherUI t266} Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[816,1041][996,1221] (has extras) } ProcessRecord{a2337f6 1215:com.tencent.mm/u0a82}
看到了吧,重點就是在com.tencent.mm.ui.tools.MultiStageCitySelectUI這個頁面里面了。
我們需要分析微信的邏輯,隨后hook他的方法。
分析微信代碼其實有一點我也很有疑問,微信的運行時內部的變量名字和方法名字,和我們靜態分析的是不太對應的,對此暫時沒有深入研究,如果有朋友知道的話可以提示我,歡迎一起探討。
由于我上面所說的這個問題,所以采用利用Xposed hook 這個MultiStageCitySelectUI的onCreate方法,然后我們動態的在內存里分析。
hook onCreate代碼如下
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader, "onCreate", new Object[]{Bundle.class, new XC_MethodHook() { protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI onCreate beforeHookedMethod"); } protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI afterHookedMethod"); Class mscsu = XposedHelpers.findClass("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader); Method[] methods = param.thisObject.getClass().getMethods(); ListmyMethods = new ArrayList(); for (Method item : methods) { if (item.getDeclaringClass().equals(mscsu)) { myMethods.add(item); } } }
如代碼所示,我們還將屬于MultiStageCitySelectUI類本身的方法篩選了出來,防盜了myMethods里面,方便于我們分析。
打斷打上,運行時分析。
然后看運行時的成員變量,根據軟件開發的經驗,肯定有一個數據源,存著所有的地區列表。
突然發現有一個wdN的變量,他的類型是RegionCodeDecoder$Region。
這個的意思就是這個變量的類型是RegionCodeDecoder的子類Region類型。
然后打開結果如下
這個圖片正好對應我們手機里的第三項,
這也就說明其實這個列表有很大可能性就是我們需要篡改的列表了。
然后緊跟著,思路就是hook 初始化這個變量的方法,然后在調用完成之后,再放入我們自己自定義的地區。
代碼如下:
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader, "cJa", new Object[]{new XC_MethodHook() { protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI cJa beforeHookedMethod"); } protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); XposedBridge.log("MartinHan_xposed: wx success MultiStageCitySelectUI cJa afterHookedMethod"); Object wdnObj = XposedHelpers.findField(XposedHelpers.findClass("com.tencent.mm.ui.tools.MultiStageCitySelectUI", classLoader), "wdN").get(param.thisObject); Class regionClazz = XposedHelpers.findClass("com.tencent.mm.storage.RegionCodeDecoder$Region", classLoader); Field codeField = XposedHelpers.findField(regionClazz, "code"); Field nameField = XposedHelpers.findField(regionClazz, "name"); Object arrayHarryporrt = Array.get(wdnObj, 0); codeField.set(arrayHarryporrt, "哈利波特魔法學校"); nameField.set(arrayHarryporrt, "哈利波特魔法學校"); Array.set(wdnObj, 0, arrayHarryporrt); } }});
我們修改了Region對象的code和name。
這樣wdN這個對象的第一項就變成了我們篡改之后的值了。
下面展示效果
然后選擇我們篡改的第一項,哈利波特魔法學校,然后你的地區就會改變啦。
有沒有感覺很神奇呢。
ps:改完之后ios設備無法看到你的地區,可能由于ios客戶端判斷的問題。
源碼地址要不要star一下呢
github地址,點我點我
寫在最后偶爾聊聊逆向,偶爾聊聊生活,做一個很懶的博主就是本人了。
歡迎吐槽。
關于我個人網站:MartinHan的小站
博客:hanhan12312的專欄
知乎:MartinHan01
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72486.html
摘要:如何使用呢,可以見我的的上一篇文章點我逆向之路脫殼加固與注意事項寫在最后偶爾聊聊技術,偶爾聊聊逆向,偶爾聊聊生活不能總聊技術呀,下次一起聊點輕松的。 前言 眾所周知,上次說到了如何脫殼360加固,大致意思就是安裝一個xposed插件,然后自動就會脫殼了,那么這個插件是如何工作的呢,本次重點說說這個。 上次說道了dumpDex脫殼360加固,其實先說個大概,就是從ndk層和java層,適...
閱讀 2003·2021-11-23 10:08
閱讀 2336·2021-11-22 15:25
閱讀 3275·2021-11-11 16:55
閱讀 771·2021-11-04 16:05
閱讀 2600·2021-09-10 10:51
閱讀 711·2019-08-29 15:38
閱讀 1582·2019-08-29 14:11
閱讀 3486·2019-08-29 12:42