华为电脑管家PcManager多屏协同功能破解
讓友商電腦兼容了一下華為系專屬的多屏協同功能
筆者注:文中出現的大寫C,請輕聲念出北京大爺的口頭禪。
華為剛發布多屏協同功能的時候,我就被種草了。
后來一天在微博看到@Navis-MDT發布的一個體驗視頻,果然碉堡了。
華為多頻協同體驗視頻
瞬間有點想從“米boy”轉為“花粉”用戶,這…當然是不可能的了。
翻看微博回復,看到華為手機副總裁@李小龍Bruce_Lee也轉發了該視頻,并回復網友“為啥不面向非華為電腦”說:“不是故意不做其他品牌的電腦,是電腦上WIFI/藍牙硬件和驅動太亂了,我們沒精力搞定兼容性問題。大神們想破解我們也不會攔著?!?/p>
對啊,怎么忘了自己也是“大神”啊(羞澀~~)。
既然主人家都不反對,那我幫他們兼容一下,腦子開始發熱,迅速準備搞一搞。
是的,腦子非常熱,導致前期資訊準備不足,后面踩了很多坑。
下面且聽我一一道來。
1
視頻中提到華為電腦中需要使用“電腦管家”(視頻中沒看清界面),然后手機掃描連接即可。
聽到“電腦管家”第一反應就是華為多屏協同怎么還跟騰訊合作?懵逼,騰訊NB。
后來一想不對,應該是華為自己的軟件“電腦管家”,類似于小米筆記本上的“小米游戲盒子”之類的軟件。
沒有華為電腦,先去搜搜看是否能下載到軟件。
果然有,華為官網很友好的給出了操作提示,果然是為客戶著想的好公司。
版本挺多,下一個最新的。然后我選擇了9.1.6.33,因為我看到日期是2019-11-01。(請仔細看圖,并記住這里)
2
OK,軟件下回來了,接著就開始干正事了。
習慣性地把軟件拉入了虛擬機運行,結果雙擊后沒反應,以為是鼠標出問題或者虛擬機太卡,連續試了好幾次依然沒反應。
一瞬間,腦子里翻江倒海,難道華為加了反虛擬機、反調試、反…C
直接上windbg吧,一運行,直接退出,才發現是烏龍。
因為這兩天在測試DLL劫持,留了個DLL在桌面,華為的“電腦管家”很不幸中槍了,被劫持,然后直接退出。(劃重點)
刪掉DLL,終于有了反應,但是…提示只支持64位系統,而我用的是Win7 x86…C
換唄,還能咋辦,切到Win7 x64虛擬機,問題又來了。
好吧,我錯了,我直接本機win10安裝吧,一分鐘不到,終于裝好了。
但是從下載到裝好時間已經過去了30分鐘,都是自己作的。
3
點擊立即體驗,看看界面長啥樣。
結果又退出了,退出了…出了…了
咋回事?難道是直接驗證到不是華為電腦,直接退出?
繼續windbg啟動軟件,看到如下信息:
Util!HttpUtil::OnDebug+0x13f8: 00007fff`0aa7a2c8 cc int 3 0:000> kv# Child-SP RetAddr : Args to Child : Call Site 00 00000042`558fed10 00007fff`0aa78d2f : 00000219`596f44a0 00000042`558ff339 00000042`558ff2f4 00000042`558ff2f4 : Util!HttpUtil::OnDebug+0x13f8 01 00000042`558fee30 00007fff`0ab05616 : 00000042`558fefe0 00000219`596f44a0 00007fff`0aa60000 00000219`59660000 : Util!mba::util::UrlsManager::ParseXml+0x63f 02 00000042`558fee70 00007fff`0ab04879 : 00000000`00000006 00000000`00000006 00000042`558ff2f4 00000042`558ff339 : Util!CWMI::GetOutPutUIntByString+0x3bb6 03 00000042`558ff1b0 00007fff`0ab04af2 : 00000000`00000000 00000000`00000000 00000042`558ff3c0 00000000`00000000 : Util!CWMI::GetOutPutUIntByString+0x2e19 04 00000042`558ff2d0 00007fff`0aaf53df : 00000000`00000000 7fffffff`ffffffff 00000000`00000000 00000000`00000000 : Util!CWMI::GetOutPutUIntByString+0x3092 05 00000042`558ff3a0 00007ff6`fa838ff3 : 7fffffff`ffffffff 00000000`00000000 7fffffff`ffffffff 00000000`00000000 : Util!SMBIOSHelper::IsSupportDevice+0x1f 06 00000042`558ff400 00007ff6`fa852223 : 00000000`00000000 00000000`0000000a 00000000`00000000 00000000`00000000 : PCManager!SMBIOSHelper::operator=+0xa93 07 00000042`558ffc20 00007fff`4f6f7bd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : PCManager!Compression::Compression+0x3b93 08 00000042`558ffc60 00007fff`5150ced1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14 09 00000042`558ffc90 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x210:000> g ntdll!NtTerminateProcess+0x14: 00007fff`5153c644 c3 ret咋還出現int3了呢,難道這里就是檢查是不是華為電腦的位置。
使用IDA開始粗略分析,進入int3的位置。一處異常,看不出什么東西。
往上回溯兩層,看到很重要的信息SystemEnvironment::GetSupportMachineList,確實很像是檢查的地方。
對sub_180018D00下斷,查看參數。發現第三個參數指向一個xml配置文件路徑,看名字很明顯是表示支持的機器類型列表。
0:000> db 000001f0`587329b0 000001f0`587329c0 5c bb aa ce aa 5c 50 43-4d 61 6e 61 67 65 72 5f \....\PCManager_ 000001f0`587329d0 53 65 74 75 70 5f 39 2e-31 2e 36 2e 33 33 5c 48 Setup_9.1.6.33\H 000001f0`587329e0 75 61 77 65 69 5c 50 43-4d 61 6e 61 67 65 72 5c uawei\PCManager\ 000001f0`587329f0 5c 63 6f 6e 66 69 67 5c-4d 61 63 68 69 6e 65 54 \config\MachineT 000001f0`58732a00 79 70 65 4c 69 73 74 2e-78 6d 6c 00 ee fe ee ab ypeList.xml.....打開一看,加密了。
那看看附近代碼,應該是先解密,可以把數據dump出來。
通過IDA翻看了一下后面的函數,看到另一個特征rapidxml::parse_error::vftable`,這是用了rapidxml開源庫來解析xml文檔。
把rapidxml的源碼下回來,通過對比(一些log字符特征)來確認函數的功能。
基本弄清楚xml解密到解析的過程,對sub_180014EA0下斷,查看參數。果然拿到解密后的xml文件。
0:000> dq 000000315e6feb48 00000031`5e6feb48 000001ec`051970b0 00000000`00000000 0:000> db 000001ec`051970b0 000001ec`051970b0 3c 3f 78 6d 6c 20 76 65-72 73 69 6f 6e 3d 22 31 <?xml version="1 000001ec`051970c0 2e 30 22 20 65 6e 63 6f-64 69 6e 67 3d 22 55 54 .0" encoding="UT 000001ec`051970d0 46 2d 38 22 3f 3e 20 0d-0a 3c 6d 61 63 68 69 6e F-8"?> ..<machin 000001ec`051970e0 65 54 79 70 65 6c 69 73-74 3e 20 0d 0a 09 3c 6d eTypelist> ...<mxml數據長這樣。
看到這里,其實已經有一個思路了,就是把自己電腦的品牌加入xml文件,重新加密回去,就能夠就能夠使用華為電腦管家了。
不過分析解密、拿品牌信息、加密等挺麻煩的,再看看還有方法嗎?
比如直接patch比較品牌的函數,繞過檢查。
繼續分析,一堆xml的node的解析比較,因為華為在編譯rapidxml時基本都是內聯函數,導致跟源碼結構并不是很一致,增加了分析難度。
經過一段數據的比較,還沒有找到繞過的點。
我停了下來,看了看調用棧。
0:000> kv# Child-SP RetAddr : Args to Child : Call Site 00 00000031`5e6fea20 00007fff`11184879 : 00000000`00000006 00000000`00000006 00000031`5e6feea4 00000031`5e6feee9 : Util!CWMI::GetOutPutUIntByString+0x4075 01 00000031`5e6fed60 00007fff`11184af2 : 00000000`00000000 00000000`00000000 00000031`5e6fef70 00000000`00000000 : Util!CWMI::GetOutPutUIntByString+0x2e19 02 00000031`5e6fee80 00007fff`111753df : 00000000`00000000 7fffffff`ffffffff 00000000`00000000 00000000`00000000 : Util!CWMI::GetOutPutUIntByString+0x3092 03 00000031`5e6fef50 00007ff7`70a18ff3 : 7fffffff`ffffffff 00000000`00000000 7fffffff`ffffffff 00000000`00000000 : Util!SMBIOSHelper::IsSupportDevice+0x1f 04 00000031`5e6fefb0 00007ff7`70a32223 : 00000000`00000000 00000000`0000000a 00000000`00000000 00000000`00000000 : PCManager!SMBIOSHelper::operator=+0xa93 05 00000031`5e6ff7d0 00007fff`4f6f7bd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : PCManager!Compression::Compression+0x3b93 06 00000031`5e6ff810 00007fff`5150ced1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14 07 00000031`5e6ff840 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21才看到被我忽略的一個很重要的信息Util!SMBIOSHelper::IsSupportDevice,這個函數名太明顯了。
只需要修改這個返回值,基本應該就繞過檢查了。
BOOL8 __fastcall SMBIOSHelper::IsSupportDevice(SMBIOSHelper *this) {return 1; //patch }是的,我好像又掉坑里,浪費了挺多時間。
4
但是前面為什么會出現異常呢,導致我掉進了一個確實是對的但又有點坑的位置呢。
想到xml的路徑,此時我終于反應過來哪個異常可能是什么了。
因為我把軟件放在了中文目錄中,而軟件對中文處理貌似有問題。(我沒有深究了)
D:\華為\PCManager_Setup_9.1.6.33果然,去掉中文目錄后,再沒有上面看到的int3。
所以,這又是個坑。C
本來正常的分析邏輯是這樣的。
0:000> g ntdll!NtTerminateProcess+0x14: 00007fff`5153c644 c3 ret 0:000> kv# Child-SP RetAddr : Args to Child : Call Site 00 00000042`558ffb38 00007fff`5150a9b8 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!NtTerminateProcess+0x14 01 00000042`558ffb40 00007fff`4f6fcd8a : 00000000`00000000 00000000`00000000 00007fff`4ecb9b68 00000000`00000000 : ntdll!RtlExitUserProcess+0xb8 02 00000042`558ffb70 00007fff`4ec1ae38 : 00000000`00000000 00000000`00000000 00000042`558ffbf8 00007fff`4ecebc20 : KERNEL32!ExitProcessImplementation+0xa 03 00000042`558ffba0 00007fff`4ec186ef : 00000000`00000000 00000000`00000000 00000000`00000000 00000042`558ffbf0 : ucrtbase!exit_or_terminate_process+0x44 04 00000042`558ffbd0 00007ff6`fa852235 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000001 : ucrtbase!common_exit+0x6f 05 00000042`558ffc20 00007fff`4f6f7bd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : PCManager!Compression::Compression+0x3ba5 06 00000042`558ffc60 00007fff`5150ced1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14 07 00000042`558ffc90 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21看到exit進程,回溯到調用位置,看看做了什么判斷。
.text:000000014003221E call WinMain .text:0000000140032223 mov ebx, eax .text:0000000140032225 call __scrt_is_managed_app .text:000000014003222A test al, al .text:000000014003222C jnz short loc_140032235 .text:000000014003222E mov ecx, ebx ; Code .text:0000000140032230 call exit .text:0000000140032235 ; --------------------------------------------------------------------------- .text:0000000140032235 .text:0000000140032235 loc_140032235: ; CODE XREF: __scrt_common_main_seh(void)+120↑j .text:0000000140032235 test dil, dil是在WinMain中正常退出的,所以判斷就是在WinMain中。在IDA翻看一下,很容就找到了重要提示。
在往上看,正主來了。
這樣簡單太多了,已經不記得是第幾次被中文路徑坑了,又想用英文系統了。
5
把Util!SMBIOSHelper::IsSupportDevice修正一番,替換原始的utlil.dll,直接運行軟件,在華為的友商電腦中成功啟動。
開始嘗試連接手機。
點擊我的手機->掃碼連接,提示需使用華為瀏覽器掃描。
因為我不是華為手機,所以是不是下載一個華為瀏覽器就OK了呢。
一番搜索,在華為市場找到了華為瀏覽器的app。
興致勃勃地裝到了我的小米手機上,嗯,友商之間很友好,并沒有出現什么異常情況。
打開瀏覽器,點開二維碼掃描,掃描軟件管家二維碼,提示需要安裝華為移動服務,ok,安裝。
安裝完成之后,啥也沒提示,就光禿禿一個網頁頁面,電腦助手。
懵逼中,再次掃描,同樣地情況。
腦筋一轉,把鏈接復制發到了電腦,瀏覽器打開,看到了下載按鈕。
第三個app了,繼續把華為電腦助手安卓版裝入了小米,瞬間感覺MIUI好像被華為全家桶強X了一下ε(┬┬﹏┬┬)3。
重新掃描,這次果然不一樣了,瀏覽器跳轉到了助手頁面,提示配對。
這中間又出現了n多問題
(懷疑藍牙服務不正常、二維碼生成不正常、電腦管家是否對手機校驗、分析是否還有check…)
不想細說了,反正經過一番折騰,終于手機和電腦連上了。
但是這也沒有多屏協同啊,就一個手機助手啊。
難道我哪里又弄錯了?
去搜了搜多屏協同的帖子,算是找到了問題。
TMD,原來下載的軟件版本低了,而我還眼瞎地沒看到上面的下載列表的10.0.2.59版本。
真是被自己蠢哭了。
下載最新版,重新修正了util.dll,這次連上果然不一樣了。
但是,最終還是沒能用上多屏協同,盡管我已經安裝了3個華為的app,但就是手機不支持(EMUI系統功能)。
看到這些條件,我真是感到心累,“這是對沖動最好的懲罰”。
6
是的,雖然折騰了這么久,最后也沒用上這個牛逼的功能,但是我很充實(哭)。
因為我為其他擁有華為手機但沒有華為電腦然后想體驗華為多屏協同功能的大伙做出了我的貢獻。
我滿足了。
哎,卑微的我去咸魚看看二手的華為手機,或者去問問華為EMUI適配不適配友商的手機了。
或者哪位大佬有換代的華為手機郵我一個,地址是:XXXX。
哎,曾經的我沒錢買華為,現在的我依然沒錢買華為。
申明:雖然華為手機副總裁已經說過不反對破解,但這里還是鄭重申明,文章僅僅是做技術研究,如侵刪,謝謝。
最后,小聲地說,如果想體驗的朋友,請到https://github.com/anhkgg/Huawei_PCManager_NB下載試用,務必閱后即焚。
文件較大,也可以公眾號后臺回復:HuaweiNB獲取網盤鏈接。
如果覺得內容還不錯,歡迎關注公眾號:漢客兒。
交流群:753894145
總結
以上是生活随笔為你收集整理的华为电脑管家PcManager多屏协同功能破解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vim安装插件在命令行下看代码
- 下一篇: 你知道char *s和char s[]的