本帖最后由 老刘1号 于 2023-4-24 00:02 编辑
好久没写bat了,写个玩玩
仅供娱乐,速度奇慢,不建议使用
如果有bug请自行修复,不要找我,当然如果没有那更好了(x
输入:input.png
输出:new.png- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- (
- for /f "skip=2 delims=" %%. in ('certutil input.png ^| find /v "CertUtil"') do (
- for /f "tokens=2-17 delims= " %%a in ("%%.") do (
- if defined prev (
- rem 这么写是因为最后一行得做特殊处理(certutil输出格式不标准)
- echo !prev!
- )
- if not defined t (
- rem 对第一行的16个hex,不显示前4个,就相当于丢掉了
- set t=啊
- rem 前四个hex也就是%%a %%b %%c %%d 扔掉,,
- set "prev=%%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p"
- ) else (
- set "prev=%%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p"
- )
- )
- set "lastline=%%."
- )
- rem echo !lastline!
- )> newhex.txt
- (
- rem 针对最后一行的特殊处理
- rem flag1 -> 读到了第一个非空格的字符
- rem flag2 -> 空格分割的第一个字符串读完了
- :trim
- set "char=!lastline:~,1!"
- rem echo !char!
- rem pause
- if "!char!" == " " (
- if "!flag1!" == "yes" set flag2=yes
- set "lastline=!lastline:~1!"
- ) else (
- if "!flag2!" == "yes" goto ok
- set flag1=yes
- set "lastline=!lastline:~1!"
- )
- goto trim
- :ok
- rem 观察certutil输出,hex部分最长48
- rem echo ll: !lastline!
- rem echo lltrim: !lastline:~,48!
- >>newhex.txt echo !lastline:~,48!
- )
- rem > newhex.txt
- certutil -decodehex newhex.txt new.png
- pause
复制代码 用certutil结合base64做一些处理也可以,不过太麻烦了我懒得写‘
那个newhex.txt是临时文件,运行完了之后可以删了 |