Win10_64 默认应用的UserChoice Hash算法学习

Posted 看雪学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win10_64 默认应用的UserChoice Hash算法学习相关的知识,希望对你有一定的参考价值。

本文为看雪论坛优秀文章

看雪论坛作者ID:DlyWtF700




一、项目准备


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

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

Win10_64 默认应用的UserChoice Hash算法学习


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

Win10_64 默认应用的UserChoice Hash算法学习


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

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionExplorerFileExts.7z

目录下这么设置就行。

Win10_64 默认应用的UserChoice Hash算法学习


ProgId

Win10_64 默认应用的UserChoice Hash算法学习

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

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

Win10_64 默认应用的UserChoice Hash算法学习


三、Hash算法


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

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

思路转换:

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

Win10_64 默认应用的UserChoice Hash算法学习

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

Win10_64 默认应用的UserChoice Hash算法学习

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

Win10_64 默认应用的UserChoice Hash算法学习

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

Win10_64 默认应用的UserChoice Hash算法学习

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

Win10_64 默认应用的UserChoice Hash算法学习

6、下断: bu KERNELBASE!RegSetValueExW。 步过数次后定位到关键数据,往回查找摘要数据来源:

Win10_64 默认应用的UserChoice Hash算法学习

7、定位: 经过数据回溯,逆向分析,定位到加密函数。

Win10_64 默认应用的UserChoice Hash算法学习

8、这里的数据拼接方式为 类型(注意这里的类型前面有个".") + sid + ProgId + SystemTime(清零分和秒) + 常量字符串。

Win10_64 默认应用的UserChoice Hash算法学习

9、发现这里的常量字符串有两个:

Win10_64 默认应用的UserChoice Hash算法学习

10、是根据Shell32.dll的不同版本,拼接不同的字符串。

Win10_64 默认应用的UserChoice Hash算法学习

Win10_64 默认应用的UserChoice Hash算法学习

11、拼接完成数据后,对它进行摘要.算法内部主要逻辑是:
1) 先用标准md5获得16字节摘要;
2) 然后再利用md5的摘要作为key,用自定义的Hash算法摘要原文,得到8字节的数据;
3) 最后用 base64 转化后的数据即为Hash数据。


Win10_64 默认应用的UserChoice Hash算法学习


四、正向算法还原和测试


1、还原Hash算法,实现修改注册表设置默认程序,部分代码如下:

Win10_64 默认应用的UserChoice Hash算法学习

2、测试: win10 环境下将以下文件格式的默认程序修改为记事本,成功! 

Win10_64 默认应用的UserChoice Hash算法学习

3、思考

问题: 数据拼接中用到了系统时间,但又没有保存该时间数据的代码。 那么系统怎么校验该Hash呢?

猜测: 注册表的本质是文件,难道校验时会利用该文件的最后修改时间?


出于某些原因,这里仅提供思路用作技术交流,就不贴出详细代码了~


顺着这个思路,自己花些时间就能把完整算法逆出来~



Win10_64 默认应用的UserChoice Hash算法学习

- End -




Win10_64 默认应用的UserChoice Hash算法学习

看雪ID:DlyWtF700  

https://bbs.pediy.com/user-852140.htm  


*本文由看雪论坛 DlyWtF700 原创,转载请注明来自看雪社区





推荐文章++++

Win10_64 默认应用的UserChoice Hash算法学习