Board logo

标题: [文件操作] 一个利用编码识别漏洞写的文本加解密的批处理 [打印本页]

作者: techon    时间: 2011-5-19 13:44     标题: 一个利用编码识别漏洞写的文本加解密的批处理

原理: windows下的notepad、wordpad 等程序不能正确识别 以十六进制 FF FE 开始的文件,(全部默认识别为Unicode编码)

代码见附件,分为自身加密版,和自身未加密版

已知问题:解密时源文件中的 制表符TAB 会被替换为空格,如被加密文件含有特殊字符(指使用 type 或 more 不能正常显示的一些字符),
在解密时可能会被替换,加密时没有影响
作者: CrLf    时间: 2011-5-19 14:09

编码混淆加密没什么作用的,轻松搞定
  1. copy nul+加密.txt 解密.txt
复制代码
如果上面的看不懂,也可以这样:
  1. @echo off
  2. set /p t=<加密.txt
  3. (set t
  4. for /f "skip=1 delims=" %a in (加密.txt) do echo %a)>解密.txt
复制代码

作者: terse    时间: 2011-5-19 15:56

我一般直接 RAR 处理
作者: techon    时间: 2011-5-19 19:32

copy nul+加密.txt 解密.txt


早知道这么容易,我还费这事干嘛。。。 简单的东西让我给搞复杂了
作者: CrLf    时间: 2011-5-19 19:59

4# techon


这就是设计的趣味了
那两种方法分别是两个完全不同的方向,前者是利用copy a+b时会去掉b的文件头的特性;后者则是在unicode文件头前加一个t=,这样FFFE就不再位于文件首部了。而用其他工具直接查看...又是一种方法
作者: fengyun530    时间: 2011-5-19 22:48

跳过文件头的方法,不过如果熟悉16进制的文件头的人,一看不就知道了吗。普通这种加密豪无意义,倒是可以给16进制码进行异或/AES等加密或整体加1减1移位操作,这样倒是更不容易被看出来!
作者: fengyun530    时间: 2011-5-19 22:53

处于安全加密考虑,批处理里好象没有直接操作16制的代码,可以考虑用批处理运行winhex脚本,代码为
  1. block 1 100 //选择1000个字节为块
  2. move -1      //整体移位1个字节
复制代码

作者: plp626    时间: 2011-5-19 22:53

[i=s] 本帖最后由 plp626 于 2011-5-19 23:08 编辑 [/i]

没办法了。。。我交枪。。。

作者: CrLf    时间: 2011-5-19 22:53

6# fengyun530


那你准备怎么不翻译就直接运行...
作者: Batcher    时间: 2011-5-19 23:13

7# fengyun530


这个,可以有吧?
http://bbs.bathome.net/thread-6484-1-1.html
作者: qzwqzw    时间: 2011-5-19 23:26

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





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