无忧启动论坛

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

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

  [复制链接]
发表于 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的人。。。调查到这个地步搞清楚原理,我们就算完成。。。)


MTP_Patch.png

noel的手机:
hook5sMTP.png

我的Mate10手机:
VirtualBox_MTP_DONE.png

评分

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

查看全部评分

发表于 2018-12-25 15:02:01 | 显示全部楼层
总算搞定了,看上去还是ISO的问题。可能是我破解的BOOTMGR版本低了。
错误8.png

点评

最终确定是BCD的原因,你试试这样操作。 用BOOTICE编辑BCD,然后删掉默认的启动项,新建一个一样的启动项,这样启动之后就不产生那个DAT文件了。  详情 回复 发表于 2018-12-25 18:21
用WimBuilder2从零构建,不同版本(v1709, v1809, x86, x64)每次都成功。所以功能验证还是用原版的东西好,避免误导。  发表于 2018-12-25 17:20
回复

使用道具 举报

 楼主| 发表于 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)

点评

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

使用道具 举报

发表于 2018-12-16 13:06:19 | 显示全部楼层
终于有解决方案了,类目
回复

使用道具 举报

发表于 2018-12-16 14:27:29 | 显示全部楼层
本帖最后由 tools241 于 2019-2-1 09:32 编辑
...但是通过这种方法我们得以验证,PE下无法启动WUDF服务是微软限制。
...
(我和Noel都是不使用PE的人。。。)

由于微软的限制, 利用PE与手机连线显然有难度( 代价不低 ).
所以我特制 Win7x64.VHD (大小仅1G) 来与手机连线, 有兴趣者可参考:
  珍稀资源! Win7x64.VHD(仅1G)可与手机连线/无网路,采Grub4Dos由硬盘/U盘启动/UEFI启动 ==>
  http://bbs.wuyou.net/forum.php?mod=viewthread&tid=411643

注: 经测试在 "正常Win10系统" 与手机连线有时仍会失败, 且Win10x64.VHD不易精简,
     因此我特制 Win7x64.VHD 而不制作 Win10x64.VHD 来与手机连线.

    本人惯用的是10PE, 有兴趣者可参考:
   效率极致!   简/繁 x64/x86 10PE 17763.292, 17134.165, 15063 , x64 18323, 16299 --
                    含IE11+Firefox56+Chrome72+PotPlayer1.7.16291 PE影音上网 ==>
   http://bbs.wuyou.net/forum.php?mod=viewthread&tid=385866

点评

期待有可与手机连线的 10PEx64成品 出现.  发表于 2019-2-1 09:34

评分

参与人数 1无忧币 +1 收起 理由
zhuzjj + 1 期待有可与手机连线的 10PEx64成品 出现.

查看全部评分

回复

使用道具 举报

发表于 2018-12-16 20:14:35 | 显示全部楼层
我只想说


感谢Noel和slore。

等别的大大来弄吧。

回复

使用道具 举报

发表于 2018-12-22 15:07:09 来自手机 | 显示全部楼层
slore 发表于 2018-12-22 14:36
秒数不固定的问题,找了个检查方法试了下,貌似可行,不过我机器600ms后可以了,
花的时间不长,我不确定 ...

收到,有的折腾了。以前一直折腾,就是服务启动不起来,再折腾一次试试
回复

使用道具 举报

发表于 2018-12-22 19:27:50 | 显示全部楼层
wimboot上年提的问题楼主给解决了
otg otg
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-23 07:47:14 来自手机 | 显示全部楼层
slore 发表于 2018-12-23 06:25
成功的是我的hook.dll在Noel的PE下(英文截图)。他的PE源是ADK的winpe.wim而且他改造了非常多的东西,我 ...

老大,能不能方便放一个直接删除MiniNT项的补丁?

点评

只删除不创建?winpeshl.exe等程序会直接退出啊。 后续程序的话,你在PECMD中删除,效果一样。  详情 回复 发表于 2018-12-23 08:58
回复

使用道具 举报

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

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

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

点评

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

使用道具 举报

发表于 2018-12-23 09:23:10 来自手机 | 显示全部楼层
slore 发表于 2018-12-23 08:58
只删除不创建?winpeshl.exe等程序会直接退出啊。

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

后续再删,不是有点晚了么。
pe下很多地方限制都是这个原因,想弄个这样的环境研究一些东西。

点评

是的,比如 远程访问的身份认证的对话框,PE下就是控制台模式,如果识别为非PE,共享访问和远程桌面,是弹出如下界面: [attachimg]383974[/attachimg] [attachimg]383973[/attachimg] 这类程序没保护好像  详情 回复 发表于 2018-12-23 16:52
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-23 10:53:06 来自手机 | 显示全部楼层
本帖最后由 红毛樱木 于 2018-12-23 10:54 编辑
slore 发表于 2018-12-23 10:48
你先用32位测试吧。native cmd有个reg.exe。可以bootexecute下直接删除。wpeutil, winpeshl等会自动退出, ...


wpeutil, winpeshl退出

这个好像不是难点,前面y(手机打字,不记得大神名字了,论坛反编译高手)分析过过程,可以自己用程序实现替代。

现在还没开始折腾你提供的mtp补丁,下周折腾试试,有需求再来骚扰您

点评

你说的是yamingw大神吧?他懂反编译。  详情 回复 发表于 2019-1-2 17:21
回复

使用道具 举报

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

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

VirtualBox_CredUI.png
VirtualBox_CredUI2png.png


wpeutil, winpeshl退出

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

使用道具 举报

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

VirtualBox_MTP_DONE.png

点评

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

使用道具 举报

发表于 2018-12-24 08:15:07 来自手机 | 显示全部楼层
slore 发表于 2018-12-24 00:31
犯了一个低级错误,少复制winusb.dll文件到system32了。

你看这样是不是更稳妥些,用你的补丁改注册表,然后补丁不改回注册表。
最后由pecmd接管的时候再改回来,这样是不是就能避免你提到的600ms延时的问题?

点评

最新的补丁是使用服务进程检查,延时的问题应该解决了,在4秒的环境也测试过了。 winlogon启动以后的进程,PECMD能接管的进程不会因为这个项导致蓝屏。重点是先删除让services.exe通过。后面创建只是还原现场,保  详情 回复 发表于 2018-12-24 09:03
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-24 11:05:26 来自手机 | 显示全部楼层
slore 发表于 2018-12-24 09:03
最新的补丁是使用服务进程检查,延时的问题应该解决了,在4秒的环境也测试过了。

winlogon启动以后的 ...

这种方式是不是也可以顺带解决之前的WOW64破解的问题?

点评

老问题翻出来再讨论下嘛  发表于 2018-12-24 12:53
一年前的WIN10PE已经不用WOW64破解了,补充文件就行了。老的版本我不清楚。  发表于 2018-12-24 11:13
回复

使用道具 举报

发表于 2018-12-24 14:20:34 | 显示全部楼层
本帖最后由 红毛樱木 于 2018-12-24 16:03 编辑

又研究了一下之前折腾的win8pe中MTP失败的情况,今天才发现之前注册表有问题,忘记添加注册表中的mtp的class类型了。Win8pe不需要破解补丁

mtp.png


---------------------------------------------------------------------------------
win10pe x86和x64 16299中测试,日志这样显示,最终失败
Device class {eec5ad98-8080-425f-922a-dabf3de3f69a} is not configurable.
回复

使用道具 举报

发表于 2018-12-24 16:10:53 | 显示全部楼层
win10pe x86和x64 16299中测试,日志这样显示,最终失败
Device class {eec5ad98-8080-425f-922a-dabf3de3f69a} is not configurable.

是不是破解补丁的那个dll没有生效?

点评

是哪个?看不太明白。 [attachimg]384056[/attachimg]  详情 回复 发表于 2018-12-24 16:24
下载WimBuilder2最新版,然后#6的补丁解压到WIN10XPE工程目录,补上winusb*,构建一个看看。  发表于 2018-12-24 16:18
另外我的补丁是针对winre.wim的。如果用boot.wim是少几个文件的。  发表于 2018-12-24 16:17
proexp.exe, CTRL+H查看进程句柄,选择services.exe。如果APCL PORT应该有2个,第二个是UMDF相关。另外设备管理器MTP服务状态码,如果是 初始化失败47?就是DLL没成功。如果是10,是mtp驱动不对。  发表于 2018-12-24 16:16
回复

使用道具 举报

发表于 2018-12-24 16:24:45 | 显示全部楼层
本帖最后由 红毛樱木 于 2018-12-24 16:27 编辑
红毛樱木 发表于 2018-12-24 16:10
win10pe x86和x64 16299中测试,日志这样显示,最终失败
Device class {eec5ad98-8080-425f-922a-dabf3de3 ...


是哪个?看不太明白。
设备管理器的错误码是19
错误.png

错误2.png

点评

X:\Hook.dat 没有产生这个文件。 [attachimg]384063[/attachimg]  详情 回复 发表于 2018-12-24 17:36
如果没有X:\Hook.dat就是Hook.dll的注册表3项没写对。  发表于 2018-12-24 17:28
初始化失败了。ALPC Port只有一个。X:\Hook.dat的进程时间记录发下。  发表于 2018-12-24 17:27
回复

使用道具 举报

发表于 2018-12-24 17:36:49 | 显示全部楼层
红毛樱木 发表于 2018-12-24 16:24
是哪个?看不太明白。
设备管理器的错误码是19

X:\Hook.dat
没有产生这个文件。
错误3.png

点评

总算用wimbuilder生成了,现在的状态是10,应该是成功了,也有dat文件生成。 内容如下  详情 回复 发表于 2018-12-24 22:24
我测试了一次手动把winre.wim里的文件补上也是一样的情况,明天再研究下wimbuilder  详情 回复 发表于 2018-12-24 19:39
wimbuilder下午用了一次没成功,不好意思真的是第一次用。 在win7系统下,挂载的ISO,没反应。是不是只能win10系统下用?  详情 回复 发表于 2018-12-24 19:38
我下了附件用WimBuilder2测试,对v1809(x86,x64)都可以。你的图看着OK,大小看x64的hook也对的。X:\wxsHook.dll有没有中文字符,空格?导出看看。要不就是基础wim的差别,建议你用WimBuilder2+winre.wim再确认  发表于 2018-12-24 18:50
回复

使用道具 举报

发表于 2018-12-24 19:38:21 来自手机 | 显示全部楼层
红毛樱木 发表于 2018-12-24 17:36
X:\Hook.dat
没有产生这个文件。

wimbuilder下午用了一次没成功,不好意思真的是第一次用。
在win7系统下,挂载的ISO,没反应。是不是只能win10系统下用?

点评

给我说了下,你的install.wim版本,我也试试。  发表于 2018-12-24 20:29
你选择的是install.wim而不是 windows光盘的话,生成的ISO不能启动。_ISO_中的boot是空的,复制ISO模板到_ISO_,或者把_ISO_\sources\boot.wim拿出来。  发表于 2018-12-24 20:29
回复

使用道具 举报

发表于 2018-12-24 19:39:23 来自手机 | 显示全部楼层
红毛樱木 发表于 2018-12-24 17:36
X:\Hook.dat
没有产生这个文件。

我测试了一次手动把winre.wim里的文件补上也是一样的情况,明天再研究下wimbuilder
回复

使用道具 举报

发表于 2018-12-24 20:44:30 来自手机 | 显示全部楼层
16299就是1709
回复

使用道具 举报

发表于 2018-12-24 22:24:20 | 显示全部楼层
红毛樱木 发表于 2018-12-24 17:36
X:\Hook.dat
没有产生这个文件。


总算用wimbuilder生成了,现在的状态是10,应该是成功了,也有dat文件生成。
内容如下
错误4.png

点评

硬盘挂了,挂的真是时候,,,明天再试了。导数据  详情 回复 发表于 2018-12-24 23:19
我下载了16299x86(小点),测试可以成功识别我的手机。估计你改动啥了导致Hook.dll加载不起来。  发表于 2018-12-24 23:18
MTP_Support\MTP_DrvSrv\main.bat第18行  发表于 2018-12-24 22:59
添加上winusb*就可以识别了。  发表于 2018-12-24 22:57
回复

使用道具 举报

发表于 2018-12-24 23:19:08 来自手机 | 显示全部楼层
红毛樱木 发表于 2018-12-24 22:24
总算用wimbuilder生成了,现在的状态是10,应该是成功了,也有dat文件生成。
内容如下

硬盘挂了,挂的真是时候,,,明天再试了。导数据
回复

使用道具 举报

发表于 2018-12-24 23:54:51 来自手机 | 显示全部楼层
我用wimbuilder生成的注册表替换掉我的注册表,那个dll还是没加载成功,这个依赖也太奇葩了吧。
不会是需要.net3.5的支持吧?

点评

你有测试WimBuilder2+ winusb* 生成的PE可以识别你的手机么?  发表于 2018-12-25 00:44
winre.wim不带.net组件,这个DLL没有依赖的。 直接在WimBuilder2界面选择你的boot.wim,然后,补丁把所有的钩都去掉,只保留MTP_Support看看可以不。  详情 回复 发表于 2018-12-25 00:42
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2018-12-25 00:47:49 来自手机 | 显示全部楼层
slore 发表于 2018-12-25 00:42
winre.wim不带.net组件,这个DLL没有依赖的。

直接在WimBuilder2准备界面选择你修改过的boot.wim, ...

明天测试看看。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 07:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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