中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:53
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何添加修改自身密码功能
可打印版本  3,124 / 13
第1楼 chainliq 发表于 2006-11-24 20:28
高级用户 发帖 244 积分 635 来自 广西贵港
如何添加修改自身密码功能
呵呵,前几天用批处理写啦个管理工具,里面设有密码的如下:
set /p pass=请输入密码:
if "%pass%"=="adminzhoulichainliq" goto game
set /a num=%num% + 1
if %num%==3 goto error

请问如何添加一项修改密码功能的代码呀 .
选啦这一项后,能把 adminzhoulichainliq 随意改成自己想要的密码!
呵呵,问题好多哦。。。快成啦个问题大王啦,每天都在发问题。
不过 ,偶太想学习啦,没办法呀,哪个叫偶那么稀饭搞这个东东呢!~!
请各位多多指教,谢谢!
第2楼 youxi01 发表于 2006-11-24 22:11
高级用户 发帖 247 积分 846 来自 湖南==》广东
最简单的办法是从文件或注册表中读取密码。
第3楼 chainliq 发表于 2006-11-30 19:12
高级用户 发帖 244 积分 635 来自 广西贵港
呵呵,都放啦那么久啦,请问哪位知道呀,讨教讨教!
第4楼 redtek 发表于 2006-12-01 09:11
金牌会员 发帖 1,147 积分 2,902
chainliq兄的 “如何添加修改自身密码功能” 可以实现,但没有见到兄完整的批处理代码,所以无法精确定位用代码再次修改代码自身。

全自动寻找并使用代码修改代码自身中的密码设置一项到是可以完成,但复杂一些,也没什么意义~:)

帮兄做了一个简单的更改密码的测试,使用代码修改自身的密码项中的密码来完成:)

(注: 下面代码是基本模型)


(注:此功能的实现要求批处理名字不得含有空格--与Debug有关)
(  批处理的名字请填在set filename=)




(注: 直接copy上面的代码有可能会出现无法精确定位。)
(   如果出现上面问题,那是因为用Debug实现了精确定位,即16进制的位置不能误差一个字节)

(   所以,可以直接下载附件测试)

(这是做的一个好玩的代码,如果兄没这样好玩的问题我也不会想到要这么干,非常感谢~~)

附件
run.rar (1000 bytes)
第5楼 redtek 发表于 2006-12-01 09:13
金牌会员 发帖 1,147 积分 2,902
echo exit|cmd/k prompt n %filename%$_l$_e %debug% "%p%"$_w$_q$_|debug >nul

请将原代码中修改为最后一项加入 >nul 操作信息显示在屏幕上。
不过后面会遇到切换代码页时系统也会自动清屏~:)
第6楼 chainliq 发表于 2006-12-01 17:18
高级用户 发帖 244 积分 635 来自 广西贵港
那请问如何套用到这段下呀!
set /p pass=请输入密码:
if "%pass%"=="adminzhoulichainliq" goto game
set /a num=%num% + 1
if %num%==3 goto error
第7楼 redtek 发表于 2006-12-01 21:43
金牌会员 发帖 1,147 积分 2,902


[ Last edited by redtek on 2006-12-1 at 08:45 AM ]
第8楼 ccwan 发表于 2006-12-01 21:55
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
redtek兄的密码不能低于6位,是吧?
第9楼 redtek 发表于 2006-12-01 22:02
金牌会员 发帖 1,147 积分 2,902
4楼测试代码是固定了6位~:)

但在实际代码中,密码是可变长度的,于是下面方法可以达到可变长度:)



注:在上面 set 后的赋值是放在引号中的,而且 my12345678 的引号后面还有空格
  空格是占位符,有多少个空格,密码长度就有多少个现在密码长度+空格原长度

  在16进制看来,那后面的空格就是 20 20 20 ....再长的密码长度无非是覆盖了那些空格,所以代码不会被覆盖掉。


做个实验:










如果不设计出那些多余的空格出来,则象下面这样就会发生:
pass=123789(而在Debug中16进制显示,123789的16进制后面是0D 0A就是回车换行符)
这个回车换行符会带来密码可变长度的最大实行障碍。
有了多余的空格,Debug才可以精确写密码,只要计算出要写的起始地址就行了,顶多后面再怎么写也是覆盖掉空格,然后再写个引号保持一致:)

根据上面三个实验原理,在Debug中精确定位就可以使用 “多余” 的空格做为“占位” 符~:)

[ Last edited by redtek on 2006-12-1 at 09:21 AM ]
第10楼 namejm 发表于 2006-12-02 02:42
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  可以考虑把新密码保存在注册表中,然后从注册表读取新密码。以下是一段演示代码:
第11楼 redtek 发表于 2006-12-02 03:11
金牌会员 发帖 1,147 积分 2,902
欣赏~~
写注册表真是方便~:)
第12楼 chainliq 发表于 2006-12-03 06:43
高级用户 发帖 244 积分 635 来自 广西贵港
呵呵,不是我想要的结果,斑竹辛苦啦!
第13楼 vlq5299 发表于 2006-12-05 02:27
初级用户 发帖 59 积分 136
Originally posted by namejm at 2006-12-2 02:42:
  可以考虑把新密码保存在注册表中,然后从注册表读取新密码。以下是一段演示代码:
第14楼 tian88yuan 发表于 2010-05-29 11:30
新手上路 发帖 6 积分 9
看看 学习了
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023