我正在尝试仅使用 PowerShell 从命令行执行二进制十六进制编辑。我已经部分成功地用这个片段执行了十六进制替换。我的问题出现时123456
发生多次,因为替换只应该在特定位置进行。
Note:该片段需要Convert-ByteArrayToHexString
and Convert-HexStringToByteArray
显示功能here https://www.sans.org/blog/powershell-byte-array-and-hex-functions/.
$readin = [System.IO.File]::ReadAllBytes("C:\OldFile.exe");
$hx = Convert-ByteArrayToHexString $readin -Width 40 -Delimiter "";
$hx = $hx -replace "123456","FFFFFF";
$hx = "0x" + $hx;
$writeout = Convert-HexStringToByteArray $hx;
Set-Content -Value $writeout -Encoding byte -Path "C:\NewFile.exe";
如何在 PowerShell 中指定偏移位置而不是使用这个粗略的-replace
命令?
您已经有了一个字节数组,因此您可以简单地修改任何给定偏移处的字节。
$bytes = [System.IO.File]::ReadAllBytes("C:\OldFile.exe")
$offset = 23
$bytes[$offset] = 0xFF
$bytes[$offset+1] = 0xFF
$bytes[$offset+2] = 0xFF
[System.IO.File]::WriteAllBytes("C:\NewFile.exe", $bytes)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)