摘要:多開思路從開發(fā)角度來說,擁有不同包名的個(gè)應(yīng)用,系統(tǒng)會(huì)認(rèn)為是個(gè)應(yīng)用,所以微信多開的思路是修改微信的包名,讓安卓系統(tǒng)認(rèn)為這是個(gè)應(yīng)用,從而達(dá)到多開的目的。微信團(tuán)隊(duì)一直在努力維護(hù)微信這個(gè)生態(tài)圈,期待加入更多的技術(shù)手段來完善應(yīng)用安全,祝一切順利。
前言
第一次聽到微信多開大概在2013年,一個(gè)做微商的朋友,問我能不能做一個(gè)微信安卓版的多開程序,我覺得挺有意思估計(jì)也不難,便研究起來。研究后也發(fā)現(xiàn)其實(shí)也有一些技術(shù)難點(diǎn),和了解到的一些微信的安全策略,寫出來與大家分享,不足之處多多指教。
0x00 多開思路從Android開發(fā)角度來說,擁有不同包名的2個(gè)應(yīng)用,Android系統(tǒng)會(huì)認(rèn)為是2個(gè)應(yīng)用,所以微信
多開的思路是修改微信的包名,讓安卓系統(tǒng)認(rèn)為這是2個(gè)應(yīng)用,從而達(dá)到多開的目的。
系統(tǒng)環(huán)境是OS X 10.11
apktool 2
dex2jar
JD-GUI
baksmali & smali
0xED
Sublime Text
0x02 APK解包與分析使用apltool進(jìn)行解包,我們可以看到一些關(guān)鍵的文件和目錄:
AndroidManifest.xml文件
assets目錄(微信插件和一些資源文件)
lib目錄(封裝好的二進(jìn)制類庫,so文件)
res目錄(圖片,布局,字符串等資源)
smali目錄(微信源碼)
0x03 應(yīng)用名稱修改要制作多開的微信,也許我們需要把應(yīng)用修改一個(gè)名稱,以便使用的時(shí)候和原版的區(qū)分,找到
以下文件:
res/values/strings.xml
修改app_name 和 launcher_name,比如:微信01、wechat01、超級(jí)微信、搜客微信等等
0x04 包名修改查看AndroidMainfest.xml的manifest節(jié)點(diǎn)package屬性,得知微信的包名為: com.tencent.mm。
我們需要修改包名,我們將使用這個(gè)包名作為示例:com.tendk01.mm(dk是多開的意思;01是序號(hào)需要的話可以制作更多的多開版本;包名可以隨便起但是最好保持包名跟原版長度一致,避免一些奇怪的問題出現(xiàn)。)
做過Android開發(fā)或者Java開發(fā)的都知道每一個(gè)“包”對(duì)應(yīng)一個(gè)真實(shí)的文件夾,除了修改 AndroidMainfest.xml文件還需要將smali/com/tencent文件夾名修改為tendk01。
我們先來看一個(gè)smali文件的幾個(gè)代碼片段:
一個(gè)smali文件的開頭:
.class public final Lcom/tencent/mm/a/a; .super Ljava/lang/Object; .source "SourceFile"
smali文件關(guān)于“com.tencent.mm”的引用:
sput-object v0, Lcom/tencent/mm/a/a;->coh:[C .line 76 const/16 v0, 0x100 new-array v0, v0, [I .line 78 sput-object v0, Lcom/tencent/mm/a/a;->coi: .field private static final coh:[C .field private static final coi:[I
在文件中可以看到很多com/tencent/mm的代碼,我們既然修改了包名,也要將所有的該包下 面所有的定義以及調(diào)用全部修改好(用sublime text的簡單的查找替換即可解決問題),例 如:
com/tencent/mm 修改為 com/tendk01/mm com.tencent/mm 修改為 com.tendk01.mm0x06 微信插件調(diào)用修改
微信的插件封裝在/assets/preload目錄下的jar文件和so文件里,你們看到的可能是這樣子的:
com.tencent.mm.plugin.mutidex.jar.0 libvoipCodec.so com.tencent.mm.plugin.mutidex.jar.1 libvoipCodec_v7a.so.0 libvoipCodec_v7a.so.1 libvoipCodec_v5.so libvoipCodec.so
仔細(xì)觀察,這種帶有0和1結(jié)尾的文件,仔細(xì)觀察一下便可會(huì)發(fā)現(xiàn)0結(jié)尾的文件都是1M大小,顯然原來的文件是按照1M進(jìn)行分隔的,我們修改之前,需要先將他們合并回一個(gè)完整的文件,參考Linux的split和cat命令,合并猴進(jìn)行解包,然后需要按照0x05的步驟進(jìn)行修改。
0x07 *.so文件修改在/lib/armeabi目錄下的so文件,封裝了很多JNI的方法,由于包名的修改,也需要同步修改
JNI方法的調(diào)用。 關(guān)于so文件的修改,用一般的16進(jìn)制編輯器即可,查找替換:
com.tencent 修改為 com.tendk01 com/tencent 修改為 com/tendk01 com_tencent 修改為 com_tendk01
但是有一點(diǎn)需要注意的,so文件這樣修改完,還不能用的,會(huì)提示找不到修改后的方法。
方法名明明已經(jīng)修改好了,和smali也是對(duì)應(yīng)的,為什么會(huì)提示找不到方法呢? 其實(shí)so文件本
質(zhì)上是一個(gè)arm架構(gòu)的elf文件,如果了解elf的文件結(jié)構(gòu),便知道問題在哪里。
查看ELF文件格式說明
簡單來說,在elf文件的開頭有一段hash用來快速尋找文件內(nèi)的方法位置,如果方法名修改了, hash不對(duì)應(yīng)則找不到方法的位置。
根據(jù)這個(gè)原理,我寫了一個(gè)小工具來輔助修改so文件,該項(xiàng)目已開源在github:https://github.com/chinaameri...,在此提供修改流程圖和思路,如果大家有興趣可以一期研究修改。
修改so文件hash的流程圖:
前面我們通過查找替換的方式來對(duì)smali文件進(jìn)行過簡單的修改,現(xiàn)在我們需要深入的修改smali文件,以達(dá)到繞過微信檢測機(jī)制和注入我們自己的代碼的目的:
基于我研究的這個(gè)版本的微信(wechat400.apk),雖然比較老,但是官方已經(jīng)有防止篡改的機(jī)制在代碼里了,若修改多開不bypass微信的防篡改機(jī)制則會(huì)很快被封號(hào)。經(jīng)過分析,得知檢測手段是通過應(yīng)用簽名來和服務(wù)器的保存的簽名來比對(duì),若重新打包簽名則會(huì)改變,在特定的情況就執(zhí)行檢測,確認(rèn)當(dāng)前的微信客戶端程序是合法的且沒有被修改。
我們需要做以下的工作來繞過微信監(jiān)測機(jī)制:
獲取官方微信的應(yīng)用簽名信息(字符串形式)
替換所有調(diào)用獲取簽名的系統(tǒng)方法為我們自己寫的方法(詳見0x09)
如果可以我們還要把微信強(qiáng)制更新的提示給閹割掉:
修改com.tendk01.mm.sandbox.updater.AppUpdaterUI.smali,代碼如下:
.method public onResume()V .locals 0 .prologue invoke-super {p0}, Landroid/app/Activity;->onResume()V invoke-virtual {p0}, Lcom/tence01/mm/sandbox/updater/AppUpdaterUI;->finish()V return-void .end method
直接給他finish掉,成功閹割。
0x09 編寫希望注入微信的代碼新建一個(gè)Android項(xiàng)目,如圖:
MockDevice.java用于模擬虛假的設(shè)備ID,虛假的簽名
SyncTask.java用于同步微信用戶的信息到第三方API
provider包里面的是是若干ContentProvider,可用于接收微信App傳遞的數(shù)據(jù)
編寫好后編譯成apk,反編譯該apk獲取MockDevice.smali和SyncTask.smali(混淆為a.smali)文件,并放入微信的smali源碼文件夾里面,如圖:
生成自己的android簽名(需保存好該簽名)
使用apktool重新將微信打包好
使用自己的android簽名對(duì)打包好的apk簽名
安裝登錄一切正常,見圖
利用Android的測試框架,可以對(duì)微信進(jìn)行模擬人工自動(dòng)化操作(市面上所有微商神器自動(dòng)化
的原理)。
為了測試開發(fā)方便,引入robotium測試框架,可以做到打開某個(gè)界面、查找某個(gè)按鈕、在某個(gè)文本框輸入內(nèi)容、獲取界面信息等等操作。
微信還可以采用什么方式防止微信程序被篡改?
我用于研究的該多開版本(wechat400.apk),地理位置發(fā)送始終失敗,仍未解決。
0x0D 掌握這些技術(shù)可以做什么?竊取用戶信息
自動(dòng)化完成加人、關(guān)注、點(diǎn)贊等操作
獲取公眾號(hào)文章閱讀量、點(diǎn)贊量等數(shù)據(jù)
制作插件:如自動(dòng)打飛機(jī)、自動(dòng)搶紅包等
0x0E 對(duì)微信團(tuán)隊(duì)說的話該文章僅僅是對(duì)技術(shù)的研究和探討,希望不會(huì)收到律師信。微信團(tuán)隊(duì)一直在努力維護(hù)微信這個(gè)生態(tài)圈,期待加入更多的技術(shù)手段來完善應(yīng)用安全,祝一切順利。
0x0F 給安卓用戶的建議建議不要從亂七八糟的應(yīng)用市場下載應(yīng)用,盡量在官方渠道下載,避免下載到被篡改過的應(yīng)用,不知道這些程序在背后注入了什么代碼,若隱私泄露或者經(jīng)濟(jì)損失就不好了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/11256.html
摘要:關(guān)于微信小程序之前只是聽說,并沒有引起我太大的興趣。剛好團(tuán)隊(duì)內(nèi)部有個(gè)需求需要微信小程序。暫時(shí)沒有上線經(jīng)歷,沒辦法給出這個(gè)時(shí)間微信小程序的代碼包大小當(dāng)前限制是。 關(guān)于微信小程序之前只是聽說,并沒有引起我太大的興趣。周一被小程序刷屏,然后就順手搜索了解了一下。發(fā)現(xiàn)小程序已經(jīng)火遍了整個(gè)程序員圈子。剛好團(tuán)隊(duì)內(nèi)部有個(gè)需求需要微信小程序。就緊急對(duì)微信小程序進(jìn)行了調(diào)研,閱讀過開發(fā)者文檔后總結(jié)了以下的...
摘要:微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法摘要微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法。先說說很難爬的知乎,假如我們想爬取知乎主頁的內(nèi)容,就必須要先登陸才能爬,不然看不到這個(gè)界面。圖片描述知乎需要手機(jī)號(hào)才能注冊(cè)登陸。 微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法摘要:微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法。 網(wǎng)絡(luò)上有形形色色的網(wǎng)站,不同類型的網(wǎng)站爬蟲策略不同,難易程度也不一樣。從是...
摘要:首先先注冊(cè)微信小程序管理一登錄微信公眾平臺(tái)二點(diǎn)擊立即注冊(cè)。注意這里不要用微信公眾號(hào)登錄,小程序賬號(hào)和微信公眾號(hào)是不同的。最好從項(xiàng)目直接入手,這里有微信小程序個(gè)例子,鏈接密碼有可能會(huì)過期,留言或者加我,給你最新的 首先先注冊(cè)微信小程序管理 一、登錄微信公眾平臺(tái)https://mp.weixin.qq.com 二、點(diǎn)擊立即注冊(cè)。 注意:這里不要用微信公眾號(hào)登錄,小程序賬號(hào)和微信公眾號(hào)是不...
閱讀 893·2021-11-23 09:51
閱讀 1107·2021-11-15 17:57
閱讀 1675·2021-09-22 15:24
閱讀 820·2021-09-07 09:59
閱讀 2234·2019-08-29 15:10
閱讀 1857·2019-08-29 12:47
閱讀 760·2019-08-29 12:30
閱讀 3383·2019-08-26 13:51