本文为看雪论坛优秀文章

看雪论坛作者ID:DlyWtF700

一、项目准备

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

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

做任何项目,先查询资料,博客。避免重复造轮子,感谢这些博主:1、如何通过注册表修改默认程序https://blog.csdn.net/baidu_31492511/article/details/835730612、如何绕过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以设置注册表数据的。4、静态分析:用ida打开xx浏览器安装目录下的setdefbrowser.dll,建议复制副本查看。可以看到导出表中有些关键函数:5、动态调试:以方式启动windbg,然后调试xx浏览器进程,记得加上参数。6、下断:bu KERNELBASE!RegSetValueExW。步过数次后定位到关键数据,往回查找摘要数据来源:7、定位:经过数据回溯,逆向分析,定位到加密函数。8、这里的数据拼接方式为 类型(注意这里的类型前面有个".") + sid + ProgId + SystemTime(清零分和秒) + 常量字符串。9、发现这里的常量字符串有两个:10、是根据Shell32.dll的不同版本,拼接不同的字符串。11、拼接完成数据后,对它进行摘要.算法内部主要逻辑是:1) 先用标准md5获得16字节摘要;2) 然后再利用md5的摘要作为key,用自定义的Hash算法摘要原文,得到8字节的数据;3) 最后用base64转化后的数据即为Hash数据。

四、正向算法还原和测试

1、还原Hash算法,实现修改注册表设置默认程序,部分代码如下:2、测试:win10环境下将以下文件格式的默认程序修改为记事本,成功! 3、思考问题:数据拼接中用到了系统时间,但又没有保存该时间数据的代码。那么系统怎么校验该Hash呢?猜测:注册表的本质是文件,难道校验时会利用该文件的最后修改时间?出于某些原因,这里仅提供思路用作技术交流,就不贴出详细代码了~顺着这个思路,自己花些时间就能把完整算法逆出来~

- End -

看雪ID:DlyWtF700  

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

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

推荐文章++++

* 密码学基础:AES加密算法

* 微型加密算法实现及逆向分析

* iOS LLDB中反反调试分析与实现

* 代码混淆之我见(四)

* Windows Search远程代码执行漏洞简单分析及流量侧检测防御思路

进阶安全圈,不得不读的一本书

hash算法_Win10_64 默认应用的UserChoice Hash算法学习相关推荐

  1. python dict hash算法_2020年3月26日python学习笔记——hash

    什么是哈希? hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列 ...

  2. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...

  3. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  4. 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用

    本篇介绍利用gmssl算法库中的sm3模块来进行hash值的计算. 一 sm3 hash算法的特点: sm3用于计算一个消息的hash值: 几乎无法被逆向,即通过hash值无法推断出原始消息: sm3 ...

  5. mysql 字符串的hash函数_【转载】字符串Hash函数比较

    常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法.这些函数使用位运算使得每一个字符都对最后的函数值产生影响.另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎 ...

  6. mysql hash索引 btree索引_B-Tree索引与Hash索引的比较

    B-Tree索引与Hash索引的比较 理解B-Tree和Hash的数据结构能够帮助我们预测不同存储引擎下的查询性能差异.存储引擎在索引中使用这些数据结构,尤其是MEMORY 同时提供了B-Tree和H ...

  7. HASH和HMAC(1):HASH和HMAC概述

    HASH(哈希)函数是信息安全中一个非常重要的工具,它对一个任意长度的消息m施加运算,返回一个固定长度的HASH值h(m),HASH函数h是公开的,对处理过程不用保密.HASH值又被称为哈希值.杂凑值 ...

  8. ruby hash方法_Ruby中带有示例的Hash.invert方法

    ruby hash方法 Hash.invert方法 (Hash.invert Method) In this article, we will study about Hash.invert Meth ...

  9. ruby hash方法_Ruby中带有示例的Hash.select方法

    ruby hash方法 哈希选择方法 (Hash.select Method) In this article, we will study about Hash.select Method. The ...

  10. ruby hash方法_Ruby中带有示例的Hash.length方法

    ruby hash方法 哈希长度方法 (Hash.length Method) In this article, we will study about Hash.length Method. The ...

最新文章

  1. 关于机房有八台计算出现E盘无法更改盘符的问题
  2. postman指定User-Agent的header无效
  3. 比特币现金诞生一周年,未来发展瞄上了IPFS技术
  4. C#语法浮点型字面量
  5. 系统调优一之内存子系统
  6. script的加载方式与执行
  7. express细节点注意
  8. ubuntu18.10 cosmic更换阿里云的源
  9. 信息学奥赛C++语言:社会实践任务
  10. Vant-UI 表单组件(Field组件):验证表单元素表单提交 - 踩坑篇
  11. 使用控制结构——循环语句——基本循环
  12. exp imp 及参数
  13. 服务器30hz显示器240hz,显示器刷新率上不去,这锅到底让谁背
  14. 15个经典面试问题及回答思路,经典好文
  15. android 平板 不支持apk,平板电脑上怎么无法打开apk文件
  16. java中如何插入表格_Java如何向Word文档中添加表格?
  17. 军工品质32位超低功耗MCU
  18. 七夕节来用python表白吧!爱情病毒浸染你的心!
  19. 手机控制电脑之手机端模拟鼠标滑动处理
  20. url跳转http不携带referer方法

热门文章

  1. 二阶系统响应指标图_二阶系统瞬态响应和稳定性实验报告
  2. BC26接入电信云平台流程
  3. Java 高并发编程详解:多线程与架构设计
  4. 两周搞定计算机专业毕业设计,附源码+论文+答辩
  5. utils 定时器 (一) 多级时间轮
  6. 程序闪退崩溃的几种原因
  7. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第一节课笔记
  8. 《编程珠玑》读解 一
  9. win版mysql下载_MYSQL下载及安装--windows版本
  10. cad字体安装_CAD字体大全下载【软件下载】