Android小黑科技---來自火星的你
今天偶然看到網友的微信地區是一個魔法學院,微信的地區怎麼可能是魔法學院呢?肯定是這位網友自己搞了一些黑科技,然後改的。他能改,我們也能改,二話不說就開幹。 先來看看我的成果
需要執行環境
- xposed環境root過的android手機微信最新版,我用的是6.7.3
開始逆向,找到大致位置
首先要知道微信的選擇地區的頁面在什麼位置,然後我們再看對應程式碼。
先保持在微信的選擇地區頁面。然後dump activity
首先利用命令
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; font-size: 18px; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(93, 93, 93); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
adb shell dumpsys activity
</pre>
從日誌裡面我們可以看到如下所示 重點在此
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; font-size: 18px; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(93, 93, 93); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
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}
</pre>
看到了吧,重點就是在com.tencent.mm.ui.tools.MultiStageCitySelectUI這個頁面裡面了。
我們需要分析微信的邏輯,隨後hook他的方法。
分析微信程式碼
其實有一點我也很有疑問,微信的執行時內部的變數名字和方法名字,和我們靜態分析的是不太對應的,對此暫時沒有深入研究,如果有朋友知道的話可以提示我,歡迎一起探討。
由於我上面所說的這個問題,所以採用利用Xposed hook 這個MultiStageCitySelectUI的onCreate方法,然後我們動態的在記憶體裡分析。
hook onCreate程式碼如下
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; font-size: 18px; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(93, 93, 93); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
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);
}
}
}
</pre>
如程式碼所示,我們還將屬於MultiStageCitySelectUI類本身的方法篩選了出來,防盜了myMethods裡面,方便於我們分析。
打斷打上,執行時分析。
然後看執行時的成員變數,根據軟體開發的經驗,肯定有一個資料來源,存著所有的地區列表。
突然發現有一個wdN的變數,他的型別是RegionCodeDecoder$Region。
這個的意思就是這個變數的型別是RegionCodeDecoder的子類Region型別。 然後開啟結果如下
這個圖片正好對應我們手機裡的第三項,
這也就說明其實這個列表有很大可能性就是我們需要篡改的列表了。
然後緊跟著,思路就是hook 初始化這個變數的方法,然後在呼叫完成之後,再放入我們自己自定義的地區。
程式碼如下:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; font-size: 18px; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word; color: rgb(93, 93, 93); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
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);
}
}});
</pre>
我們修改了Region物件的code和name。 這樣wdN這個物件的第一項就變成了我們篡改之後的值了。
下面展示效果
大功告成
然後選擇我們篡改的第一項,哈利波特魔法學校,然後你的地區就會改變啦。
有沒有感覺好玩兒呢。
ps:改完之後ios裝置無法看到你的地區,可能由於ios客戶端判斷的問題。
趕緊動手試試吧,喜歡可以點個關注哦,記得隨手轉發讓火星移民同胞更多吧哈哈~
相關文章
- Android逆向之路—Android逆向之路—讓你的微信地區來自火星Android
- Android逆向之路---Android逆向之路---讓你的微信地區來自火星Android
- Nodejs優化的小小黑科技NodeJS優化
- 程式來自火星,美術來自水星,遊戲策劃如何溝通?遊戲
- 3D列印:火星基地的未來3D
- 2017現象級IP解密專場—白夜追凶、維密秀、火星情報局製作人來了,你來不?...解密
- 微軟:23% 的WP使用者竟來自Android微軟Android
- 首發!來自你的Java同行的調查報告Java
- 三個白帽之來自星星的你(一)writeup
- 愛奇藝:資料解讀“來自星星的你”——資訊圖
- Android通過Wifi來除錯你的應用AndroidWiFi除錯
- 如何設定iPhone的手機鈴聲?【來自星星的你】iPhone
- 自動駕駛行業的未來由資料標註來撐起丨曼孚科技自動駕駛行業
- 體驗科技、感受未來!“百輛級「自動駕駛」車隊”火爆來襲!自動駕駛
- 給你的站點全面提速——來自YahooUI的各種BsetPracticesUI
- 使用Android sdk自帶的jsonReader來解析jsonAndroidJSON
- 火星座標轉換
- 如何利用jenkins來做android自動化JenkinsAndroid
- 用來寫爆文的自媒體工具,你有在用嗎?
- 來自播放器的你——“中國外掛聯盟”木馬分析播放器
- 10個Python指令碼來自動化你的日常任務Python指令碼
- CSS雙關語–來自前端的小段子,你看得懂嗎?CSS前端
- 火星文:一種特殊的文字編碼
- 新建 Laravel 6 專案(火星)Laravel
- 火星商店問題 題解
- [android]android自動化測試八之讓你的AVD無法連線網路Android
- 被生活“藏”起來的科技:WIFIWiFi
- 這款VR應用能讓你縱覽火星全貌 不用天文望遠鏡VR
- 網路小黑揭秘系列之黑色SEO初探
- 中國最小黑客現身:僅12歲黑客
- 值得你花時間看的擴散模型教程,來自普渡大學模型
- 從解放勞動力來看未來的科技程式
- 來自 他 的謀殺
- Android Studio NDK 入門教程(1)--來自C 語言的StringAndroid
- Oracle:Google 2/3搜尋廣告收入來自iOS而非AndroidOracleGoiOSAndroid
- 小黑客們用編碼技能侵入線上遊戲黑客遊戲
- 深入解密來自未來的快取-Caffeine解密快取
- 深度揭秘Elon Musk的火星殖民地圖(上)地圖