今天看到網友的微信地區是一個魔法學院,微信的地區怎麼多是魔法學院呢,確定是這位網友本身搞了一些黑科技,而後改的。他能改,咱們也能改,二話不說就開幹。 先來看看個人成果 java
首先要知道微信的選擇地區的頁面在什麼位置,而後咱們再看對應代碼。android
先保持在微信的選擇地區頁面。而後dump activityios
首先利用命令git
adb shell dumpsys activity
複製代碼
從日誌裏面咱們能夠看到以下所示 重點在此github
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
這個頁面裏面了。shell
咱們須要分析微信的邏輯,隨後hook他的方法。bash
其實有一點我也頗有疑問,微信的運行時內部的變量名字和方法名字,和咱們靜態分析的是不太對應的,對此暫時沒有深刻研究,若是有朋友知道的話能夠提示我,歡迎一塊兒探討。微信
因爲我上面所說的這個問題,因此採用利用Xposed hook 這個MultiStageCitySelectUI的onCreate方法,而後咱們動態的在內存裏分析。網站
hook onCreate代碼以下ui
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();
List<Method> myMethods = 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一下呢
偶爾聊聊逆向,偶爾聊聊生活,作一個很懶的博主就是本人了。
歡迎吐槽。
我的網站:MartinHan的小站
知乎:MartinHan01