搜索
查看: 836|回复: 3

创建注册表畸形键

[复制链接]

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2017-10-25 01:02:02 | 显示全部楼层 |阅读模式
前几天在win.reg里添加改注册表键的renameKey函数以后,ayumi502 反应含中文时改名后无法访问。
看了一下改的键名看上去是正常的,就是打不开,还可以建个一样名字的,但始终删不掉。

怀疑是把后面看不到的‘\0’写进去了,
微软的文档看了下里面说的是::Ntdll.NtRenameKey这个API的参数要写字节数,试了字节数但是不行,
然后大胆的怀疑一下写这个API的人是不是当时手抖了一下,改成字符数试了一下,然后发现可以了。

奇怪的是如果是这样,他写英文却没有问题,修正了这个问题以后,想到一个利用这个诡异现象的功能,这个键虽然不能打开不能删除,但是却可以通过枚举子键得到名字,如果做软件给用户试用时,在用户第一次启动时用这方法把启动时间写进去,是不是一个好办法?!

有一些软件能在注册表里写上一个键,用户无论怎样都删除不掉,改权限也没有用,看来是用的这个原理。
回复

使用道具 举报

39

主题

174

帖子

1037

积分

荣誉会员

htmlayout.cn 我的学习笔记

Rank: 8Rank: 8

积分
1037
发表于 2017-10-25 13:15:03 | 显示全部楼层
哇哇哇,这个厉害了....
能不能再放个调用示例啊
虽然知道原理但是还是不知道咋写.....
! www.HtmLayout.Cn 我的学习笔记
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
 楼主| 发表于 2017-10-25 15:56:53 | 显示全部楼层
popdes 发表于 2017-10-25 13:15
哇哇哇,这个厉害了....
能不能再放个调用示例啊
虽然知道原理但是还是不知道咋写.....

用我原来的方法是在 win.reg的renameKey函数中把Length的值改为#newName * 2,然后改一个含中文的键名就会这样。可以自己写一个函数。
回复

使用道具 举报

2

主题

32

帖子

385

积分

二级会员

Rank: 3Rank: 3

积分
385
发表于 2017-10-27 21:24:04 | 显示全部楼层
版主太强了!后面我用API MONITOR下断跟踪了一下regedit对这个API的调用,发现他传的确实是字符数,刚想发信息告诉版主的,后面看见版主已经修正好了

后面我发现还有个NtSetValueKey这个API是可以用来替换或者新建一个value。当存在同名的value时,就修改它的值,没有同名时,就创建一个value。折腾了许久没调用成功,想请教下版主,如果想修改value的名称,是不是只能先备份一下数值,然后删除原来的value,再新建一个达成重命名value名称的目的呢?谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-15 18:00 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表