首页
社区
课程
招聘
[原创]win10_64 默认应用的UserChoice Hash算法学习
发表于: 2019-8-9 11:25 39538

[原创]win10_64 默认应用的UserChoice Hash算法学习

2019-8-9 11:25
39538

目标:利用注册表设置指定文件类型的默认应用程序

环境:win10 64位,win7 32位 sp1,xp 32位 sp3


一,项目准备

做任何项目,先查询资料,博客。避免重复造轮子,感谢这些博主

1,如何通过注册表修改默认程序

3bfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3u0S2K9h3c8#2i4K6g2X3x3K6p5@1z5e0t1#2x3e0q4Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0R3K6y4e0M7K6x3o6j5I4

2,如何绕过Win8、Win10的systemsetting与注册表校验设置默认浏览器

7b3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2X3M7X3g2W2j5Y4g2X3i4K6u0W2j5$3!0E0i4K6u0r3j5i4u0@1K9h3y4D9k6i4y4Q4x3V1k6K6P5i4y4@1k6h3#2Q4x3V1j5I4x3K6l9J5z5o6S2Q4x3X3g2Z5N6r3#2D9


二,上手实践

经过查资料和自己动手尝试,发现win7和xp,只要修改注册表中的这几项值就可以了。

以将7z文件的默认程序设置为x压为例:

1,HKEY_CLASSES_ROOT\.7z 的值设置为 KuaiZip.7z(此为Progid,可以为任意字符串,只要保持前后一致就行)

ShellNew可以不用管。



2,HKEY_CLASSES_ROOT目录下新建项 KuaiZip.7z(ProcId),并按 shell\open\command 

设置值为 默认程序的完整路径 + "%1"



3,设置文件右键关联程序

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.7z

目录下这么设置就行



ProgId



xp和win7只要设置ProgId的值就可以了。

而UserChoice下的Hash是win10特有的校验值,win10经常弹出的默认程序出错就是这里的Hash出了问题。




三,Hash算法

1, 尝试逆向windows的设置进程[SystemSettings.exe],发现可以在注册表修改处下断,然后定位到算法模块 shell32.dll 内部.

但是查询资料时了解到,不同的win10版本环境下的Hash算法不同,考虑到代码的兼容性和稳定性.

思路转换:

测试发现:在xx浏览器在设为默认浏览器时会修改Hash值,因此内部肯定有完整的Hash算法(而xx浏览器内部肯定会保证兼容性)



2,xx浏览器会以高权限(弹出UAC窗口),参数为 --make-default-browser 的方式再启动自身进程。



3,查看设置hash的调用栈,发现是模块setdefbrowser.dll模块内调用kernelbase!RegSetValueExW以设置注册表数据的。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-8-9 11:28 被DlyWtF700编辑 ,原因:
收藏
免费 8
支持
分享
最新回复 (16)
雪    币: 1726
活跃值: (744)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2

隐藏的逆向大佬!
图片描述

2019-8-9 11:33
0
雪    币: 30
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
优秀啊
2019-8-9 11:39
0
雪    币: 5621
活跃值: (1541)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
4
大佬666
2019-8-9 12:17
0
雪    币: 500
活跃值: (3810)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
2019-8-9 13:40
0
雪    币: 409
活跃值: (533)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
6
提点建议:
    其中   时间戳和盐  是只有win10下才有的,而win8下是没有 时间戳和盐的。所以:以上代码的兼容性上还得处理下,需要判断是否为win10.其他正确。
2019-8-9 16:10
0
雪    币: 364
活跃值: (10653)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
7
还有360极速跟360安全用的设置默认都是一样的模块.. win10下会有自己算hash. QQ浏览器用的Com接口 还有Com接口在win10下不支持的情况.最根本的原因是看看自己注册表有没有设置对.Com接口设置的时候回根据取注册表值来进行算hash设置. 如果你设置对了.com接口直接设置即可.可以跳过弹框. 
2019-8-9 17:30
0
雪    币: 381
活跃值: (165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
mlgbwoai 提点建议: 其中 时间戳和盐 是只有win10下才有的,而win8下是没有 时间戳和盐的。所以:以上代码的兼容性上还得处理下,需要判断是否为win10.其他正确。
感谢建议,因为产品主要兼容xp,win7,win10.而win8用户实在稀有,就没去研究win8环境了
2019-8-9 17:38
0
雪    币: 381
活跃值: (165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
张新琪 还有360极速跟360安全用的设置默认都是一样的模块.. win10下会有自己算hash. QQ浏览器用的Com接口 还有Com接口在win10下不支持的情况.最根本的原因是看看自己注册表有没有设置对 ...
是的,同一个模块...只要校验值对了的确可以绕过弹框,com接口比较麻烦,还是自己计算来的快速稳定
2019-8-9 17:41
0
雪    币: 12
活跃值: (438)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
张新琪 还有360极速跟360安全用的设置默认都是一样的模块.. win10下会有自己算hash. QQ浏览器用的Com接口 还有Com接口在win10下不支持的情况.最根本的原因是看看自己注册表有没有设置对 ...
what?..之前是发现某个版本后那个com的不行了..然后就自己算
2019-8-13 15:32
0
雪    币: 12
活跃值: (438)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
DlyWtF700 是的,同一个模块...只要校验值对了的确可以绕过弹框,com接口比较麻烦,还是自己计算来的快速稳定
嗯,,其实最核心的就是微软的那2个cs64算法了..
2019-8-13 15:33
0
雪    币: 364
活跃值: (10653)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
12
MaMy what?..之前是发现某个版本后那个com的不行了..然后就自己算
NONO 我只是浏览器设置不成功.找BUG.然后分析了一下. 以前的没看.
2019-8-13 17:07
0
雪    币: 244
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
囧,刚刚静态分析qq的F1Frame.dll,既然在这看到相识的代码
时间问题的答案:RegQueryInfoKeyA(phkResult, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, &ftLastWriteTime);注册表有获取某个键值最后写入时间的函数
最后于 2019-8-23 14:48 被airbus编辑 ,原因:
2019-8-21 18:31
0
雪    币: 381
活跃值: (165)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
airbus 囧,刚刚静态分析qq的F1Frame.dll,既然在这看到相识的代码时间问题的答案:RegQueryInfoKeyA(phkResult, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
嗯,这个不错...
2019-8-23 19:57
0
雪    币: 23
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
几年前就逆透这个了, 微软的逻辑都在shell32.dll里面,     “类型(注意这里的类型前面有个".") + sid + ProgId + SystemTime(清零分和秒) + 常量字符串 ” 这个时候来微软对抗而演变的, 开始的win8和早起的win10版本都很简单,都是类似大概 “类型(注意这里的类型前面有个".") + sid + ProgId”。  后来微软不断对抗演变,变顺序,然后加入SystemTime和字符串, 过一段时间就把字符串改一下。 微软win10直接下发更新这个文件补丁。
2019-8-23 20:27
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
能否私信getDigest()这个函数?
2022-8-1 16:16
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17

最后于 2023-3-7 16:38 被ThreadEx编辑 ,原因:
2022-11-2 15:30
0
游客
登录 | 注册 方可回帖
返回