下面你可以找到我将使用的两个示例文本文件的内容。example1.txt
和 obf_example1.txt
. 后者包含的字符串是 example1.txt
但在文件的最后有一些混淆的字符串。
example1.txt
:
adasdkasdaksdasdkjlasdjasndjasd.
obf_example1.txt
:
ŠxpÃÒ²Ø-Gêÿ ój"f>ïí H€À(ø4$/+#6Ni9Pvü¶ |CF CÀ¾ý~ª-°à9ÉOÿ V[o¦.E…-Š ƒ9Ú\žê*D´ß()^“£¹ìÅjXÑÍ¥â(¨µ×d'«P|I*èSººº&)Ø|̉ òÔ®¥Ô$LÁ:9ŠLá{¶nZÒبNÙÀØŒ‹0õ´Sék›áÇÉîÆbËF§BЄƒöZKaÒR ²°ÅšDn?+¶()IªP›$ÇEv©¡k€[ßè¨×q-Ëk!µTóPA²—: A ?ÉEEEGÐJúÌ©ÒWµHB¡aäXû|ÓË BPÁwr„Ûi¥åܺÈQ÷ORàSb,Šv¢D ,Žb’(2 öb¢wtKzíĦ#ï¯u©²Ù aîR隬ëÌTbà÷¥3ÄtSGì´R$)X Šù
'¹¨D³ÞeOK3!{·‹¦cäиNÅô:Na1žAÇ1ø8 &Fuôë %¸T¯_òMå†C"ý¤F ™º„Iµºí4Ü¡ˆc!ì•+3 ‰‹M K@JÁ«8¢bsL†!Ù“àšn·öMå•Œ&ýèvÀ}¨?¦hùÊò(É@Žf~5‰‘qØçþƒ‰Å²ÓÖÊJU•âNWÁ«L¼Y”$G¢ßè&§ÖÉØŒS‘WàË„°SØW Ш´_è%‚Å¢ø.ãÃð”#X^þ*1þ‚q85¡lÒ‚Ò>‘¸ÿ £ôQôz#ø¤ÎõÚªï|Xö%;åÍËûGú+îUƒö³‰›p U±Ò ðtÜGÜÿ ð,åXÿ k8È I”ÿ “½¿Ð`¨u5=SÓqyFÈ É8ôã¨ð£è6’H@lÄI10‚Ö§ÑdµÖ?t¡]D†9Zj,¥EɺÜEq¤@,ìn—¢º‚´€bc·ú¨Lû£ÿ Ó×ÿÙ||adasdkasdaksdasdkjlasdjasndjasd.
当我运行以下powershell命令 example.txt
在一个批处理文件中,它工作了,我得到了example.txt的输出。
@echo off
for /f "delims=" %%a in ('powershell Get-Content .\example.txt') do set _output=%%a
echo %_output%
adasdkasdaksdasdkjlasdjasndjasd
到目前为止还不错
然而,当我运行上面的powershell命令时,我发现 obf_example1.txt
但它不工作,我得到以下错误信息。
'¹¨D³ÃzeOK3!{·â?¹Â¦cäÃ?Â?¸Â?NÃ.ô:Na1žAÃ╬1ø8
The command "FuôëÂ" is either misspelled or could not be found.
The command "ýèvÃ?}¨?¦hùÃSÂ?ò" is either misspelled or could not be found.
为什么?我想,不要紧。因为我只对最后一个感兴趣 n
两字 example1.txt
和 obf_example1.txt
因此,我的想法是提取最后的 n
字符,并检查是否可以看到输出的 obf_example1.txt
然后。为了检查我的想法是否可行,我运行下面的命令来进行 example1.txt
以获得最后4个字符为例。
@echo off
for /f "delims=" %%a in ('powershell $a=Get-Content .\example.txt; $a.substring^(0,$a.length-4^)') do set _output=%%a
echo.%_output%
它没有显示任何东西,虽然。%_output%
似乎是空的。如何解决这个问题?修正版能不能适用于 obf_example1.txt
以便我在那里得到一个输出而不是上面的错误信息?
你可以尝试读取最后4个字节,如果你真的从一个明显不是文本文件的文件中读取文本字符。(我的猜测是,它是隐藏在二进制文件中的文本,可能是一个图形文件).
@For /F Delims^=^ EOL^= %%G In (
'%__AppDir__%WindowsPowerShell\v1.0\powershell.exe -NoP^
"$f=[IO.File]::OpenRead('C:\Users\Ferit\Desktop\obf_example1.txt');"^
"$f.Seek(-4,[System.IO.SeekOrigin]::End)|Out-Null;$buffer=new-object Byte[] 4;"^
"$f.Read($buffer,0,4)|Out-Null;$f.Close();"^
"[System.Text.Encoding]::UTF8.GetString($buffer)"')Do @Set "_output=%%G"
@Set _output 2>NUL&&Pause
不要忘记修改文本文件路径。(在线 3
)和三个实例 4
如果你想要更多或更少的字节。最后一行只是为了给你看输出。(你显然会用你自己的代码代替).
显然,你要找的那段文字是在后面的 ||
.
在PowerShell中,你可以通过使用
((Get-Content 'D:\Test\obf_example1.txt' -Raw) -split '\|\|')[-1]
返回
adasdkasdaksdasdkjlasdjasndjasd。
这不是你想要的吗?
下面的方法可以让我得到 "清晰文本 "的部分,在 ||
(从你的例子)。
for /f "delims=" %%a in (.\obf_example1.txt) do set "_output=%%a"
set _output
echo testing last 10: %_output:~-10%
set "_output=%_output:*||=%"
set _output
echo %_output%
(可能对不同编码的文本文件无效)
(考虑Powershell - cmd
对行长有限制,容易被淹没)