華為電腦管家PcManager多屏協(xié)同功能破解(支持美版Matebook)

讓友商電腦兼容了一下華為系專屬的多屏協(xié)同功能

筆者注:文中出現(xiàn)的大寫C,請輕聲念出北京大爺?shù)目陬^禪。

更新:目前可以完美支持美版華為電腦使用Huawei Share、一碰傳等。

目前已經(jīng)更新支持最新版10.1多屏協(xié)同2.0(不用改bios),請關(guān)注公眾號:漢客兒,回復(fù)hw2獲取。

華為剛發(fā)布多屏協(xié)同功能的時候,我就被種草了。

后來一天在微博看到@Navis-MDT發(fā)布的一個體驗(yàn)視頻,果然碉堡了。

華為多頻協(xié)同體驗(yàn)視頻

瞬間有點(diǎn)想從“米boy”轉(zhuǎn)為“花粉”用戶,這...當(dāng)然是不可能的了。

翻看微博回復(fù),看到華為手機(jī)副總裁@李小龍Bruce_Lee也轉(zhuǎn)發(fā)了該視頻,并回復(fù)網(wǎng)友“為啥不面向非華為電腦”說:“不是故意不做其他品牌的電腦,是電腦上WIFI/藍(lán)牙硬件和驅(qū)動太亂了,我們沒精力搞定兼容性問題。大神們想破解我們也不會攔著?!?/p>

0.jpg

對啊,怎么忘了自己也是“大神”?。ㄐ邼瓇~)。

既然主人家都不反對,那我?guī)退麄兗嫒菀幌?,腦子開始發(fā)熱,迅速準(zhǔn)備搞一搞。

是的,腦子非常熱,導(dǎo)致前期資訊準(zhǔn)備不足,后面踩了很多坑。

下面且聽我一一道來。

1

視頻中提到華為電腦中需要使用“電腦管家”(視頻中沒看清界面),然后手機(jī)掃描連接即可。

聽到“電腦管家”第一反應(yīng)就是華為多屏協(xié)同怎么還跟騰訊合作?懵逼,騰訊NB。

后來一想不對,應(yīng)該是華為自己的軟件“電腦管家”,類似于小米筆記本上的“小米游戲盒子”之類的軟件。

沒有華為電腦,先去搜搜看是否能下載到軟件。

1.png

果然有,華為官網(wǎng)很友好的給出了操作提示,果然是為客戶著想的好公司。

2.png

版本挺多,下一個最新的。然后我選擇了9.1.6.33,因?yàn)槲铱吹饺掌谑?code>2019-11-01。(請仔細(xì)看圖,并記住這里)

3.png

2

OK,軟件下回來了,接著就開始干正事了。

習(xí)慣性地把軟件拉入了虛擬機(jī)運(yùn)行,結(jié)果雙擊后沒反應(yīng),以為是鼠標(biāo)出問題或者虛擬機(jī)太卡,連續(xù)試了好幾次依然沒反應(yīng)。

一瞬間,腦子里翻江倒海,難道華為加了反虛擬機(jī)、反調(diào)試、反...C

直接上windbg吧,一運(yùn)行,直接退出,才發(fā)現(xiàn)是烏龍。

因?yàn)檫@兩天在測試DLL劫持,留了個DLL在桌面,華為的“電腦管家”很不幸中槍了,被劫持,然后直接退出。(劃重點(diǎn))

刪掉DLL,終于有了反應(yīng),但是...提示只支持64位系統(tǒng),而我用的是Win7 x86...C

4.png

換唄,還能咋辦,切到Win7 x64虛擬機(jī),問題又來了。

5.png

好吧,我錯了,我直接本機(jī)win10安裝吧,一分鐘不到,終于裝好了。

6.png

但是從下載到裝好時間已經(jīng)過去了30分鐘,都是自己作的。

3

點(diǎn)擊立即體驗(yàn),看看界面長啥樣。

結(jié)果又退出了,退出了...出了...了

咋回事?難道是直接驗(yàn)證到不是華為電腦,直接退出?

繼續(xù)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+0x21

0:000> g
ntdll!NtTerminateProcess+0x14:
00007fff`5153c644 c3              ret

咋還出現(xiàn)int3了呢,難道這里就是檢查是不是華為電腦的位置。

使用IDA開始粗略分析,進(jìn)入int3的位置。一處異常,看不出什么東西。

7.png

往上回溯兩層,看到很重要的信息SystemEnvironment::GetSupportMachineList,確實(shí)很像是檢查的地方。

8.png

sub_180018D00下斷,查看參數(shù)。發(fā)現(xiàn)第三個參數(shù)指向一個xml配置文件路徑,看名字很明顯是表示支持的機(jī)器類型列表。

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.....

打開一看,加密了。

9.png

那看看附近代碼,應(yīng)該是先解密,可以把數(shù)據(jù)dump出來。

通過IDA翻看了一下后面的函數(shù),看到另一個特征rapidxml::parse_error::vftable`,這是用了rapidxml開源庫來解析xml文檔。

把rapidxml的源碼下回來,通過對比(一些log字符特征)來確認(rèn)函數(shù)的功能。

10.png

基本弄清楚xml解密到解析的過程,對sub_180014EA0下斷,查看參數(shù)。果然拿到解密后的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> ...<m

xml數(shù)據(jù)長這樣。

11.png

看到這里,其實(shí)已經(jīng)有一個思路了,就是把自己電腦的品牌加入xml文件,重新加密回去,就能夠就能夠使用華為電腦管家了。

不過分析解密、拿品牌信息、加密等挺麻煩的,再看看還有方法嗎?

比如直接patch比較品牌的函數(shù),繞過檢查。

繼續(xù)分析,一堆xml的node的解析比較,因?yàn)槿A為在編譯rapidxml時基本都是內(nèi)聯(lián)函數(shù),導(dǎo)致跟源碼結(jié)構(gòu)并不是很一致,增加了分析難度。

經(jīng)過一段數(shù)據(jù)的比較,還沒有找到繞過的點(diǎn)。

我停了下來,看了看調(diào)用棧。

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,這個函數(shù)名太明顯了。

只需要修改這個返回值,基本應(yīng)該就繞過檢查了。

BOOL8 __fastcall SMBIOSHelper::IsSupportDevice(SMBIOSHelper *this)
{
 return 1; //patch
}

是的,我好像又掉坑里,浪費(fèi)了挺多時間。

4

但是前面為什么會出現(xiàn)異常呢,導(dǎo)致我掉進(jìn)了一個確實(shí)是對的但又有點(diǎn)坑的位置呢。

想到xml的路徑,此時我終于反應(yīng)過來哪個異??赡苁鞘裁戳?。

因?yàn)槲野衍浖旁诹酥形哪夸浿校浖χ形奶幚砻菜朴袉栴}。(我沒有深究了)

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進(jìn)程,回溯到調(diào)用位置,看看做了什么判斷。

.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翻看一下,很容就找到了重要提示。

12.png

在往上看,正主來了。

13.png

這樣簡單太多了,已經(jīng)不記得是第幾次被中文路徑坑了,又想用英文系統(tǒng)了。

5

Util!SMBIOSHelper::IsSupportDevice修正一番,替換原始的utlil.dll,直接運(yùn)行軟件,在華為的友商電腦中成功啟動。

14.png

開始嘗試連接手機(jī)。

點(diǎn)擊我的手機(jī)->掃碼連接,提示需使用華為瀏覽器掃描。

因?yàn)槲也皇侨A為手機(jī),所以是不是下載一個華為瀏覽器就OK了呢。

一番搜索,在華為市場找到了華為瀏覽器的app。

15.png

興致勃勃地裝到了我的小米手機(jī)上,嗯,友商之間很友好,并沒有出現(xiàn)什么異常情況。

打開瀏覽器,點(diǎn)開二維碼掃描,掃描軟件管家二維碼,提示需要安裝華為移動服務(wù),ok,安裝。

16.jpg

安裝完成之后,啥也沒提示,就光禿禿一個網(wǎng)頁頁面,電腦助手。

懵逼中,再次掃描,同樣地情況。

腦筋一轉(zhuǎn),把鏈接復(fù)制發(fā)到了電腦,瀏覽器打開,看到了下載按鈕。

17.png

第三個app了,繼續(xù)把華為電腦助手安卓版裝入了小米,瞬間感覺MIUI好像被華為全家桶強(qiáng)X了一下ε(┬┬﹏┬┬)3。

重新掃描,這次果然不一樣了,瀏覽器跳轉(zhuǎn)到了助手頁面,提示配對。

這中間又出現(xiàn)了n多問題

(懷疑藍(lán)牙服務(wù)不正常、二維碼生成不正常、電腦管家是否對手機(jī)校驗(yàn)、分析是否還有check...)

不想細(xì)說了,反正經(jīng)過一番折騰,終于手機(jī)和電腦連上了。

18.png

但是這也沒有多屏協(xié)同啊,就一個手機(jī)助手啊。

難道我哪里又弄錯了?

去搜了搜多屏協(xié)同的帖子,算是找到了問題。

19.png

TMD,原來下載的軟件版本低了,而我還眼瞎地沒看到上面的下載列表的10.0.2.59版本。

真是被自己蠢哭了。

下載最新版,重新修正了util.dll,這次連上果然不一樣了。

20.png

但是,最終還是沒能用上多屏協(xié)同,盡管我已經(jīng)安裝了3個華為的app,但就是手機(jī)不支持(EMUI系統(tǒng)功能)。

21.png

看到這些條件,我真是感到心累,“這是對沖動最好的懲罰”。

6

是的,雖然折騰了這么久,最后也沒用上這個牛逼的功能,但是我很充實(shí)(哭)。

因?yàn)槲覟槠渌麚碛腥A為手機(jī)但沒有華為電腦然后想體驗(yàn)華為多屏協(xié)同功能的大伙做出了我的貢獻(xiàn)。

我滿足了。

哎,卑微的我去咸魚看看二手的華為手機(jī),或者去問問華為EMUI適配不適配友商的手機(jī)了。

或者哪位大佬有換代的華為手機(jī)郵我一個,地址是:XXXX。

哎,曾經(jīng)的我沒錢買華為,現(xiàn)在的我依然沒錢買華為。

申明:雖然華為手機(jī)副總裁已經(jīng)說過不反對破解,但這里還是鄭重申明,文章僅僅是做技術(shù)研究,如侵刪,謝謝。

最后,小聲地說,如果想體驗(yàn)的朋友,請到https://github.com/anhkgg/Huawei_PCManager_NB下載試用,務(wù)必閱后即焚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容