hash算法_Win10_64 默认应用的UserChoice Hash算法学习

一、项目准备

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

环境: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可以不用管。

ba08549099ed4edc033589fb86b63bd0.png

2、HKEY_CLASSES_ROOT目录下新建项 KuaiZip.7z(ProcId),并按shellopencommand设置值为 默认程序的完整路径 + "%1"

fedd29bf2eaee468eb4970669142c62b.png

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

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerFileExts.7z

目录下这么设置就行。

784e25237d0d38be9c0ddf40d236ce45.png

ProgId:

29c2839e3a930ec82de398fcac8088dd.png

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

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

c6752a3d4f22d0760579bf4ace225aa5.png

三、Hash算法

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

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

思路转换:

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

c1065e24d8e21575ee5a26737ada66cc.png

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

02ade991e661f5dd59ac2f7e79857d9d.png

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

4cac16a94c0f083a51caed22196d5f14.png

4、静态分析:用ida打开xx浏览器安装目录下的setdefbrowser.dll,建议复制副本查看。可以看到导出表中有些关键函数:

8b428ddef4dc531946d7410575b32bdc.png

5、动态调试:以<管理员权限>方式启动windbg,然后调试xx浏览器进程,记得加上参数。

eb0bab98e48b2e7ddf9aee38eaa75fc6.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值