微信分身,微信多開,微信雙開
2016-07-08 更新
由於公司放棄該方案哪就不壓箱底了,開源造福人類,呵呵
先說一下實現雙開(多開)的幾種方案
- 靜態修改APK包名,然後重打包
- 作為廠商肯定不推薦這個方式拉,可能存在法律風險
- 動態修改APK包名
- 對原生程式碼修改量小,相容性差,部分APP需單獨適配
- 動態修改程序的例項
- 對原生程式碼修改量大,相容性一般,可能會導致系統一些亂七八糟的BUG
- 通過多使用者機制實現
- MIUI的實現機制,更多的是修改多使用者在相關的程式碼
- 通過動態載入(執行)的機制來實現(LBE的平行空間)
- 作為第三方開發者,不能ROOT,不能修改系統原始碼,逼的LBE用這種方式,也是難為他們了
上面幾種方式是常見的幾種方式,我選擇的是方式2,之所以用第2種方式是由於去年年底友商也只出了微信的雙開,從技術角度我需要儘快跟進,所以用了一個程式碼修改量小,門檻不算高的方式快速跟進。
OK,接下來我詳細說一下方式2的細節。
我們分為兩部分:
- 安裝部分
- APP安裝流程就不科普了,操作是這樣的,先安裝微信,然後再一次安裝微信,這個時候會在系統裡存在兩個微信,當然原生程式碼做了校驗,我們修改了關鍵函式校驗程式碼,通過PackageInstaller第二次安裝微信的流程如下:
PackageManagerServer::installPackageLI // 安裝函式
PackageParser::parsePackageSplitNames // 解析函式//#[email protected] {@ if ( ((installFlags & PackageManager.INSTALL_WEIXIN_CLONE) != 0) ) { pkg = pp.parsePackage(tmpPackageFile, parseFlags | PackageParser.PARSE_CLONE_WEIXIN); } else { pkg = pp.parsePackage(tmpPackageFile, parseFlags); } // @}
PackageParser::buildClassName // 處理一下類//#[email protected] {@ if ((flags & PARSE_CLONE_WEIXIN) != 0) { //Log.i("yunajie", "parsePackageSplitNames::printStackTrace1: " + packageName); //new Exception().printStackTrace(); //Log.i("yunajie", "parsePackageSplitNames::printStackTrace2"); if ("com.tencent.mm".compareToIgnoreCase(packageName) == 0) { boolean bInstallWeixinShadow = false; Throwable throwable = new Throwable(); StackTraceElement[] stackElements = throwable.getStackTrace(); if (null != stackElements) { for (int i = 0; i < stackElements.length; i++) { String szMethodName = stackElements[i].getMethodName(); if ("installPackageLI".compareToIgnoreCase(szMethodName) == 0 || "scanPackageLI".compareToIgnoreCase(szMethodName) == 0) { bInstallWeixinShadow = true; break; } } } throwable = null; if (bInstallWeixinShadow) { return Pair.create("com.tencent.mm2".intern(), (splitName != null) ? splitName.intern() : splitName); } } } // @}
呵呵,到此為止,已經可以安裝兩個微信了,但實際上還執行不起來,看第2部分//#[email protected] {@ if ("com.tencent.mm2".compareToIgnoreCase(pkg) == 0) { return ("com.tencent.mm" + cls).intern(); } // @}
- APP安裝流程就不科普了,操作是這樣的,先安裝微信,然後再一次安裝微信,這個時候會在系統裡存在兩個微信,當然原生程式碼做了校驗,我們修改了關鍵函式校驗程式碼,通過PackageInstaller第二次安裝微信的流程如下:
- 執行部分
- 好了,當你看到桌面上有2個微信圖示是不是很興奮,結果執行不起來,開啟JNI日誌,檢視各種崩潰資訊我已經修改了絕大部分的問題了,主要是查詢類的時候路徑找不到,看程式碼了。
class_linker::FindClass
是不是很簡單,對,就是很簡單。//#[email protected] {@ LOG(INFO) << "yunajie::FindClass1: " << descriptor; std::string str_descriptor(descriptor); if (str_descriptor.find("tencent/mm2com") != std::string::npos) { str_descriptor.erase(1, 15); } else if (str_descriptor.find("tencent/mm2") != std::string::npos) { str_descriptor.erase(15, 1); } LOG(INFO) << "yunajie::FindClass2: " << str_descriptor; descriptor = const_cast<const char*>(str_descriptor.c_str()); // @}
- 好了,當你看到桌面上有2個微信圖示是不是很興奮,結果執行不起來,開啟JNI日誌,檢視各種崩潰資訊我已經修改了絕大部分的問題了,主要是查詢類的時候路徑找不到,看程式碼了。
- 後續總結
- 已經完美運行了,沒發現什麼問題,咦,發紅包崩潰啊,好,有包名校驗,改之:
ContextWrapper::getPackageName//#[email protected] {@ String pkg = mBase.getPackageName(); if ("com.tencent.mm2".compareToIgnoreCase(pkg) == 0) { Throwable throwable = new Throwable(); StackTraceElement[] stackElements = throwable.getStackTrace(); if (null != stackElements) { for (int i = 0; i < stackElements.length; i++) { if (stackElements[i].getClassName().indexOf("MyKeyboardWindow") > 0) { pkg = "com.tencent.mm"; break; } } } throwable = null; return pkg; } //@}
- 已經完美運行了,沒發現什麼問題,咦,發紅包崩潰啊,好,有包名校驗,改之:
完。
====== 華麗的分割線 ======
自己來填坑了,360OS 的微信分身是如何實現的還不知道,因為手上拿到的手機無法ROOT,可以ROOT的手機已經在路上了。但這裡和大家分享一下思路:
- 我們知道可以通過修改包名達到共存的目的,對於微信這類的APP當然最好不要直接修改包名,我們可以在框架層動態的修改包名,騙過系統以為有兩個包,然後執行com.tencent.mm2的時候把需要的東西全部映射回原來的包,這是我的做法,已經完美運行了。
- 研究了樂視的做法,他是直接去修改AMS的流程來實現的,感覺這做法對AMS的流程修改有點大,說不好會有坑。
給需要的朋友參考一下思路。
附圖:
相關推薦
單播,組播(多播),廣播以及任播
pac 視頻 rsvp 使用 blank 缺點 ron ssa 處理 目錄 [+] 單播(unicast): 是指封包在計算機網絡的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網絡應用最為廣泛,通常所使用的網絡協議或服務大多采用單播傳輸,例如一切基於TCP的協議
中華酷聯,曾經的國產四巨頭只剩華為,虧損100多億,面臨破產!
中興 中華酷聯 手機市場 消費者 優化 太差 影響力 先後 以及 中興,華為,酷派,聯想是國內最先做手機的國產廠商,記得在2015年以前,這四個國產手機的產品可以說是充滿了我們的生活之中,也是那個時候國產手機最有代表的品牌,大街小巷都可以看到這幾個品牌的手機,這算是國產手機
引用&,引用的使用,常引用,引用與多態,引用與指針的區別
C/C++什麽是“引用”?申明和使用“引用”要註意哪些問題? 答:引用就是某個目標變量的“別名”(alias),對應用的操作與對變量直接操作效果完全相同。申明一個引用的時候,切記要對其進行初始化。引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一
【shiter編寫程式的藝術】大資料生態圈,計算機視覺,機器學習,高階技術的愛好者,話不多說,上程式碼!!!
公眾號: 老王和他的IT界朋友們 歡迎投稿: [email protected] QQ交流群: 593683975 QQ群提供技術交流,CSDN資源,百度文庫等資源共享 加群問題:拋硬幣正面上的期望? 我們想用一段音樂,幾張圖片, 些
10天時間,淨賺20多萬,她成功創業有什麼祕訣?
25歲的王鶴潼被親戚稱為成功創業的典例,在2014年,她給父母買了房子,還給自己換了輛越野車。 從上大學起王鶴潼就逮住各種機會,拼命賺錢,並且樂此不疲。期間父親的一場重病,花盡了家中的積蓄和她大學期間賺的錢。王鶴潼要繼續賺錢為父母的生活和醫療提供物質保障,但也意識到自己的生活若只是重複著賺錢和花
A/B 測試的基本概念舉例理解以及具體實現方法【傳統A/B測試基於後端的 A/B 測試(Back-end AB test),現在基本上基於前端js在客戶端進行分流,有更多優點,請看裡面】
文章來源:http://www.aliued.cn/2010/09/27/ab-testing-realization-method.html 什麼是A/B測試?以及如何進行? 很多朋友都問我怎麼進行A/B測試,我一般都不直接回答他們的問題,而是首先問一句:“你的日
shiter編寫程式的藝術(大資料生態圈,計算機視覺,機器學習,高階技術的愛好者,話不多說,上程式碼!!!)
公眾號: 老王和他的IT界朋友們 歡迎投稿: [email protected] QQ交流群: 593683975 QQ群提供技術交流,CSDN資源,百度文庫等資源共享 加群問題:拋硬幣正面上的期望? 我們想用一段音樂,幾張圖片, 些
sql 將‘1,2,3,4’轉成相應的表,欄位分隔表值函式,一行變多行,
再設計表的時候我們經常遇到這樣的情況,欄位的值為1,2,3,4 等字元隔開的情況,存的是數字,但是顯示的時候是對應的類別,直接上圖,清楚明瞭, 如何想得到 分兩步完成,步驟如下: 第一步先創造 一個表值函式,將1,2,3,4 轉化為 函式是從網上找來的,程式碼如下:
整理的一些好的文章,適合平時多看看,多想想
1.分散式事務在Sharding-Sphere中的實現: 可以詳細瞭解各種事務,加強對分散式事務的瞭解 2.全面解析schedule、scheduleAtFixedRate和scheduleWithFixedDelay: 適合用執行緒池實現一些定時任務的場景
termsrv.dll XP SP3 / Win7 32/64位 支援多使用者遠端桌面連線 雙開3389
1. 下載破解的termsrv.dll 版本:5.1.2600.5512 2. 複製到C:\Windows\system32資料夾覆蓋同名檔案 3. 執行MultipleTS.bat檔案; 4. 執行Gpedit.msc開啟組策略,終端服務,限制連線數量改到2
力求改變,給自己多一點,再多一點的挑戰!
前一段時間看一本《高效能網站建設進階指南》這本書,提到頁面中的js並不是同步載入的,這就會導致如果幾個js檔案是互為牽制的話,可能會造成有未讀取到的js沒有及時生成元素而報錯的問題,而今天也是在網上看到了一篇叫做js同步載入最佳實踐的文章,提出了一個能把多個js檔案實現同步載
基於個人理解的springAOP部分原始碼分析,內含較多原始碼,慎入
## 本文原始碼較多,講述一些個人對spring中AOP程式設計的一個原始碼分析理解,只代表個人理解,希望能和大家進行交流,有什麼錯誤也渴求指點!!!接下來進入正題 AOP的實現,我認為簡單的說就是利用代理模式,對目標方法所在的類進行封裝代理。請求目標方法時,是直接請求代理物件,再根據使用者指定的通知(切點
微信分身,微信多開,微信雙開
2016-07-08 更新 由於公司放棄該方案哪就不壓箱底了,開源造福人類,呵呵 先說一下實現雙開(多開)的幾種方案 靜態修改APK包名,然後重打包 作為廠商肯定不推薦這個方式拉,可能存在法律風險動態修改APK包名 對原生程式碼修改量小,相容性差,部分APP需單獨適
PC版微信多開,不用軟件,自己動手豐衣足食。
tex ech tencent 文本 class ber 保存 後綴名 AR 關於PC版微信多開 找到微信的安裝路徑(包含 WeChat.exe 的文件夾)如: D:\Program Files\Tencent\WeChat 新建文本文檔,隨意命名,打開後粘貼如下代碼並保
PC版微信多開,不用軟體,自己動手豐衣足食。
關於PC版微信多開 找到微信的安裝路徑(包含 WeChat.exe 的資料夾)如: D:\Program Files\Tencent\WeChat新建文字文件,隨意命名,開啟後貼上如下程式碼並儲存:
微信小程序卡券接入流程,酷客多為你支招
酷客多小程序 小程序 微信小程序 酷客多 1.必須是已經認證的小程序(需300元/年認證費)2.必須是已經認證的微信公眾號(需300元/年認證費)必須在微信公眾平臺開通卡券功能3.需要在微信開放平臺綁定公眾號AppId與小程序AppId(開發者資質認證300元/年)在開放平臺綁定小程序和微信公
微信小程序平臺化開發案例,公開多商家門店線下盈利模式
運營 實例 images .cn 技術分享 盈利 後臺管理系統 線下 招募 小程序商圈平臺、多商家/門店入駐、開發管理後臺(實例分析) 咫尺網絡 出品 1、小程序“商圈平臺”開發設計源碼小程序平臺化經營,占據商圈流量高點,對外招募商家門店(多樣化盈利模式),打造人氣
好用不需多說的微信公眾號實用技巧,一起來叨叨!
新媒體至此軍訓之際,太陽大大當空照,火熱的陽光真是好!小編的心情也是非常的好,想一想那麽多嗮黑了,餓瘦了的小學妹們,終於可以顯的我好白好白啦(不是白胖白胖)!白白瘦瘦的我現在比較容易緊張,一緊張我就...喜歡裝逼...裝逼我就想到了微信,想到了微信就忍不住和大家叨叨幾個超級牛逼的技巧(⊙o⊙) 牛逼的技巧一:
[完整開源源碼V10]最新仿微信紅包牛牛掃雷多雷禁搶雷坐莊雷接龍PC蛋蛋遊戲
hvm pk10 編譯 最新 edi medium erl flag 數據 [完整開源源碼V10]最新仿微信紅包牛牛掃雷多雷禁搶雷坐莊雷接龍PC蛋蛋遊戲 完整源碼版和編譯運營修復版正式發布 同步發布,需要聯系qq:3373137913[完整開源源碼V10]最新仿微信紅包牛牛
微信小程序-兩個input疊加,多次點擊字體變粗或閃動
img 效果 brush 問題 inf rip nbsp jpg highlight 問題描述: 當兩個input疊加,多次點擊input框, placeholder 字體變粗或input框閃動。如圖: 代碼: <!-- 最上層input-1 --