批处理加密其中一个方法就是利用unicode 文件头(文件前两个字节十六进制为“FF FE”,此法以实用性被广泛应用)
只是有个致命缺陷:代码的第二行要跟一个cls语句把错误给刷掉,如果在命令行下调用的话,会把屏幕已经输出的信息也给刷掉了,关于这个缺陷原来在cn-dos的时候一直没有得到解决。
我想到了batman那个多行回退的代码
set/p=【制表符】【若干退格符】<nul(不知道的会员可以搜索哈)
然后,今天我觉得这个问题在理论上便解决了。
再然后,bat,vbs混合编程的那个清屏也可以用这个代码来代替cls了;
干脆上传一份算了,本楼代码就是那个《文件头加密.bat》,新建.bat用于创建新的1.bat,call.bat用于运行1.bat(没用到call命令,所以没出错,耶)看效果。复制代码
- '&echo off&cls&Start /wait wscript -e:vbs "%~f0"&findstr>>Unicode.tmp /v S %0© /b Unicode.tmp+1.bat Unicode.tmp&move Unicode.tmp 1.bat&exit
- Set Unicode = CreateObject("Scripting.FileSystemObject").CreateTextFile("Unicode.tmp",,True)
- ' 2>nul&@echo [请把此处替换为9个tab键]
原帖由 zm900612 于 2011-3-12 16:59 发表
知道了技巧,退行容易,但是如何做到判断非空行数和不清空原来的内容呢?
写了个处理1.bat的半成品,目前在1.bat被call的时候表现尚可,但是直接运行1.bat时就问题大大的,因为无从猜测运行时会有几行的多余回显。
...
d:\Docume 123 请按任意键继续. . . |
对任何文件进行加密复制代码
- copy/b uniode.bat + 你要加密的文件.bat 已加密.bat
复制代码
- ? 2>nul&(@echo )||echo 123123123
- @echo off
- echo 123
- pause
或者[code]复制代码
- @echo off
- chcp 437
- wmic os>tmp
- set /p head=<tmp
- echo !head! 2^>nul>head
- copy /b head+%0 unicode
@echo off
chcp 437
wmic os>tmp
set /p head=nul>head
copy /b head+%0 unicode或者
晕,最简单的那个方案因为有特殊字符无法直接贴出来,请看附件
zm900612 发表于 2011-6-10 16:54
13# plp626
不是的,特殊字符是一个FF字符和一个汉字,分开没事,放在一起就发不了。
如果用那个函数的话,那直接生成fffe就行了,也无需再用别的方式
zm900612 发表于 2011-6-10 18:52
在测试中的表现非常棒,能够区分关闭回显和打开回显的情况复制代码
- @find /v "find"<%~s0>样本文件.bat
- 文件头 2>nul 3>"[tab][tab] [tab][tab][tab][tab][tab][tab][tab][tab][tab][tab][tab]
- @(for %%a in (test) do echo test)>tmp
- @for /f "skip=2" %%a in (tmp) do @echo[tab][tab]
- echo 123
- pause
复制代码
- @echo off
- setlocal enabledelayedexpansion
- chcp 437 >nul
- call ASCMap $
- echo !$:~0xff,1!!$:~0xfe,1! 2^>nul 3^>"!$:~0x9,1!!$:~0x9,1! !$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!
- echo @(for %%%%a in (test^) do echo test^)^>tmp
- echo @for /f "skip=2" %%%%a in (tmp^) do @echo !$:~0x9,1!!$:~0x9,1!
- echo echo 123
- echo pause
- )>样本文件.bat
- chcp 936 >nul
- echo 测试
- echo on
- 样本文件.bat
- pause
测试成功复制代码
- @echo off
- setlocal enabledelayedexpansion
- set file=样本文件
- chcp 437 >nul
- call ASCMap $
- set t=!$:~9,1!
- (echo !$:~0xff,1!!$:~0xfe,1! 2^>nul 3^>"!t!!t! !t!!t!!t!!t!!t!!t!!t!!t!!t!!t!!t!
- echo @(for %%%%a in (test^) do echo test^)^>tmp
- echo @for /f "skip=2" %%%%a in (tmp^) do @echo !t!!t!
- echo echo 123
- echo pause
- )>!file!.bat
- chcp 936 >nul
- echo 测试
- echo on
- call 样本文件.bat
- pause
echo;>a.txt
copy /b a.txt 要解密的文件
这样原来文件头是FF F0,解密后变成0D 0A FF F0,就不会被当成unicode格式了
zm900612 发表于 2011-3-14 23:02
复制代码
- copy nul+a.bat 解密.bat
b.bat复制代码
- @echo off 1>&3 2>&4 3>nul 4>nul
- echo 123&abc
- pause&call b.bat
- pause
复制代码
- echo 123&abc
- pause 1>con 2>con 5>con 6>con
- echo 123&abc
只是理论归理论,真正要给出一段简短的代码需要N多次测试。
现在求该代码(提示下,这并不是件容易的事,要得到最简短的代码需要你一番折腾的)
(提示,对于文件头FFEF数据,大家可以借助debug命令生成 ...
plp626 发表于 2011-3-12 15:24
欢迎光临 批处理之家 (http://www.bathome.net/) | Powered by Discuz! 7.2 |