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

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

2019-8-9 11:25
38667

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

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


一,项目准备

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

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

https://blog.csdn.net/baidu_31492511/article/details/83573061

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

https://www.freebuf.com/articles/system/130288.html


二,上手实践

经过查资料和自己动手尝试,发现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以设置注册表数据的。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

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

2019-8-9 11:33
0
雪    币: 30
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
优秀啊
2019-8-9 11:39
0
雪    币: 5611
活跃值: (1444)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
4
大佬666
2019-8-9 12:17
0
雪    币: 688
活跃值: (3630)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
5
2019-8-9 13:40
0
雪    币: 429
活跃值: (428)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
6
提点建议:
    其中   时间戳和盐  是只有win10下才有的,而win8下是没有 时间戳和盐的。所以:以上代码的兼容性上还得处理下,需要判断是否为win10.其他正确。
2019-8-9 16:10
0
雪    币: 888
活跃值: (9861)
能力值: ( 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
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
张新琪 还有360极速跟360安全用的设置默认都是一样的模块.. win10下会有自己算hash. QQ浏览器用的Com接口 还有Com接口在win10下不支持的情况.最根本的原因是看看自己注册表有没有设置对 ...
what?..之前是发现某个版本后那个com的不行了..然后就自己算
2019-8-13 15:32
0
雪    币: 12
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
DlyWtF700 是的,同一个模块...只要校验值对了的确可以绕过弹框,com接口比较麻烦,还是自己计算来的快速稳定
嗯,,其实最核心的就是微软的那2个cs64算法了..
2019-8-13 15:33
0
雪    币: 888
活跃值: (9861)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
12
MaMy what?..之前是发现某个版本后那个com的不行了..然后就自己算
NONO 我只是浏览器设置不成功.找BUG.然后分析了一下. 以前的没看.
2019-8-13 17:07
0
雪    币: 244
活跃值: (174)
能力值: ( 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
雪    币: 33
活跃值: (50)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//