批处理之家's Archiver

michael8111 发表于 2010-6-13 19:33

一个加密批处理文件的代码

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

[code]
@ECHO off
cls
color f0
echo.
echo.
ECHO                批处理文件(.bat .cmd)加密工具
echo.
echo.
echo 说明: 在下面输入需要加密的批处理文件名
echo.
echo       若在此文件的同目录下直接输入“文件名.bat”即可
echo.
echo       也可以带路径指定任意BAT
echo.
echo       加密完成后会在同目录下生成“加密成品.bat”文件
echo.
echo.
echo.
echo.
set /p file=请输入需要加密的批处理后(名+后缀)按回车键(Q=退出):
if "%file%"=="q" goto quit
echo %file%|findstr /i "\.bat$">nul && goto go
echo %file%|findstr /i "\.cmd$">nul && goto go
cls
echo ==============
echo 请正确输入!
echo ==============
echo.
echo.
echo 按任意键重新输入......
pause>nul
goto start
:go
if not exist "%file%" goto newly
if exist encrypt.bat copy encrypt.bat encryptbak.bat
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"
echo cls>>"%tmp%\encrypt.tmp"
type "%file%">>"%tmp%\encrypt.tmp"
setlocal enabledelayedexpansion
for %%i in ("%tmp%\encrypt.tmp") do (
     echo %%~zi >nul 2>nul
     set size=%%~zi
     set num=!size:~-1!
     set /a mod=!num!%%2
     if !mod! equ 0 (goto even) else (goto odd)
)
:even
copy "%tmp%\encrypt.tmp" 加密成品.bat
del "%tmp%\encrypt.tmp"
cls
echo         ===============================
echo          恭喜, 批处理加密成功!
echo         ===============================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
:odd
echo. >>"%tmp%\encrypt.tmp"
copy "%tmp%\encrypt.tmp" 加密成品.bat
del "%tmp%\encrypt.tmp"
cls
echo         ===============================
echo          恭喜, 批处理加密成功!
echo         ===============================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
:newly
cls
echo ================================
echo 找不到批处理文件, 请重新输入!
echo ================================
echo.
echo.
echo 按任意键开始......
pause>nul
goto start
:quit
exit
[/code]

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

解密代码如下:

[code]
@ echo off
color f0
title 批处理解密工具
set /p a=请输入要解密的批处理文件(请放到当前目录下):
echo 解密后文件.bat即为解密之后的文件!
pause
type %a%>解密后文件.bat
echo 解密完成!
pause
exit
[/code]

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

这样也可以解密文件。

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.

[code]@ECHO off
:start
cls
color f0
echo.
echo.
echo 批处理文件(.bat .cmd)加密工具
echo.
echo.
echo 说明: 在下面输入需要加密的批处理文件名
echo.
echo 若在此文件的同目录下直接输入“文件名.bat”即可
echo.
echo 也可以带路径指定任意BAT
echo.
echo.
echo.
echo.
echo.
set /p file=请输入需要加密的批处理后(名+后缀)按回车键(Q=退出):
if "%file%"=="q" goto quit
if "%file%"=="" goto start
:a
set /p nfile=请输入新的批处理名称:
if "%nfile%"=="" goto a
echo %file%|findstr /i "\.bat$">nul && goto go
echo %file%|findstr /i "\.cmd$">nul && goto go
cls
echo ===============================================
echo.
echo 请正确输入!
echo.
echo ===============================================
echo.
echo.
echo 按任意键重新输入......
pause>nul
goto start
:go
if not exist "%file%" goto newly
if exist encrypt.bat copy encrypt.bat encryptbak.bat
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"
echo cls>>"%tmp%\encrypt.tmp"
type "%file%">>"%tmp%\encrypt.tmp"
setlocal enabledelayedexpansion
for %%i in ("%tmp%\encrypt.tmp") do (
echo %%~zi >nul 2>nul
set size=%%~zi
set num=!size:~-1!
set /a mod=!num!%%2
if !mod! equ 0 (goto even) else (goto odd)
)
:even
copy "%tmp%\encrypt.tmp" %nfile%.bat
del "%tmp%\encrypt.tmp"
cls
echo ===============================================
echo.
echo 恭喜, 批处理加密成功!
echo.
echo ===============================================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
dd
echo. >>"%tmp%\encrypt.tmp"
copy "%tmp%\encrypt.tmp" %nfile%.bat
del "%tmp%\encrypt.tmp"
cls
echo ===============================================
echo.
echo 恭喜, 批处理加密成功!
echo.
echo ===============================================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
:newly
cls
echo ===================================================
echo.
echo 找不到批处理文件, 请重新输入!
echo.
echo ===================================================
echo.
echo.
echo 按任意键开始......
pause>nul
goto start
:quit
exit[/code]

[[i] 本帖最后由 pclhhwa 于 2010-6-13 20:48 编辑 [/i]]

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

吞噬者批处理中是这么写的。[code]rem 把bat文件拖过来就会自动生成加密bat
@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)[/code]

非主流男孩 发表于 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 解密就知道了,

[[i] 本帖最后由 ZJHJ 于 2010-8-28 22:35 编辑 [/i]]

vte8689 发表于 2010-12-15 23:21

这种方法对新手还行。
   高手那就过不去了。。。

taqiao 发表于 2011-11-24 21:02

是啊

高手还是可以查看的

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.