Board logo

标题: 一个加密批处理文件的代码 [打印本页]

作者: michael8111    时间: 2010-6-13 19:33     标题: 一个加密批处理文件的代码

这段代码可以对批处理文件做最简单的加密,加密代码如下:

  1. @ECHO off
  2. cls
  3. color f0
  4. echo.
  5. echo.
  6. ECHO                批处理文件(.bat .cmd)加密工具
  7. echo.
  8. echo.
  9. echo 说明: 在下面输入需要加密的批处理文件名
  10. echo.
  11. echo       若在此文件的同目录下直接输入“文件名.bat”即可
  12. echo.
  13. echo       也可以带路径指定任意BAT
  14. echo.
  15. echo       加密完成后会在同目录下生成“加密成品.bat”文件
  16. echo.
  17. echo.
  18. echo.
  19. echo.
  20. set /p file=请输入需要加密的批处理后(名+后缀)按回车键(Q=退出):
  21. if "%file%"=="q" goto quit
  22. echo %file%|findstr /i "\.bat$">nul && goto go
  23. echo %file%|findstr /i "\.cmd$">nul && goto go
  24. cls
  25. echo ==============
  26. echo 请正确输入!
  27. echo ==============
  28. echo.
  29. echo.
  30. echo 按任意键重新输入......
  31. pause>nul
  32. goto start
  33. :go
  34. if not exist "%file%" goto newly
  35. if exist encrypt.bat copy encrypt.bat encryptbak.bat
  36. echo %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a >"%tmp%\encrypt.tmp"
  37. echo cls>>"%tmp%\encrypt.tmp"
  38. type "%file%">>"%tmp%\encrypt.tmp"
  39. setlocal enabledelayedexpansion
  40. for %%i in ("%tmp%\encrypt.tmp") do (
  41.      echo %%~zi >nul 2>nul
  42.      set size=%%~zi
  43.      set num=!size:~-1!
  44.      set /a mod=!num!%%2
  45.      if !mod! equ 0 (goto even) else (goto odd)
  46. )
  47. :even
  48. copy "%tmp%\encrypt.tmp" 加密成品.bat
  49. del "%tmp%\encrypt.tmp"
  50. cls
  51. echo         ===============================
  52. echo          恭喜, 批处理加密成功!
  53. echo         ===============================
  54. echo.
  55. echo.
  56. echo 按任意键退出......
  57. pause>nul
  58. goto quit
  59. :odd
  60. echo. >>"%tmp%\encrypt.tmp"
  61. copy "%tmp%\encrypt.tmp" 加密成品.bat
  62. del "%tmp%\encrypt.tmp"
  63. cls
  64. echo         ===============================
  65. echo          恭喜, 批处理加密成功!
  66. echo         ===============================
  67. echo.
  68. echo.
  69. echo 按任意键退出......
  70. pause>nul
  71. goto quit
  72. :newly
  73. cls
  74. echo ================================
  75. echo 找不到批处理文件, 请重新输入!
  76. echo ================================
  77. echo.
  78. echo.
  79. echo 按任意键开始......
  80. pause>nul
  81. goto start
  82. :quit
  83. exit
复制代码


这段代码是利用记事本的文本编码混淆原理,通过添加许多个%%a来实现加密。使用该批处理加密过的文件,用记事本打开是乱码,但可以正常运行,与原批处理相同。

解密代码如下:

  1. @ echo off
  2. color f0
  3. title 批处理解密工具
  4. set /p a=请输入要解密的批处理文件(请放到当前目录下):
  5. echo 解密后文件.bat即为解密之后的文件!
  6. pause
  7. type %a%>解密后文件.bat
  8. echo 解密完成!
  9. pause
  10. exit
复制代码


这一段代码主要利用了type和记事本的区别:type不会识别你的文件编码,文件该是什么样还是什么样;而记事本就不能如此。如果这段代码写的有错误,那么打开cmd.exe,直接输入
  1. type 文件名.bat>新文件名.bat
复制代码


这样也可以解密文件。
作者: ZJHJ    时间: 2010-6-13 20:01

这种方法还会有人用?
也没有必要搞的这么复杂。
wmic logicaldisk "DriveType=3">a.txt
copy  /b a.txt +  b.txt   加密.txt
一句话就是将ANSI编码的文本拷入Unicode编码的文本.
解密反之亦然。
作者: pclhhwa    时间: 2010-6-13 20:46

你的文件有个错误: 没有start标签。
这是我修改后的bat 可以自定义加密后的文件名内容的bat.

  1. @ECHO off
  2. :start
  3. cls
  4. color f0
  5. echo.
  6. echo.
  7. echo 批处理文件(.bat .cmd)加密工具
  8. echo.
  9. echo.
  10. echo 说明: 在下面输入需要加密的批处理文件名
  11. echo.
  12. echo 若在此文件的同目录下直接输入“文件名.bat”即可
  13. echo.
  14. echo 也可以带路径指定任意BAT
  15. echo.
  16. echo.
  17. echo.
  18. echo.
  19. echo.
  20. set /p file=请输入需要加密的批处理后(名+后缀)按回车键(Q=退出):
  21. if "%file%"=="q" goto quit
  22. if "%file%"=="" goto start
  23. :a
  24. set /p nfile=请输入新的批处理名称:
  25. if "%nfile%"=="" goto a
  26. echo %file%|findstr /i "\.bat$">nul && goto go
  27. echo %file%|findstr /i "\.cmd$">nul && goto go
  28. cls
  29. echo ===============================================
  30. echo.
  31. echo 请正确输入!
  32. echo.
  33. echo ===============================================
  34. echo.
  35. echo.
  36. echo 按任意键重新输入......
  37. pause>nul
  38. goto start
  39. :go
  40. if not exist "%file%" goto newly
  41. if exist encrypt.bat copy encrypt.bat encryptbak.bat
  42. echo %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a >"%tmp%\encrypt.tmp"
  43. echo cls>>"%tmp%\encrypt.tmp"
  44. type "%file%">>"%tmp%\encrypt.tmp"
  45. setlocal enabledelayedexpansion
  46. for %%i in ("%tmp%\encrypt.tmp") do (
  47. echo %%~zi >nul 2>nul
  48. set size=%%~zi
  49. set num=!size:~-1!
  50. set /a mod=!num!%%2
  51. if !mod! equ 0 (goto even) else (goto odd)
  52. )
  53. :even
  54. copy "%tmp%\encrypt.tmp" %nfile%.bat
  55. del "%tmp%\encrypt.tmp"
  56. cls
  57. echo ===============================================
  58. echo.
  59. echo 恭喜, 批处理加密成功!
  60. echo.
  61. echo ===============================================
  62. echo.
  63. echo.
  64. echo 按任意键退出......
  65. pause>nul
  66. goto quit
  67. dd
  68. echo. >>"%tmp%\encrypt.tmp"
  69. copy "%tmp%\encrypt.tmp" %nfile%.bat
  70. del "%tmp%\encrypt.tmp"
  71. cls
  72. echo ===============================================
  73. echo.
  74. echo 恭喜, 批处理加密成功!
  75. echo.
  76. echo ===============================================
  77. echo.
  78. echo.
  79. echo 按任意键退出......
  80. pause>nul
  81. goto quit
  82. :newly
  83. cls
  84. echo ===================================================
  85. echo.
  86. echo 找不到批处理文件, 请重新输入!
  87. echo.
  88. echo ===================================================
  89. echo.
  90. echo.
  91. echo 按任意键开始......
  92. pause>nul
  93. goto start
  94. :quit
  95. exit
复制代码

[ 本帖最后由 pclhhwa 于 2010-6-13 20:48 编辑 ]
作者: michael8111    时间: 2010-6-14 07:54     标题: 回复 2楼 的帖子

我的代码功能是加密批处理文件并能使之正常执行,而非把两个文件结合。
作者: michael8111    时间: 2010-6-14 07:57     标题: 回复 3楼 的帖子

这个应该是通过自定义nfile变量而自定义文件名吧?
作者: ZJHJ    时间: 2010-6-23 15:08

回复 4楼
你只知道加aaaaaaaaa啊
作者: loquat    时间: 2010-8-18 23:33

吞噬者批处理中是这么写的。
  1. rem 把bat文件拖过来就会自动生成加密bat
  2. @if not exist "%~f1" (@echo File doesn't exist!&@goto :eof) else (echo exit|cmd /kprompt e100 FF FE 20 26 63 6C 73 0D 0A $_rcx$_9$_n t12.5$_w$_q$_|debug>nul&&@copy t12.5+"%~f1" "%~dpn1"_加密.bat>nul&&echo Successful!&del t12.5)
复制代码

作者: 非主流男孩    时间: 2010-8-22 20:38

电脑里有,并且用过,想查看源码也很简单,edit就行,防不住高手,另外,哪位高手说下原理…
作者: ZJHJ    时间: 2010-8-28 22:31

RD 7L
那是换了一个花样而也,实际就是将文件写入Unicode编码的txt文本里。和2楼的完全一样。
你把 FF FE 20 26 63 6C 73 0D 0A 解密就知道了,

[ 本帖最后由 ZJHJ 于 2010-8-28 22:35 编辑 ]
作者: vte8689    时间: 2010-12-15 23:21

这种方法对新手还行。
   高手那就过不去了。。。
作者: taqiao    时间: 2011-11-24 21:02

是啊

高手还是可以查看的




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2