无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 45058|回复: 155
打印 上一主题 下一主题

[原创] WIN10PE连接手机(MTP支持)

  [复制链接]
跳转到指定楼层
1#
发表于 2018-12-16 12:11:35 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 slore 于 2019-1-3 10:03 编辑

背景
手机能上网,下载东西传到电脑的话,不需要网络的维护PE就够了。

所以想解决WIN10PE下无法使用MTP驱动的问题。

再次感谢Noelblanc(原生显示桌面功能开启方法发现者,善于反编译调试爱骑自行车的法国退休老爷爷)

不能启动的原因是,系统启动的时候,services.exe调用InitWudfDriverManager()函数初始化UMDF服务失败。InitWudfDriverManager: Cannot initialize UMDF driver manager in WinPE(骑行旅游了3,4个月没给我消息,上个月回来给了我这条重要的线索).

当HKLM\System\Control\MiniNT存在就失败了。
不知道是PE下功能不全,还是单纯的微软限制,所以进行了验证。


我开始想着把services.exe中的MiniNT字符串改成NiniNT就可以了。结果这个进程是系统保护程序,改动1个字节就蓝屏了。

然后想着离线把MiniNT删除试试,结果发现离线的SYSTEM中不存在此项,应该是启动时初始化的。
尝试用已经不流行(补充:XPE, WIN7PE还有,WIN8之后就没有再用了)的native shell,在进系统前删除该注册表项(native下确认存在MiniNT),
然后还是蓝屏,应该是PE下的其他系统进程服务需要该项存在。

目前是写了个dll注入winlogon.exe在services.exe启动前删除该项,等几秒,再添加该项让winlogon.exe继续启动。这个秒数不固定,但是通过这种方法我们得以验证,PE下无法启动WUDF服务是微软限制。把不固定秒数问题解决,这种“曲线”方式我会发布一个MTP的WimBuilder2用的补丁。(通过进程检测代替等不确定秒数来实现,补丁见#6,如果不行源码也在自己修改等待时间编译测试。)

(2019-01-02)最终最小依赖补丁见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411399

如果使用此dll跳过限制后,要注意,没有WUDFPlatform.dll初始化失败蓝屏,没有
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF注册表,初始化失败蓝屏。
(#6的补丁在MTP_Drv_Srv补充中添加了)


正规的方法估计需要写个ring0级别驱动,可以控制只让services.exe读取不到该项目。
最近没什么空闲时间,就把原因和解除限制方法分享出来,有时间折腾的人来搞吧。

(我和Noel都是不使用PE的人。。。调查到这个地步搞清楚原理,我们就算完成。。。)




noel的手机:


我的Mate10手机:


评分

参与人数 6无忧币 +30 收起 理由
wuxin9712 + 5
1301994096 + 5 手机电脑两用U盘可以互传啊
whyme22 + 5
tools241 + 5 了解微软的限制是最困难的, 其他问题便能迎.
sghihor + 5
freesoft00 + 5

查看全部评分

2#
 楼主| 发表于 2018-12-22 14:36:10 | 显示全部楼层
本帖最后由 slore 于 2018-12-24 13:20 编辑

秒数不固定的问题,通过检测服务进程的方式,解决了,我机器600毫秒后可以了恢复MiniNT项目,
还测试了一个4秒的环境,机器有限,不过从代码来看没有问题。
(附件的Hook.dll是会在X:\写Hook.dat进程日志,如果其他人的环境也OK的话,元旦后我更新一个不写日志的版本。)

做了一个WimBuilder2的 MTP支持 补丁。
另外x64位的话,对未签名驱动有限制,所以顺便也放一个不检查驱动签名的补丁。


MTP_Support.zip (85.73 KB, 下载次数: 369)
Patch_drvinst.zip (49.33 KB, 下载次数: 250)


解压到WimBuilder2的任意工程目录下即可。如果不使用WimBuilder2的话,自己看批处理脚本,非常简单易懂。

犯了一个低级的错误,导致昨天没有成功,System32下面补充winusb.dll就行了。
(补丁包中给INF, System32,Drivers, FileRepository添加文件,就单把System32下给漏了。。。)

点评

收到,有的折腾了。以前一直折腾,就是服务启动不起来,再折腾一次试试  详情 回复 发表于 2018-12-22 15:07
回复

使用道具 举报

3#
 楼主| 发表于 2018-12-23 06:25:42 | 显示全部楼层
本帖最后由 slore 于 2018-12-23 06:36 编辑


成功的是我的hook.dll在Noel的PE下(英文截图)。他的PE源是ADK的winpe.wim而且他改造了非常多的东西,我的环境一直蓝屏,以至于我构建了无数次hook.dll的时间差。因为我用纯winre.wim从0开始构建,少了很多文件,注册表。验证到PE环境下限制解除,直到发现这2个蓝屏的补充,所以才给出 补丁。 剩下应该是补充文件和注册表的问题了。

这就是只靠对比文件差和注册表的方式无法突破的地方。

需要逆向分析,系统的处理流程。反汇编看services.exe, explorer.exe。用windbg.exe(微软出品)动态跟踪调试,在正常系统和PE比较执行顺序上有什么不同。

比程序开发难度要高。也不是一帆风顺,你们看到的只是结果,毕竟是闭源的,有时候真心靠运气发现突破口。WUDF服务相关资料断断续续3,4个月,然而没啥用,多数内容是正常系统下开发框架,使用的文档。偶然有句,该服务由services.exe初始化,然后才去调试它。

点评

老大,能不能方便放一个直接删除MiniNT项的补丁?  详情 回复 发表于 2018-12-23 07:47
回复

使用道具 举报

4#
 楼主| 发表于 2018-12-23 08:58:43 | 显示全部楼层
红毛樱木 发表于 2018-12-23 07:47
老大,能不能方便放一个直接删除MiniNT项的补丁?

只删除不创建?winpeshl.exe等程序会直接退出啊。

后续程序的话,你在PECMD中删除,效果一样。

点评

后续再删,不是有点晚了么。 pe下很多地方限制都是这个原因,想弄个这样的环境研究一些东西。  详情 回复 发表于 2018-12-23 09:23
回复

使用道具 举报

5#
 楼主| 发表于 2018-12-23 10:48:26 | 显示全部楼层
你先用32位测试吧。native cmd有个reg.exe。可以bootexecute下直接删除。wpeutil, winpeshl等会自动退出,用pecmd应该能到跳过。另外winlogon之后的进程没被系统保护,用IFEO劫持到别的命令也行。

dll的话,晚点有时间了再给你编译一个,补丁包也有dllmain.c,自己有VS的话也可以自己编译。

点评

wpeutil, winpeshl退出 这个好像不是难点,前面y(手机打字,不记得大神名字了,论坛反编译高手)分析过过程,可以自己用程序实现替代。  详情 回复 发表于 2018-12-23 10:53
回复

使用道具 举报

6#
 楼主| 发表于 2018-12-23 16:52:38 | 显示全部楼层
红毛樱木 发表于 2018-12-23 09:23
后续再删,不是有点晚了么。
pe下很多地方限制都是这个原因,想弄个这样的环境研究一些东西。

是的,比如 远程访问的身份认证的对话框,PE下就是控制台模式,如果识别为非PE,共享访问和远程桌面,是弹出如下界面:





wpeutil, winpeshl退出

这类程序没保护好像,把程序改成NiniNT,然后注册表添加一个NiniNT键,他们也能通过。。。确实不难。
回复

使用道具 举报

7#
 楼主| 发表于 2018-12-24 00:31:53 | 显示全部楼层
犯了一个低级错误,少复制winusb.dll文件到system32了。

点评

你看这样是不是更稳妥些,用你的补丁改注册表,然后补丁不改回注册表。 最后由pecmd接管的时候再改回来,这样是不是就能避免你提到的600ms延时的问题?  详情 回复 发表于 2018-12-24 08:15
回复

使用道具 举报

8#
 楼主| 发表于 2018-12-24 09:03:10 | 显示全部楼层
红毛樱木 发表于 2018-12-24 08:15
你看这样是不是更稳妥些,用你的补丁改注册表,然后补丁不改回注册表。
最后由pecmd接管的时候再改回来 ...

最新的补丁是使用服务进程检查,延时的问题应该解决了,在4秒的环境也测试过了。

winlogon启动以后的进程,PECMD能接管的进程不会因为这个项导致蓝屏。重点是先删除让services.exe通过。后面创建只是还原现场,保证不使用PECMD的,用winpeshl启动的PE也正常。

点评

这种方式是不是也可以顺带解决之前的WOW64破解的问题?  详情 回复 发表于 2018-12-24 11:05
回复

使用道具 举报

9#
 楼主| 发表于 2018-12-25 00:42:32 | 显示全部楼层
红毛樱木 发表于 2018-12-24 23:54
我用wimbuilder生成的注册表替换掉我的注册表,那个dll还是没加载成功,这个依赖也太奇葩了吧。
不会是需 ...


winre.wim不带.net组件,这个DLL没有依赖的。

直接在WimBuilder2准备界面选择你修改过的boot.wim,然后,补丁界面把所有的钩都去掉,只保留MTP_Support看看可以不。

点评

WimBuilder2准备界面选择你修改过的boot.wim,然后,补丁界面把所有的钩都去掉,只保留MTP_Support 结果无限转圈了,不能进桌面了。。。  详情 回复 发表于 2018-12-25 10:12
明天测试看看。  详情 回复 发表于 2018-12-25 00:47
回复

使用道具 举报

10#
 楼主| 发表于 2018-12-25 11:30:52 | 显示全部楼层
本帖最后由 slore 于 2018-12-25 12:46 编辑

那就是你补充文件漏东西了。建议你用WimBuilder2把winusb*加上,生成一个可以用的wim,然后dir /b /s对比下,文件差分。
rootcat?其实只要一部分,我全加了。你看看你是不是看错了,只补充了client

点评

搞出来这个DAT有点曲折,我昨天手动改的WIM文件其实没有问题,今天换一个ISO外壳就出来这个DAT了,很奇葩很奇葩。  详情 回复 发表于 2018-12-25 11:36
回复

使用道具 举报

11#
 楼主| 发表于 2018-12-25 12:23:10 | 显示全部楼层
本帖最后由 slore 于 2018-12-25 12:35 编辑



稍微集中精力折腾的话,好多遗留问题迎刃而解了。。。
放假休息,年后看情況,闲点儿了再折腾。

点评

厉害了,这个状态居然出来了。  详情 回复 发表于 2018-12-25 12:37
回复

使用道具 举报

12#
 楼主| 发表于 2019-1-13 13:54:33 | 显示全部楼层
红毛樱木 发表于 2019-1-11 15:26
发现一个问题,用了这个补丁之后,好像PE的默认字体变成宋体了,而不是微软雅黑了。不知道为什么。




WimBuilder2对winre.wim 基础上加MMC,然后带MTP支持,和不带MTP支持对比:
显示内容字体没有区别。

如果有变化,应该不是这个补丁影响的。
你看看你还有啥其他修改地方没。

点评

我就把这个dll删掉之后自己就正常了  详情 回复 发表于 2019-1-13 13:57
回复

使用道具 举报

13#
 楼主| 发表于 2019-1-13 14:05:56 | 显示全部楼层
本帖最后由 slore 于 2019-1-13 14:17 编辑



选择 explorer.exe +StartIsBack + MMC + MTP 支持重新构建, 字体也没啥变化。

点评

http://up.usbrun.com/USM1PE8F.WIM 无补丁的, [attachimg]385643[/attachimg] 有补丁的 [attachimg]385642[/attachimg]  详情 回复 发表于 2019-1-13 14:23
回复

使用道具 举报

14#
 楼主| 发表于 2019-1-13 15:00:25 | 显示全部楼层
红毛樱木 发表于 2019-1-13 14:23
http://up.usbrun.com/USM1PE8F.WIM

补丁文件是\windows\wxsHook.dll
  1. D:\Dev\WimBuilder2\Projects\USM>tree /f
  2. 卷 软件 的文件夹 PATH 列表
  3. 卷序列号为 0009-6BF5
  4. D:.
  5.     main.bat
  6.     mtpHelper_x64.dll
  7.     mtpHelper_x86.dll
  8.     USM1PE8F.WIM
复制代码


main.bat
  1. set WB_PE_ARCH=x86
  2. set X_SYS=X:\Windows\System32

  3. rem install mtpHelper hook
  4. echo copy mtpHelper_%WB_PE_ARCH%.dll %X_SYS%\mtpHelper.dll
  5. copy mtpHelper_%WB_PE_ARCH%.dll %X_SYS%\mtpHelper.dll
  6. reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d mtpHelper.dll /f
  7. reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
  8. reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0 /f
复制代码


用WimBuilder2生成新的BOOTPE.ISO结果如图,没有字体问题。

要么是和之前一样你的启动ISO模板的BOOT\BCD有什么区别,要么就是你的“加载外置”的脚本在外置存在的时候,
有地方对字体进行了影响。




点评

你开下测试模式试试  详情 回复 发表于 2019-1-13 17:47
mtpHelper.dll 和 wxsHook.dll是一个文件,只是改名了。  发表于 2019-1-13 15:00
回复

使用道具 举报

15#
 楼主| 发表于 2019-1-13 18:49:54 | 显示全部楼层
红毛樱木 发表于 2019-1-13 18:21
用原版ISO直接套上BOOT.WIM启动
一个带补丁 一个不带补丁,对比很直观。

17763.165.181109-1706.RS5_RELEASE_SVC_PROD3_CLIENTPRO_OEMRET_X86FRE_ZH-CN.ISO
boot.wim的第二卷[Setup],只应用MTP支持补丁,没有其他的。






启动如图所示:


可以看到 cmd的标题: [管理员: ]

[无标题 - 记事本]

都是正常的字体。

你最好把其他的添加都去掉了,只添加这个补丁来测试,避免干扰。

(X:\hook.dat存在,所以补丁生效的。)

点评

实在搞不懂为什么,研究了一下还是没找到关键所在。 只有一个明显的区别,你那边没有DWM,我这里有DWM。不知道是不是这个影响  详情 回复 发表于 2019-1-13 20:12
回复

使用道具 举报

16#
 楼主| 发表于 2019-1-13 20:46:17 | 显示全部楼层

mtpHelper_sec.zip (79.91 KB, 下载次数: 36)

附件是把dllmain.c改成30秒的编译版本,没有进程监控,没有日志。

如果要其他秒数,UltraEdit或者其他Hex编辑器,搜索:30 75 00 00修改。

30秒=30000毫秒 = 0x00007530。

比如要改成等1分钟, => 60000毫秒 = 0x0000EA60

30 75 00 00
改为
60 EA 00 00

点评

能不能搞一个补丁,只删注册表不恢复的补丁?而且带日志的。 方便分析研究一些问题  详情 回复 发表于 2019-1-25 12:20
回复

使用道具 举报

17#
 楼主| 发表于 2019-1-13 21:58:24 | 显示全部楼层

换了30秒的,我这里出现了你的情况。开始菜单的 ,搜索栏 明显字体不对。

不过把你USM1PE8F.WIM直接打包,啥也不改也正常。

估计你推测的是对的,影响services.exe启动的子程序fontdrvhost.exe。
winlogon.exe的子程序fontdrvhost.exe不会受到影响。

不过在fontdrvhost.exe中不存在MiniNT字符串,那就是services.exe做了什么其他事情?

关于 记事本 字体 是 “宋体”应该是你的注册表设置有关系,窗口标题,开始菜单都显示正常字体,
或者禁用了AppInitDLL,删除wxsHook.dll,结果 记事本 也是 "宋体"。

我先试试用30秒的,在原版boot.wim上是不是也存在相同现象。

点评

两个fontdrvhost.exe进程启动有参数和先后顺序之分吗?自己启动这两个进程不知道行不行。  详情 回复 发表于 2019-1-14 18:40
好的,那我不折腾了。等你调试代码。 我感觉这个延时可能还不好,毕竟没有抓住重点  详情 回复 发表于 2019-1-13 22:11
回复

使用道具 举报

18#
 楼主| 发表于 2019-1-13 22:10:19 | 显示全部楼层
我先试试用30秒的,在原版boot.wim上是不是也存在相同现象。


用了30秒的,标题显示有问题了。记事本内容没有问题,是雅黑。

主要services.exe不能被修改,也不能注入。。。只影响MTP的初始化比较困难。

我的环境用进程检查的dll没出现过,估计还是跟启动速度,时机有关系。

回复

使用道具 举报

19#
 楼主| 发表于 2019-1-14 19:28:59 | 显示全部楼层
顺序的话,从进程日志可以看到是services.exe的先启动,winlogon的是,sleep之后,MiniNT恢复后才启动的。
我环境,日志也有这个进程但是字体正常,应该不单单是启动程序来解决。

点评

这样不知道行不行,mtp组件我是外置的,不知道调用外置mtp组件的时候改这个注册表键值还有没有效?  详情 回复 发表于 2019-1-14 20:09
回复

使用道具 举报

20#
 楼主| 发表于 2019-1-25 00:31:05 | 显示全部楼层
hhh333 发表于 2019-1-24 20:52
把winusb.sys放一个到inf文件夹中就不会找不到了。

rem install mtpHelper hook
copy mtpHelper_%WB_PE_ARCH%.dll %X_SYS%\mtpHelper.dll
reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /d mtpHelper.dll /f
reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
reg add "HKLM\Tmp_Software\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0 /f

rem hook requirement(or BSOD)
call RegCopy "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF"
rem call AddFiles WUDFPlatform.dll MUI

rem ==========update filesystem==========

set AddFiles_Mode=merge

call AddDrivers winusb.inf
call AddDrivers "wpd*.inf,wudf*.inf" FILE

call AddFiles %0 :end_files
goto :end_files
@windows\system32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\
Microsoft-Windows-Client-Desktop-Required-Package*
;Microsoft-Windows-WPD*

@windows\system32\
drivers\UMDF\
+mui
winusb*,wpd*,WUDF*,PortableDevice*
:end_files

call DoAddFiles

rem ==========update registry==========
rem WPD class(Portable Devices)
call RegCopy SYSTEM\ControlSet001\Control\Class\{EEC5AD98-8080-425F-922A-DABF3DE3F69A}

rem add services
call RegCopyEx Services "WINUSB,WPDBusEnum,WpdUpFltr,WudfPf,WUDFRd"

rem winusb.inf (already added by AddDrivers macro, only two items in <1KB)
rem has high cost performance to copy all DriverDatabase items, just 4MB SYSTEM size(608KB compressed)
rem call RegCopy SYSTEM\DriverDatabase

rem explorer Portable device
rem Portable Devices ::{35786D3C-B075-49b9-88DD-029876E11C01}

call RegCopy HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\DelegateFolders
rem [optional]call SharedPatch NewBrowseDlg
rem put mtp_support.bat on Desktop
call X2X
回复

使用道具 举报

21#
 楼主| 发表于 2019-1-25 00:34:42 | 显示全部楼层
hhh333 发表于 2019-1-24 20:52
把winusb.sys放一个到inf文件夹中就不会找不到了。

其实mtp_support.bat直接一句:
drvload X:\Windows\System32\DriverStore\FileRepository\wpdmtp.inf_amd64_79762cfde1a9fe38\wpdmtp.inf
就可以了。

RE:WIN10XPE中更新了。
  1. @echo off
  2. set DrvRepo=%SystemRoot%\System32\DriverStore\FileRepository
  3. call :InstDriver wpdmtp.inf
  4. pause
  5. goto :EOF

  6. :InstDriver
  7. set DrvFolder=
  8. for /f "delims=" %%i in ('dir /b %DrvRepo%\%1_*') do set DrvFolder=%%i
  9. if "x%DrvFolder%"=="x" goto :EOF
  10. drvload %DrvRepo%\%DrvFolder%\%1
复制代码


感觉直接dism /add-driver离线应该也可以。。。驱动我以前没搞过。

点评

之所以要在inf文件夹下放winusb.sys是使用boot.wim或winre.wim中的system造成,在驱动库中没有登记,补充HKEY_LOCAL_MACHINE\pe-sys\DriverDatabase中winusb的相关项就可以到DriverStore中自动去找了。否则会提示找  详情 回复 发表于 2019-1-25 13:14
回复

使用道具 举报

22#
 楼主| 发表于 2019-2-1 16:49:29 | 显示全部楼层
本帖最后由 slore 于 2019-2-1 16:50 编辑
红毛樱木 发表于 2019-2-1 13:32
请教下slore大,新版win10是不是没有native环境了?弄半天没弄出来最小native环境


native环境是有的,32位直接改下注册表启动native.exe就行了。你说最小我就不知道了,我没精简是直接winre.wim修改BootExecute就可以用。
回复

使用道具 举报

23#
 楼主| 发表于 2020-7-8 14:25:18 | 显示全部楼层
HenryNewman 发表于 2020-7-8 13:49
发布的Win10PE(带MTP驱动)文件只能单向传输,请尽快解决文件双向传输问题:
========================== ...

WimBuilder2默认工程加MTP正常双向复制,勾选精简项目,体积可以260MB。
回复

使用道具 举报

24#
 楼主| 发表于 2021-1-30 14:45:55 | 显示全部楼层
gbzx 发表于 2021-1-30 14:34
楼主,我想把自己的pe添加MTP,用最新的WimBuilder2-Full.v2021-01-01制作没有MTP的PE与有MTP的PE进行比较 ...

WimBuilder2会自动补充,dll文件对应的mui,mun文件。


另外,你的注册表内容少的多,不是只加新的文件服务就完了,驱动对应的Drivers的注册表项目,服务的System。Software的dll对应的clsid,appid,interface,explorer下面的设定,你都没加。

MTP_Support/main.bat批处理自己对比补充。

点评

我自用的PE,不知啥原因,用WimBuilder2添加了MTP,能启动,启动完后也能看到添加的文件和注册表,但插上手机,无法看到手机。  详情 回复 发表于 2021-1-30 17:08
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-25 18:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表