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