回L兄,最近整理关于加密解密的帖子,在前辈的基础上做了很多修改,这个批处理基本上可以解密所有的文本加密了。感觉还是 copy nul+%ravel% "%crackfile%"命令最简单方便。
下面整理完成了解密的帖子。
@echo off
mode con: cols=80 lines=25
for /f "tokens=2 delims=: " %%a in ('chcp') do set lan_chcp=%%a
:index
color 27
cls
echo ╭───────────────╮
echo │ │
echo ╭─────────┤ 文 本 解 密 终 极 版 ├─────────╮
echo │ │ │ │
echo │ ╰───────────────╯ │
echo │ │
echo │ │
echo │ 本工具用来对混淆编码类型的加密文本进行解密,能自动分辨加密类型! │
echo │ 本批处理是根据cn-dos等多位前辈的帖子整理出来的,在此表示感谢 │
echo │ 请输入批处理回车,也可拖放批处理至本窗体或本解密文件. │
echo │ 解密成功后会在本程序目录下生成"crack_原文件名" 格式的文件. │
echo │ 注意:解密后将替换本目录下的"crack_原文件名"文件,所以请自行备份. │
echo │ │
echo │ │
echo ╰───────────────────────────────────╯
echo.
if not "%1"=="" set ravel=%*
if "%ravel%"=="" set /p ravel=请输入要解密的文件全名:
if "%ravel%"=="" goto:err
dir /a "%ravel%"
cls
if "%errorlevel%"=="0" goto:go
:err
cls
echo ╭──────────╮
echo ╭─────────┤ 文 件 错 误 ├────────╮
echo │ ╰──────────╯ │
echo │ │
echo │ 指定文件不存在或输入了空字符串! │
echo │ 按任意键重新输入... │
echo │ │
echo ╰─────────────────────────────╯
echo.
echo.
pause >nul
set ravel=
goto index
:go
rem 使用TYPE命令(使用变数%%a字符写入文件首行加密文件,适合非批处理如注册表加密的解密)试探加密类型,如果失败则使用其他方式解密,注意这里的变量crackfile需要完整路径,否则拖动方式产生的文件会在用户当前目录
set "ravel=%ravel:"=%"
for /f "tokens=*" %%I in ("%ravel%") do set crackfile=%%~dpIcrack_%%~nxI
if exist "%crackfile%" del /f/q "%crackfile%"
type "%ravel%"|FINDSTR /I "%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a"
IF "%ERRORLEVEL%"=="1" goto:try
type "%ravel%"|FINDSTR /I/V "%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a.*%%a">%crackfile%
goto:end
:try
rem 1.使用最简单的COPY命令,会产生两行多余字符,不会过滤空行,如果是注册表文件必须使用方法二去掉前两行
rem ----------------------------------------------------------------------
rem copy nul+%ravel% "%crackfile%"
rem goto :end
rem ----------------------------------------------------------------------
rem 2.使用for结合findstr /n 命令,也只需要一句命令非常简单,注意如果不使用findstr /n则会过滤掉空行
for /f "skip=2 tokens=1,* delims=:" %%a in ('findstr /n .* "%ravel%"') do echo.%%b>>"%crackfile%"
rem for /f "skip=2 delims=" %%a in ('findstr /n .* "%ravel%"') do (
rem cls
rem set str=%%a
rem setlocal enabledelayedexpansion
rem set str=!str:*:=!
rem echo.!str!>>"%crackfile%"
rem endlocal
rem )
goto:end
rem 3.使用debug方法,此方法也会产生多余行,需要FOR命令做二次处理,注意变量"%~dp1crack_%~nx1"在CALL中的应用.
copy %ravel% unenc.tmp
echo e 100 40,40,40,40>~debug
echo w>>~debug
echo q>>~debug
debug unenc.tmp<~debug
del ~debug
chcp %lan_chcp%
cls
call :ok %ravel%
goto :end
:ok
type unenc.tmp|FINDSTR /I/V "@@@@">unenc1.tmp
for /f "skip=2 tokens=1,2 delims=:" %%a in ('findstr /n ".*" "unenc.tmp"') do (if "%%b"=="" (echo.>>unenc1.tmp) else (echo %%b>>unenc1.tmp))
for /f "skip=2 delims=" %%a in (unenc.tmp) do echo "%%a">>unenc1.tmp
unenc1.tmp "%~dp1crack_%~nx1"
del /q/f unenc.tmp
del /q/f unenc1.tmp
:end
cls
echo ╭──────────╮
echo ╭─────────┤ 解 密 成 功 ├────────╮
echo │ ╰──────────╯ │
echo │ │
echo │ 恭喜, 批处理解密成功! │
echo │ │
echo ╰─────────────────────────────╯
echo 按任意键退出...
pause >nul
exit