Ruby 中的 XOR 二进制文件
XOR binary file in Ruby
我正在尝试在 Ruby 中创建一个 "xor" 函数,它接收一个二进制文件和一个十六进制值的输入,并在输出中生成一个 xored 二进制文件。
File.open("myfile.exe.xor",'w') do |f_xor|
f_xor.puts File.open("myfile.exe", 'rb').to_i ^ 0xFF
end
此代码似乎无法 return 正确的 xored 文件,因为预期的 MD5 不同。
到目前为止,我一直在为 Linux 使用 XOR 命令行工具,但我想切换到与 OS 无关的版本,以便在 Windows.
上部署代码
你能帮我了解一下哪里出了问题吗?
在文件句柄上调用 to_i
returns 它的低级标识符,一个单数,仅此而已。
如果你想对字节本身进行操作:
File.open(input_file, 'rb') do |f|
File.open(output_file, 'wb') do |o|
o.write(
f.read.bytes.collect do |byte|
byte ^ xor_value
end.pack("C*")
)
end
end
这里的关键是对文件中的每个字节进行异或运算,然后写出结果。使用 puts
是错误的,因为它附加了一个换行符。
我正在尝试在 Ruby 中创建一个 "xor" 函数,它接收一个二进制文件和一个十六进制值的输入,并在输出中生成一个 xored 二进制文件。
File.open("myfile.exe.xor",'w') do |f_xor|
f_xor.puts File.open("myfile.exe", 'rb').to_i ^ 0xFF
end
此代码似乎无法 return 正确的 xored 文件,因为预期的 MD5 不同。 到目前为止,我一直在为 Linux 使用 XOR 命令行工具,但我想切换到与 OS 无关的版本,以便在 Windows.
上部署代码你能帮我了解一下哪里出了问题吗?
在文件句柄上调用 to_i
returns 它的低级标识符,一个单数,仅此而已。
如果你想对字节本身进行操作:
File.open(input_file, 'rb') do |f|
File.open(output_file, 'wb') do |o|
o.write(
f.read.bytes.collect do |byte|
byte ^ xor_value
end.pack("C*")
)
end
end
这里的关键是对文件中的每个字节进行异或运算,然后写出结果。使用 puts
是错误的,因为它附加了一个换行符。