[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[转贴] VBS屏蔽命令行密码

http://www.microsoft.com/china/t ... ntscr/scrent09.mspx
  1. Set objPassword = CreateObject("ScriptPW.Password")
  2. WScript.StdOut.Write "Please enter your password:"
  3. strPassword = objPassword.GetPassword()
  4. Wscript.Echo
  5. Wscript.Echo "Your password is: " & strPassword
复制代码

回复 6# 凡凡之呗


    他那个利用了VBSscript自带的密码函数功能。

TOP

回复 1# lxzzr


    是怎么个屏蔽法,还请详细说明一下

TOP

在别的地方见过这么一段,记不清哪里了,好像是cn-dos
整理了一下
  1. : by Herbert Kleebauer
  2. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  3. @echo off
  4. echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
  5. set /p password=Enter password:<nul
  6. for /f "tokens=*" %%i in ('in.com') do set password=%%i
  7. pause
  8. del in.com
  9. echo.
  10. echo The Password is:"%password%"
  11. pause
复制代码
可执行程序是二进制文件
文本文件也是二进制文件
它们本质上没有什么区别
in.com 程序的特殊性在于
所有的代码全部分布于ASCII码表的可显示字符范围中
当然这样的程序不是碰巧得到的
而是人为的构造出来的
其中需要用到许多技巧
比如最常见的中断调用代码int 21(CD 21)
因为不在ASCII可显示字符范围内
所以用到许多压栈、出栈、增减代码来构造
所以它的代码段是动态变化的

这样的代码被叫做 ASCODE
这样的技术被称作 ASCII Assemble
一门即将消失的技术
可想而知,这样的代码构造起来是困难的
在网上流传的ASCODE只有很少量的是人为构造的
因为已经有成熟的技术可以将任何二进制文件转变为ASCODE
这样的过程叫encode
而ASCODE执行的过程需要decode
合称codec
codec 的算法已知的超过4种
比较有名的应该是Herbert Kleebauer的算法
不过它要求原程序必须有org 170H的类似标记
因为前面的文件头被用来存放decode代码
所有的这些信息可以从usenet中查找
当然也可以在google group中找到
访问Herbert Kleebauer的主页也是个不错的主意

Herbert Kleebauer看到的,代码第一行有写。学了这么多年计算机,没想到编程还可以这样,兴奋。

你可以从下面的连接看到Herbert Kleebauer所参与的3000多个帖子,里面有大量的批处理技术讨论和代码,看来他主要活跃于google group。

http://groups.google.com/groups/ ... xUGDBtnv2zlXxVZTWPs

关于这段
  1. echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
复制代码
这个例子中的文件名是加了单引号,这就意味着这是一个外部命令,
也就是说,它是要被执行的。

in.com经过反汇编后,代码如下:
  1. 00000000: 685031                    push 3150
  2. 00000003: 58                        pop ax     ; AX=3150
  3. 00000004: 353030                    xor ax,3030 ; AX=0160
  4. 00000007: 50                        push ax
  5. 00000008: 5B                        pop bx ; BX=0160
  6. 00000009: 50                        push ax
  7. 0000000A: 5A                        pop dx ; DX=0160
  8. 0000000B: 42                        inc dx
  9. 0000000C: 42                        inc dx
  10. 0000000D: 42                        inc dx  ; DX=0163
  11. 0000000E: 666823622323              push 23236223
  12. 00000014: 6658                      pop eax ; EAX=23236223
  13. 00000016: 662D56406024              sub eax,24604056 ; EAX=FEC321CD
  14. 0000001C: 6650                      push eax
  15. 0000001E: 665D                      pop ebp ; EBP=FEC321CD
  16. 00000020: 66332F                    xor ebp,dword ptr [bx] ; EBP=EBP ^ [0160]
  17. 00000023: 66312F                    xor dword ptr [bx],ebp ; [0160]=FEC321CD
  18.                                                              ; +0160 CD
  19.                                                              ; +0161 21
  20.                                                              ; +0162 C3
  21.                                                              ; +0163 FE
  22. 其中+0160 与 +0161中的两个字节CD 21反汇编出来就是int 21h指令
  23. +0162中的C3反汇编出来就是ret指令
  24. 最后那个+163中的FE是DOS输入功能0Ah的参数(前面的DX=0163就是指向了这个FE),
  25. 表示最多允许输入254个字符(包括回车在内)
  26. 00000026: 352B2B                    xor ax,2B2B  ; AX=0AE6,其中0Ah是DOS功能号,
  27.                                                    ; E6没有用处
  28. 00000029: 7535                      jnz 00000060 ; 这里肯定会发生跳转,相当于jmp 160
  29. 0000002B: 78                                     ; 最后的78无用
  30. 0000002C: 0D                                     ; 0D与0A是echo时自动
  31. 0000002D: 0A                                     ; 产生的回车换行符
  32. 程序跳转到160后,就会执行以下指令:
  33. int 21h ; 此时AH=0Ah, DX=0163h, 因此执行DOS的输入功能,
  34.          ; 输入内容自动保存到+165开始的缓冲区中,而for循环会把各个字符逐个读出
  35. ret     ; 程序返回到操作系统,自动结束
  36. 总结一下,这个in.com的作用是通过键盘输入一串字符,长度不超过254个(含回车)。
  37. 这个批处理还是比较巧妙的,它用一串可显示的字符串构造了一个可执行代码,实现了
  38. 键盘输入功能,配合for循环使得在批处理中可以实现不回显输入。
  39. P.S.: 根据分析,这个批处理中的echo语句所包含的一堆乱码里的最后
  40.        那个字符(即>前面++u5x中的x)可以删除不要。也可就是说,
  41.            echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com
  42.        可以改成
  43.            echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>in.com
复制代码

TOP

呵呵 在输入密码的时候防止别人偷看去

TOP

没看懂,也不知道干什么用

TOP

本帖最后由 batman 于 2011-4-22 09:19 编辑

跟一个以前写的,需要用到choice.exe:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
  3. for %%a in (%str%) do set /a n+=1&set ".!n!=%%a"
  4. :lp
  5. for /l %%a in (1,1,9) do (
  6.     cls&set /p=请输入八位由数字和字母组成的密码,请注意大小写:<nul
  7.     if defined pwds set /p=!pwds!<nul
  8.     if %%a neq 9 (
  9.        choice /n /cs /c %str: =%
  10.        set "pwds=!pwds!*"&call,set "pwd=!pwd!%%.!errorlevel!%%"
  11.     )
  12. )
  13. echo,&echo,
  14. if "%pwd%" equ "BatHomes" (
  15.    echo 密码正确
  16.   ) else (
  17.    echo 密码错误
  18. )
  19. pause>nul
复制代码
***共同提高***

TOP

返回列表