如何使用 Nim 在特定地址位置编辑二进制文件?
How to edit a binary at specific address locations using Nim?
我试图了解如何使用 Nim 修改 Windows 可执行文件以在文件的特定位置写入 NOP。在 Python 中,我这样做如下:
with open('file.exe', 'r+b') as f:
f.seek(0x0014bc0f)
f.write(binascii.unhexlify('9090'))
f.seek(0x0014bc18)
f.write(binascii.unhexlify('9090'))
但在 Nim 中我找不到必要的方法来完成对特定地址的查找以及如何正确输入这些操作码。我对 Nim 很陌生,不同的文件操作可能性有点令人困惑。
io 的 docs 非常好,但首先要开始:
- 打开一个文件进行读写(相当于'r+')是:
let f = open("file.exe",fmReadWriteExisting)
- 相当于此处的
with
,以确保在出现任何错误时关闭文件:
defer: f.close
- 寻找偏移量(默认字节数相对于开始):
f.setFilePos(0x014bc0f)
- 在该位置写入两个字节 (nop nop)
f.write("\x90\x90")
查看每个过程的文档以获得更多选项
我试图了解如何使用 Nim 修改 Windows 可执行文件以在文件的特定位置写入 NOP。在 Python 中,我这样做如下:
with open('file.exe', 'r+b') as f:
f.seek(0x0014bc0f)
f.write(binascii.unhexlify('9090'))
f.seek(0x0014bc18)
f.write(binascii.unhexlify('9090'))
但在 Nim 中我找不到必要的方法来完成对特定地址的查找以及如何正确输入这些操作码。我对 Nim 很陌生,不同的文件操作可能性有点令人困惑。
io 的 docs 非常好,但首先要开始:
- 打开一个文件进行读写(相当于'r+')是:
let f = open("file.exe",fmReadWriteExisting)
- 相当于此处的
with
,以确保在出现任何错误时关闭文件:
defer: f.close
- 寻找偏移量(默认字节数相对于开始):
f.setFilePos(0x014bc0f)
- 在该位置写入两个字节 (nop nop)
f.write("\x90\x90")
查看每个过程的文档以获得更多选项