|
|
发表于 2011-5-19 23:26:30
|
显示全部楼层
利用系统自带的debug.exe可以直接操作16进制文件
下面是以前写的一个简单的按字节异或加解密程序
- @echo off & setlocal & chcp 437>nul & graftabl 936>nul
- if "%~1"=="" (
- echo.
- echo.=文本文件加解密程序 :: qzwqzw :: 2007-06-05 :: Release 4
- echo.
- echo.=原理:使用DEBUG 脚本动态生成可执行程序对输入文件逐字节异或编码
- echo.
- echo.=特性:加解密互逆,多文件操作,单数字密钥
- echo.
- echo.=出处:http://www.cn-dos.net/forum/viewthread.php?tid=31054
- echo.
- set /p file=-请输入文件名(支持通配符,默认为 .\*.txt):
- set /p pass=-请输入密钥(一位0~F的十六进制数,默认为0):
- echo.
- ) else (
- set "file=%~1"
- set "pass=%~2"
- )
- if "%file%"=="" set file=*.txt
- if "%pass%"=="" set pass=0
- if not exist "%file%" echo !找不到文件: "%file%" && goto end
- :: 生成并执行 DEBUG 脚本,生成转换程序
- echo e 100 B4 06 B2 FF CD 21 74 08 34 E%pass% 88 C2 CD 21 EB F0 C3>_codec.scr
- for %%s in (rcx 11 n_codec.com w q) do echo %%s>>_codec.scr
- debug <_codec.scr | find "Error">nul && echo !密钥错误: "%pass%" && goto :end
- :: 搜索指定路径所有匹配文件进行转换
- for %%f in ("%file%") do set "fPath=%%~dpf"
- for /f "delims=" %%f in ('dir /a/b/od "%file%" 2^>nul') do (
- (set "fIn=%fPath%%%f") && (set "fOut=%fPath%#%%f")
- call :Codec
- )
- echo.
- if exist _codec.* del _codec.*
- if "%~0"=="%~f0" pause
- goto :eof
- :Codec
- if exist "%fOut%" echo !已存在文件: "%fOut%" && pause && goto :eof
- echo +正在转换 "%fIn%" ...
- if exist _codec.com _codec.com < "%fIn%" > "%fOut%"
- if not exist "%fOut%" echo !转换失败,未生成 "%fOut%" && pause
复制代码 |
|