成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Android逆向之路---Android逆向之路---讓你的微信地區(qū)來(lái)自火星

wenzi / 1519人閱讀

摘要:先來(lái)看看我的成果需要運(yùn)行環(huán)境環(huán)境過(guò)的手機(jī)微信最新版,我用的是開(kāi)始逆向,找到大致位置首先要知道微信的選擇地區(qū)的頁(yè)面在什么位置,然后我們?cè)倏磳?duì)應(yīng)代碼。先保持在微信的選擇地區(qū)頁(yè)面。我們需要分析微信的邏輯,隨后他的方法。

前言

今天看到網(wǎng)友的微信地區(qū)是一個(gè)魔法學(xué)院,微信的地區(qū)怎么可能是魔法學(xué)院呢,肯定是這位網(wǎng)友自己搞了一些黑科技,然后改的。他能改,我們也能改,二話(huà)不說(shuō)就開(kāi)干。
先來(lái)看看我的成果

需要運(yùn)行環(huán)境

xposed環(huán)境

root過(guò)的android手機(jī)

微信最新版,我用的是6.7.3

開(kāi)始逆向,找到大致位置

首先要知道微信的選擇地區(qū)的頁(yè)面在什么位置,然后我們?cè)倏磳?duì)應(yīng)代碼。

先保持在微信的選擇地區(qū)頁(yè)面。然后dump activity

首先利用命令

adb shell dumpsys activity

從日志里面我們可以看到如下所示
重點(diǎn)在此

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}

看到了吧,重點(diǎn)就是在com.tencent.mm.ui.tools.MultiStageCitySelectUI這個(gè)頁(yè)面里面了。

我們需要分析微信的邏輯,隨后hook他的方法。

分析微信代碼

其實(shí)有一點(diǎn)我也很有疑問(wèn),微信的運(yùn)行時(shí)內(nèi)部的變量名字和方法名字,和我們靜態(tài)分析的是不太對(duì)應(yīng)的,對(duì)此暫時(shí)沒(méi)有深入研究,如果有朋友知道的話(huà)可以提示我,歡迎一起探討。

由于我上面所說(shuō)的這個(gè)問(wèn)題,所以采用利用Xposed hook 這個(gè)MultiStageCitySelectUI的onCreate方法,然后我們動(dòng)態(tài)的在內(nèi)存里分析。

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();
                    List myMethods = new ArrayList();
                    for (Method item : methods) {
                        if (item.getDeclaringClass().equals(mscsu)) {
                            myMethods.add(item);
                        }
                    }
                }

如代碼所示,我們還將屬于MultiStageCitySelectUI類(lèi)本身的方法篩選了出來(lái),防盜了myMethods里面,方便于我們分析。

打斷打上,運(yùn)行時(shí)分析。

然后看運(yùn)行時(shí)的成員變量,根據(jù)軟件開(kāi)發(fā)的經(jīng)驗(yàn),肯定有一個(gè)數(shù)據(jù)源,存著所有的地區(qū)列表。

突然發(fā)現(xiàn)有一個(gè)wdN的變量,他的類(lèi)型是RegionCodeDecoder$Region。

這個(gè)的意思就是這個(gè)變量的類(lèi)型是RegionCodeDecoder的子類(lèi)Region類(lèi)型。
然后打開(kāi)結(jié)果如下

這個(gè)圖片正好對(duì)應(yīng)我們手機(jī)里的第三項(xiàng),

這也就說(shuō)明其實(shí)這個(gè)列表有很大可能性就是我們需要篡改的列表了。

然后緊跟著,思路就是hook 初始化這個(gè)變量的方法,然后在調(diào)用完成之后,再放入我們自己自定義的地區(qū)。

代碼如下:

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, "哈利波特魔法學(xué)校");
                    nameField.set(arrayHarryporrt, "哈利波特魔法學(xué)校");
                    Array.set(wdnObj, 0, arrayHarryporrt);
                }
            }});

我們修改了Region對(duì)象的code和name。
這樣wdN這個(gè)對(duì)象的第一項(xiàng)就變成了我們篡改之后的值了。

下面展示效果

大功告成

然后選擇我們篡改的第一項(xiàng),哈利波特魔法學(xué)校,然后你的地區(qū)就會(huì)改變啦。

有沒(méi)有感覺(jué)很神奇呢。

ps:改完之后ios設(shè)備無(wú)法看到你的地區(qū),可能由于ios客戶(hù)端判斷的問(wèn)題。

源碼地址

要不要star一下呢

github地址,點(diǎn)我點(diǎn)我

寫(xiě)在最后

偶爾聊聊逆向,偶爾聊聊生活,做一個(gè)很懶的博主就是本人了。

歡迎吐槽。

關(guān)于我

個(gè)人網(wǎng)站:MartinHan的小站

博客:hanhan12312的專(zhuān)欄

知乎:MartinHan01

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72486.html

相關(guān)文章

  • Android逆向之路---脫殼360加固原理解析

    摘要:如何使用呢,可以見(jiàn)我的的上一篇文章點(diǎn)我逆向之路脫殼加固與注意事項(xiàng)寫(xiě)在最后偶爾聊聊技術(shù),偶爾聊聊逆向,偶爾聊聊生活不能總聊技術(shù)呀,下次一起聊點(diǎn)輕松的。 前言 眾所周知,上次說(shuō)到了如何脫殼360加固,大致意思就是安裝一個(gè)xposed插件,然后自動(dòng)就會(huì)脫殼了,那么這個(gè)插件是如何工作的呢,本次重點(diǎn)說(shuō)說(shuō)這個(gè)。 上次說(shuō)道了dumpDex脫殼360加固,其實(shí)先說(shuō)個(gè)大概,就是從ndk層和java層,適...

    ysl_unh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<