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

[其他] 讨论:BAT 脚本隐藏密码输入问题!

[复制链接]
发表于 2025-10-5 23:47:02 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-10-6 00:02 编辑

我琢磨了一个基于  扩展ASCII码字符集0x00~0xff 批处理获取函数(http://www.bathome.net/thread-12347-1-1.html) win11下纯批处理实现隐藏密码输入的方式
当然,因为性能问题所以这个很显然不实用,不过思路还是可以研究的,我大体上将原帖的思路延续到了现代的windows版本
由于这个批处理里有不少不可打印字符所以放到链接里供下载

下载1: https://rymc.ltd/batch/pwd-input
下载2: https://pan.baidu.com/s/12EM6s3h5OyihNokxFzhtTQ?pwd=xqek
 楼主| 发表于 2025-10-6 01:23:03 | 显示全部楼层
回复 16# RENaa_FD


    好强大啊!小程序是你自己写的吗?,,,
话说,,,,,,,,,,

  1. echo Writing hex data to: a.cab
  2. set "data=,,,
  3. ,,,,
  4. ,,
  5. for %%i in (%data%) do (
  6.         call :w%%i a.cab
  7. )



  8. echo ^>a.cab
  9. expand -F:a a.cab .\a.exe>nul 2>&1
复制代码
这样的程序解码方式是什么方式手法呢?,,求指路,,,
发表于 2025-10-6 11:22:59 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-10-6 15:59 编辑

回复 17# jiavip
程序是自己用C写的,不过缩小exe体积的技巧还是大量依赖了AI的帮助
批处理的解码方式是我前几天对 http://www.bathome.net/thread-12347-1-1.html 中 "代码页切换法的获取制表符" 的深度挖掘,不过解码的基本框架是我自己写的,我还没完全完成它,在完成后我会单独发个帖聊聊这个,说实话这个实用性一般,主要是研究纯cmd输出任意二进制文件的办法,不及certutil来的方便
本质上是通过技巧使输出0x00-0xFF中的任意字节对应的字符来构建自己想要的二进制文件
目前还有0x20和0x00这两个符号我并没有找到好的直接输出的解决方式

我接下来阐述的内容直接假设你已经完全了解 http://www.bathome.net/thread-12347-1-1.html 且对字符编码有简单了解
我简单阐述下我新的发现,对于帖中 "代码页切换法的获取制表符" 只给出了CP936到CP437的特殊映射
我注意到似乎这是windows内部硬编码的一张表,而windows内部是使用UTF-16作为编码方式的
(补充: AI告诉我这是存于System32下的对应编码的nls/dll文件定义的,可以通过命令reg query "HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage"查询对应代码页所对应的nls/dll文件)
我做了个猜测,代码页之间切换时进行的编码转换都是转换到UTF-16作为中间过程的,所以本质上我们事实上只要关注UTF-16到对应编码的转换
于是我编写程序遍历了整个UTF-16 U+0000-U+FFFF的范围,生成了一张UTF到任意编码中特殊的字符转换表(UTF扩展平面我还没搞明白怎么遍历,等我搞明白后可能还能有新的发现)
那么有什么编码又通用,还能完整覆盖UTF-16呢,那就是UTF-8(CP65001)咯
接着在批处理里使用65001编码写入指定字符并通过一样的技巧输出不可打印或会被特殊处理的字符,你可以在我提供的批处理开头找到具体实现

事实上Windows11比Windows XP开始多了一个更麻烦的情况:
<nul set /p ="xxx" 不再能以 空格 或 等号 或 感叹号(开启变量延迟扩展) 开头,这在实际编码二进制文件中不痛不痒,可以多字节一并写入,但是如果你要实现单字节输入就很麻烦了
好在等号能通过同上技巧写入全角等号解决,感叹号能通过关闭变量延迟扩展,空格(0x20)就比较麻烦了,因为它在表里所有有效的特殊映射也都会被忽略
但也不是没有办法,遍历完整个表后我注意到CP37这个代码页的行为非常奇怪,在这个代码页0x20不是空格
很快注意到这个代码页是完全不兼容ASCII的,也就是说我们能切换到这个代码页输出这个代码页中0x20所对应的字符而不受影响,然后再切换到原来的代码页
由于这个代码页完全不兼容ASCII且没有编辑器支持,我只能用cmd echo+HexEditor编写,它在绝大部分文本编辑器里显示的就完全是乱码,目前我还在研究具体实现细节

我这里提供我在 Windows XP SP3 EN 和我在自己电脑 Windows11 24H2 专业版 上构建的转换表
下载1: https://rymc.ltd/batch/cpmap
下载2: https://pan.baidu.com/s/1spnqtric7X_tlFl4Yh6NfA?pwd=tuit

顺便补充一点,我给出的批处理是一字节一字节的处理的,实际上我们可以把大部分字节合并一块输出,这样应该能极大的解决效率问题,由于合并字节要做很多工作,尤其是0x00和0xFF需要单独输出,需要分段,我暂时还没写完
发表于 2025-10-6 14:26:54 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-12-6 18:51 编辑

顺便提供一下基于certutil的实现还有C程序源码,这个大概有点实用性
  1. @echo off
  2. call :clean

  3. (
  4. echo.TVNDRgAAAABkAwAAAAAAACwAAAAAAAAAAwEBAAEAAABhAAAAPgAAAAEAAxUADgAA
  5. echo.AAAAAAAARVu9piAAYQD1ZH9nHgMADluAgI0AEAHgAABiAFA0AAAPYLt77cq365ls
  6. echo.smiO3uSrOl1BuVWjWN2t3XbXlbbdqnm3nW6zu9i7G8J1O7NeC45F8jL+jBmmcZLU
  7. echo.LpHJENmjBrEiowDxAAARMQCwIgD/h7erBflwcUEaeBFwR4QVwobkkCZAzALZKHRk
  8. echo.VmeKeEIFQQVAAAd4fIzvE99//ffQ/gBAAAAAAACRAhExtsIwLFxv6vb/Ss/9F6UL
  9. echo.G7OANgAbnqAkCbCqMjsZoN000oOHdeGAcUbV86Vg5vBVqBKweo3C7TT1UEJaKXC1
  10. echo.T8IiikX6K6LR76jMiRKhckZQhsYhfiSTKCkAIXOroc7VxiyMzBtrApJHx7v6dsD6
  11. echo.s2iKXg4O7ymqLqN8KnBH4O4xb17HKxu8ApIugXX0gMyKDl08e0lIdhYGYpRN6BUW
  12. echo.O9AVAoE8pXopI2z6s3CTVyuxoODrVzmilCBwG3XMrOJBXVj3aO+Z6f7Vjk6ckVAj
  13. echo.SRHSiBo9nxMH2XYrpr2mm5Vus7x9dIht+fy1yfYUv7Nb148AifQiuRVPAXuf64ue
  14. echo.sYlw2Zf6+7PibI9xmEyG6mnQb40+p8X4Xo+shWwPP1s6EOEzJA+NfBUMnU5Rk2qk
  15. echo.E3DG/N/GCAjKjjIFcBK97jCXIbCbC5GJ7+ysgy3wk4Pun2y8lkjWxhZC/2IGlp5J
  16. echo.AeERz773pPdvpFaYKBfdHdVVSTnLLuwiVuasbEi9Q3BFgMzs2Ft8uOx2m5uIcL+s
  17. echo.zV78s2TOexpectvxK85706lRCiInISsTs+E9RJRtxEnq7v8pRAbsuN/afbjyqTE/
  18. echo.yI+zsz+9fkaKWAT+YzWHjhn2lU7XjhSHqDxEBO9JiuENa79wgyBXmPxTOLoBX3Fr
  19. echo.GGm9PTWlOViLUbRtbdu19i7NMUBEGeOX6bT/GTf4bHdG+qgbv55eS4spX2i6BPCg
  20. echo.UWeSgliVl8mgroMVMwC1Jo3CXKyCtYLlf8xk8OgC4nmVgSlLqVr1Ywm7qjh7VVQX
  21. echo.2OYfJUwWWt58cQsqV617BN2BXUJ9IkR6bboIKllYJvv6HbNAs8izSLSokAjTInSi
  22. echo.I10AOg==
  23. )>a.tmp
  24. certutil -decode a.tmp a.cab >nul 2>&1
  25. expand -F:a a.cab .\a.exe >nul 2>&1

  26. <nul set /p="Input password here: "
  27. for /f "delims=" %%v in ('a.exe') do set pwd=%%v
  28. echo You input: %pwd%

  29. call :clean

  30. echo Press any key to exit.
  31. pause >nul 2>&1
  32. goto :eof

  33. :clean
  34. del /f /q a.exe >nul 2>&1
  35. del /f /q a.cab >nul 2>&1
  36. del /f /q a.tmp >nul 2>&1
  37. goto :eof
复制代码
C程序源码(这个是AI改的)
  1. /* pw_minimal_x86.c - minimal x86 with proper entry stub */
  2. typedef unsigned long DWORD;
  3. typedef void* HANDLE;
  4. typedef int BOOL;
  5. typedef void* LPVOID;
  6. typedef const char* LPCSTR;
  7. typedef unsigned int UINT;

  8. /* constants */
  9. #define STD_INPUT_HANDLE  (-10)
  10. #define STD_OUTPUT_HANDLE (-11)
  11. #define STD_ERROR_HANDLE  (-12)
  12. #define ENABLE_ECHO_INPUT    0x0004
  13. #define ENABLE_LINE_INPUT    0x0002
  14. #define INVALID_HANDLE_VALUE ((HANDLE)-1)

  15. /* kernel32 prototypes - force stdcall for x86 */
  16. BOOL  __attribute__((stdcall)) GetConsoleMode(HANDLE hConsoleHandle, DWORD *lpMode);
  17. BOOL  __attribute__((stdcall)) SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode);
  18. HANDLE __attribute__((stdcall)) GetStdHandle(DWORD nStdHandle);
  19. BOOL  __attribute__((stdcall)) ReadConsoleA(HANDLE hConsoleHandle, LPVOID lpBuffer, DWORD nNumberOfCharsToRead, DWORD* lpNumberOfCharsRead, LPVOID pInputControl);
  20. BOOL  __attribute__((stdcall)) WriteFile(HANDLE hFile, const void *lpBuffer, DWORD nNumberOfBytesToWrite, DWORD *lpNumberOfBytesWritten, LPVOID lpOverlapped);
  21. void  __attribute__((stdcall)) ExitProcess(UINT uExitCode);

  22. /* Minimal assembly entry: call C entry(), then call ExitProcess(return_value) */
  23. /* We call the C function named "entry" (it will be emitted as _entry). */
  24. /* Use global symbol _start so linker --entry=_start works. */
  25. __asm__ (
  26. ".text\n"
  27. ".globl _start\n"
  28. "_start:\n"
  29. "    call _entry\n"      /* call the C function entry(); return val in EAX */
  30. "    pushl %eax\n"       /* push return-code */
  31. "    call _ExitProcess@4\n" /* call ExitProcess(return-code) */
  32. );

  33. /* Actual program logic in C (entry). Return int in EAX. */
  34. int entry(void){
  35.     HANDLE hIn  = GetStdHandle(STD_INPUT_HANDLE);
  36.     HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  37.     HANDLE hErr = GetStdHandle(STD_ERROR_HANDLE);
  38.     if(hIn == INVALID_HANDLE_VALUE || hOut == INVALID_HANDLE_VALUE) return 1;

  39.     DWORD mode = 0;
  40.     if(GetConsoleMode(hIn, &mode)) SetConsoleMode(hIn, mode & ~(ENABLE_ECHO_INPUT|ENABLE_LINE_INPUT));

  41.     char pw[256];
  42.     unsigned int len = 0;
  43.     for(;;){
  44.         char ch = 0;
  45.         DWORD read = 0;
  46.         if(!ReadConsoleA(hIn, &ch, 1, &read, 0) || read==0) break;
  47.         if(ch == '\r' || ch == '\n') break;
  48.         if(ch == 8){
  49.             if(len){
  50.                 len--;
  51.                 char bs[] = "\b \b";
  52.                 DWORD w=0; WriteFile(hErr, bs, 3, &w, 0);
  53.             }
  54.             continue;
  55.         }
  56.         if(len + 1 >= sizeof(pw)) continue;
  57.         pw[len++] = ch;
  58.         char star = '*';
  59.         DWORD w=0; WriteFile(hErr, &star, 1, &w, 0);
  60.     }
  61.     pw[len] = '\0';
  62.     char nl = '\n';
  63.     { DWORD w=0; WriteFile(hErr, &nl, 1, &w, 0); }
  64.     { DWORD w=0; WriteFile(hOut, pw, len, &w, 0); }

  65.     return 0;
  66. }
复制代码
构建命令
  1. gcc -m32 pw_minimal_x86.c -o a.exe -Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-exceptions -fno-stack-protector -fno-builtin -fno-builtin-memcpy -fno-builtin-memset -ffreestanding -nostdlib -Wl,--gc-sections -Wl,--entry=_start -Wl,--subsystem,console -Wl,--image-base,0x400000 -Wl,--file-alignment,0x200 -Wl,--section-alignment,0x200 -lkernel32 -s
复制代码
声明: 此处内容全部基于MIT协议开放源代码,可以随意使用,只需要说明来源即可
  1. MIT License

  2. Copyright (c) 2025 RENaa_FD

  3. Permission is hereby granted, free of charge, to any person obtaining a copy
  4. of this software and associated documentation files (the "Software"), to deal
  5. in the Software without restriction, including without limitation the rights
  6. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  7. copies of the Software, and to permit persons to whom the Software is
  8. furnished to do so, subject to the following conditions:

  9. The above copyright notice and this permission notice shall be included in all
  10. copies or substantial portions of the Software.

  11. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  12. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  14. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  15. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  16. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  17. SOFTWARE.
复制代码

评分

参与人数 1技术 +1 收起 理由
jiavip + 1 编程大佬

查看全部评分

发表于 2025-10-6 15:40:19 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-10-6 15:45 编辑

回复 19# RENaa_FD
事实上这个批处理以及小程序的兼容性应该相当理想,在补上certutil的windows XP SP3也可以正常运行 (当然你也可以不用certutil,我之前提到的帖子里的编码技巧是可以直接替代的)
发表于 2025-10-6 23:31:27 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-10-7 12:37 编辑

回复 1# jiavip
说起保护脚本,我刚刚琢磨着写了一个不知道密码就绝对不可能破解的批处理(暴力除外,不过暴力应该也不太行)
你可以研究研究


  1. @echo off
  2. chcp 65001 >nul 2>&1
  3. rem author RENaa_FD | 1593713272@qq.com
  4. rem 请使用UTF-8作为脚本编码
  5. cd /d "%TEMP%"
  6. set "REAL_DP=%~dp0"
  7. setlocal enabledelayedexpansion
  8. title Simple Hex Writer

  9. for /f "tokens=1" %%a in ('"prompt $H & echo on & for %%m in (1) do rem"') do set "DEL=%%a"
  10. set "DEL=%DEL:~0,1%"

  11. :watingPasswordAgain

  12. <nul set /p ="请输入密码: "
  13. set "PASSWORD="
  14. call :waitingPassword

  15. set "BASE=encrypted.b64"
  16. set "INPUT=encrypted.bin"
  17. set "OUTPUT=decrypted.cab"
  18. set "BATCH=simple_hex_writer.bat"
  19. set "SALT=0x1A,0x3E,0xFE,0x2A,0xFE,0xCE,0x57,0xBB,0x7B,0x88,0x85,0x29,0x4C,0x99,0xB6,0x37"
  20. set "IV=0x5D,0xAE,0xE5,0xCE,0x2A,0x51,0x59,0xD1,0x40,0xF0,0xF4,0x28,0x80,0x3B,0xBE,0x64"
  21. set "HASH=780729ed6bdb1da3e5ab080d39c28e0fcfc089bb4556ff00511e33e9977cc6ab"

  22. call :clean

  23. echo 正在准备文件...
  24. call :prepare
  25. if "%RESULT%" neq "done" goto :failed
  26. call :decode
  27. if "%RESULT%" neq "done" goto :failed
  28. echo 正在解密文件...
  29. call :decrypt
  30. if "%RESULT%" neq "done" goto :failed
  31. call :checksum
  32. if "%RESULT%" neq "done" (
  33.         echo 解密失败,密码错误,请重新输入密码
  34.         call :clean
  35.         goto :watingPasswordAgain
  36. )
  37. echo 正在解压文件...
  38. call :extract
  39. if "%RESULT%" neq "done" goto :failed

  40. echo 你成功解密了脚本,将在3秒后执行
  41. timeout /t 3 /nobreak >nul 2>&1

  42. cmd /c %BATCH%

  43. call :clean

  44. goto :eof

  45. :waitingPassword
  46. set "KEY="

  47. for /f "delims=" %%i in ('xcopy /w "%~f0" "%~f0" 2^>nul') do (
  48.         if not defined KEY set "KEY=%%i"
  49. )

  50. set "KEY=%KEY:~-1%"
  51. if not defined KEY (
  52.         echo.
  53.         goto :eof
  54. )


  55. if "%KEY%" equ "%DEL%" (
  56.         if "%PASSWORD%" neq "" (
  57.                 <nul set /p ="%KEY% %KEY%"
  58.                 set "PASSWORD=%PASSWORD:~0,-1%"
  59.         )
  60. ) else (
  61.         set "PASSWORD=%PASSWORD%%KEY%"
  62.         <nul set /p ="*"
  63. )

  64. goto :waitingPassword

  65. :failed
  66. echo 脚本解密失败,将在3秒后退出
  67. timeout /t 3 /nobreak >nul 2>&1
  68. goto :eof

  69. :clean
  70. del /f /q %BASE% >nul 2>&1
  71. del /f /q %INPUT% >nul 2>&1
  72. del /f /q %OUTPUT% >nul 2>&1
  73. del /f /q %BATCH% >nul 2>&1
  74. goto :eof

  75. :extract
  76. set "RESULT=failed"
  77. expand -F:a %OUTPUT% .\%BATCH% >nul 2>&1
  78. if exist "%BATCH%" (
  79.         set "RESULT=done"
  80. )
  81. goto :eof

  82. :checksum
  83. set "RESULT=failed"
  84. set "COUNT=0"

  85. for /f "delims=" %%i in ('certutil -hashfile "%OUTPUT%" SHA256') do (
  86.     set /a COUNT+=1
  87.     if !COUNT! equ 2 (
  88.         set "OUTPUT_HASH=%%i"
  89.     )
  90. )
  91. if "%OUTPUT_HASH%" equ "%HASH%" (
  92.         set "RESULT=done"
  93. )
  94. goto :eof

  95. :decrypt
  96. set "RESULT=failed"
  97. powershell -Command ^
  98.         $Password='%PASSWORD%'; ^
  99.         $Salt=([byte[]](%SALT%)); ^
  100.         $IV=([byte[]](%IV%)); ^
  101.         $Ciphertext=[System.IO.File]::ReadAllBytes('%INPUT%'); ^
  102.         $kdf=New-Object System.Security.Cryptography.Rfc2898DeriveBytes($Password,$Salt,200000,[System.Security.Cryptography.HashAlgorithmName]::SHA256); ^
  103.         $key=$kdf.GetBytes(32); ^
  104.         $aes=[System.Security.Cryptography.Aes]::Create(); ^
  105.         $aes.Key=$key; $aes.IV=$IV; $aes.Mode=[System.Security.Cryptography.CipherMode]::CBC; $aes.Padding=[System.Security.Cryptography.PaddingMode]::None; ^
  106.         $decryptor=$aes.CreateDecryptor(); ^
  107.         $pt=$decryptor.TransformFinalBlock($Ciphertext,0,$Ciphertext.Length); ^
  108.         $padLen=$pt[$pt.Length - 1]; ^
  109.         $PlaintextBytes=$pt[0..($pt.Length - $padLen - 1)]; ^
  110.         [System.IO.File]::WriteAllBytes('%OUTPUT%', $PlaintextBytes) >nul 2>&1

  111. if exist "%OUTPUT%" (
  112.         set "RESULT=done"
  113. )
  114. goto :eof

  115. :decode
  116. set "RESULT=failed"
  117. certutil -decode %BASE% %INPUT% >nul 2>&1
  118. if exist "%INPUT%" (
  119.         set "RESULT=done"
  120. )
  121. goto :eof

  122. :prepare
  123. set "RESULT=failed"
  124. (
  125. echo.mB00YWlh1aV19AjhQZcPn4tDOFd+GYaYFkk+QZz6r0WypbGcpuc191RqPj1VHMwR
  126. echo.UyyvR33YtB9i2JIssRNUeFyB8JYz27w0VKHiuLyxcJZqsQWbuGIsQehuP4Ch+tBY
  127. echo.YSa01REV9nM+uPtROmx+hO5hzvy9yEgjXIBcclJ0+L76u8hIy715QarQULnQ/vXc
  128. echo.FhJ8Gifta0Xm+scr05iF23qwNkU4y59kedi5WsJG/5ShsazRdhjVDMcUkxvPRLoi
  129. echo.WcxoVyiB3i1UGzR0JCK00IJienFPTPTu5klv/vKdoAjpwMDYbyD5LuyF8Woa5OCs
  130. echo.95F3iQEe/LcMNwfMi/JJg3bohUns/r/bUx1RpJANSO7L0njipsteLasncSutfw4t
  131. echo.UBC1WUMrgRbpgi53GpIgivwgcvOlzlrrsLgFLhwcG8kQXDysWqPoR6MZhCzDzW+B
  132. echo.E+7wAE4H10x4XjMvr6aqQdBogLBbPiuEqqrFi1imNowjNuXVYAxpaozS+ocqCgIY
  133. echo.r1qrtUTz4B9BvwYD9u15SjfvwPYyKXQ0Bc8svhc9MDHUE+I4DKB0yGB6gowpw3Gl
  134. echo.LvFRTqveubtgOF0B7tFWJJnSeaIPSX2EwxTHqW3FtCpUP2RvK6FnwFoZ6+7e/EEd
  135. echo.0uPi8aV6REjyi+gmvitss97ZtodmAW717ZYRTs9tBXiMeHt5Fnw2yp93a5mwJB2v
  136. echo.qdrdrvtb2FwO28di/C8P9ovBEOk+Hh1sISmzo723DfFSIs4wiTqJTRkv05JgkXEg
  137. echo.tv5+6IguFFbtCYxEkjMvNBy0j9Fwuri/T9H+tk/VZlbmzGEDtpyI0u44bUsnEnjm
  138. echo.Rb86KmPaExnxeD5sJLCBRwVIgeUmJx1MKetXzTLz7fdfh4y6bk/UhsfMkFF1Jpgc
  139. echo.tO2MiTPDYrgCOlxjEohlQ8PlI+KIm7fGghxSjNNqBqWLH+w10eq/8Ib8nbt4S22q
  140. echo.GRP25qxpeSW2vaPdW+iGkRgvOeMPlOLA1HCXPGjuVY4fyc2JZbSVmCVYQLPUs/z3
  141. echo.aOAw3rN7FpddXKP6b9s1JbuuKcGPAiLkJkredVeXDo2uIc+hRwcSSSufchQmQOa/
  142. echo.LZvBBIKdZCG0C/nFA6xhhoAfS3jaX80dmsWD3+cJXDOqDO0jrtB1yoH/SUCZ4wOo
  143. echo.TJzwz3/gcwgqLs1L99z5v/wwACDQQ0RqFD0X/TSrW+GsiALogAX0xO3tWK17SlAZ
  144. echo.t/xx+lbdYeKtr/QqYTDmQ6OO51LbUsUDpigmfr5vCblPl5B0QxyQ/dExjQkVrb0M
  145. echo.HKmjjIA3iAZ/CqASMHicm+Ugpozap07MQHyTWmso9UKnj4AunugaP0maBqwcj2m1
  146. echo.U+0z8WAGokEjZeP54mOa+4aHLSikPAs6AqyyGx601bh1wKZpsDDT3n/OAEZm2kAM
  147. echo.btanJnscQPihV5+oynsa7XhSWoYXjT+PB31MgHJRDjr6ZeRc0wgMBfYDevtXs/4Z
  148. echo.pIYvsyScSRojPL9QnfqqY52eojLC5KB/V1fKuOdLHMkCQz5il4H/c87KDk8GXrZG
  149. echo.4438sWkn5xQMGME/yqBMPUIi7p0q6LvyNCY9QkOhatPVmp1XySfR6jdzxEdRyEg8
  150. echo.CxARoge/L432IGUomHbUz//dunbzoPM4IX0yCZN78LazdYApt2cYyp7gJWhgTq38
  151. echo.tWCJz5uNZkMaL4sDjW5IJGIB/i9aJ8vTxz79b70dqCpzS53JVTicNpC3uttLQsRk
  152. echo.Nx5Ls6GYbpeIoait9ks+jQymi/5huX/EU3ui8gNKajn6S5pIqPz9kYBcQL0bVDn3
  153. echo.QnQuTi5bteEmS/meliApvOqXlPZH5cykrbWXZNiIbXifmvuysHp+T2HsciOt2r4a
  154. echo.Q4N4Ffc+P7HR0GA4xXqPewVqTLl9CNJ95d8qUqsu3HscKK8lC/xBJUf/qjBZ+fc0
  155. echo.K/cygfpT02WCjKmZ7rI9JdVpbjsBi0KLLPj53cKGbEIBq72ViWwwMeLoShdg4gpS
  156. echo.KQI5KY1c8fual+2jpRHbNIDyLrqzls3/AYREmTP+5j96EEQi+ixg10rYwlFtsoKz
  157. echo.jfsE48j3ZXhB76GcbkgZCmOKeKoOPQXGqVVt53m7M+5WvqOD1SEfCZnZTfSYCUqk
  158. echo.C5xhos6kPSAwQqRdzOrJb+8KfwrAD1CVTzjR2G8Dg9v0PzzywJ5vXWw7TWqdGAsH
  159. echo.Vg2x+zW91juvMti1YDeTxzD611aYDHBHPHv53GQ1ShKI84YhWAjPyHCftlxGUOaj
  160. echo.1Axwn0iJu0xDfUDmCusfXETtXPD66z8INdfI+qWv0ylL4yzQT+vIgREyE6F7J9vp
  161. echo.NkBRHZP8Fz3o8LgMKrqp6KCSE50BkhcueTSea5UrBydpJMze2hjnbn3BQcf93+i/
  162. echo.mfF3qUywz663ayL+6IpZxx8k2Phncryhy69Fm9ToxVTX+HBLAAShwjv7owrUzARg
  163. echo.yblQumv43OPAg/1qqHRyJy9JUCeoDMGE4MaHHs7hX4UCmZLUshw+Ar/+Oj2s+6mt
  164. echo.YqM3udFbVMpvEF8s9X+zjkXMdlKABxvVJ6F7lNd1shp8shJ0oEnbc6NjJ6fAQ+F1
  165. echo.L7PQeGrt1LvCUPTZh+pq1E+BuCamfTi/B8PfswLjmb8=
  166. )>%BASE%

  167. if exist "%BASE%" (
  168.         set "RESULT=done"
  169. )
  170. goto :eof

复制代码
 楼主| 发表于 2025-10-6 23:36:15 | 显示全部楼层
回复 19# RENaa_FD

感谢分享源码,,虽然看不是完全看得懂,但有些“触类旁通”的理解。,
不懂的是命令写法和语法规范和表达方式,但底层逻辑是相通的,,
certutil (编码&解码)程序 和 VBS ADODB.Stream 解码程序,有些触及,,平时应用不到,懒得去解构,,
但要从根本的命令源码去理解程序,还是很难的!,,更别提去推演和猜测。
很多命令和写法都有很多独特性,,每种编程命令组合都有很多,,,
以前学编程的人最喜欢吵架的一个话题是:哪种编程语言最高级!,,
有站汇编的,有站 C 语言的,,,搞得我们这些写 BAT,HTML,VBS 次级语言,,瑟瑟发抖,,,
,,
,,,,

评分

参与人数 1技术 +1 收起 理由
RENaa_FD + 1 我觉得没必要非要分出哪个语言高级,但是如 ...

查看全部评分

发表于 2025-10-6 23:44:17 | 显示全部楼层
本帖最后由 RENaa_FD 于 2025-10-7 10:58 编辑

回复 23# jiavip
其实我觉得用的趁手才是关键,且只要是还有人用的语言,那它肯定有其独到之处
 楼主| 发表于 2025-10-7 18:31:00 | 显示全部楼层
回复 23# RENaa_FD


    哇!先生大悟,当年我要有这觉悟,可以少不少思维上和心理的抵触和反感,,,
老子是又活了20几年后才有这悟性的,,无奈&#172;_&#172;`,,晚太多了。,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.021033 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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