【问题标题】:python from hex to shellcode formatpython从十六进制到shellcode格式
【发布时间】:2017-09-19 14:48:41
【问题描述】:

我尝试将十六进制字符串转换为 shellcode 格式 例如:我有一个像 aabbccddeeff11223344 这样的十六进制字符串文件 我想通过python转换它以显示这种确切的格式: "\xaa\xbb\xcc\xdd\xee\xff\x11\x22\x33\x44" 包括引号 ""

我的代码是:

with open("file","r") as f:
    a = f.read()
    b = "\\x".join(a[i:i+2] for i in range(0, len(a), 2))
    print b

所以我的输出是aa\xbb\xcc\xdd\xee\xff\x11\x22\x33\x44\x

我知道我可以通过 sed 命令做到这一点,但我想知道如何通过 python 来完成。

【问题讨论】:

    标签: python format hex shellcode


    【解决方案1】:

    binascii 标准模块将在这里提供帮助:

    import binascii
    
    print repr(binascii.unhexlify("aabbccddeeff11223344"))
    

    输出:

    >>> print repr(binascii.unhexlify("aabbccddeeff11223344"))
    '\xaa\xbb\xcc\xdd\xee\xff\x11"3D'
    

    【讨论】:

    • 谢谢。所以输出缺少\x22\x33\x44。我收到错误“类型错误:奇数长度字符串”。
    • @kluo,不,我的答案中的代码输出没有缺少任何内容,并且代码没有导致任何错误。请仔细检查您的运行方式,并记住 '\x44' == 'D''\x33' == '3''\x22' == '"',这正是这段代码所产生的。
    • 哦,我明白了。我们能以某种方式保持原来的十六进制格式吗?
    • @kluo,我相信没有必要:编译器会很好地处理十六进制转义和文字 ASCII 字符的混合。它们是相同的东西
    • 我已将 aabbccddeeff11223344 放入文件调用 'test': 和以下代码: import binascii with open ("test","r") as f: a = f.read() b = repr (binascii.unhexlify(a)) print b 我得到 TypeError: Odd length string。这很奇怪
    猜你喜欢
    • 2021-11-20
    • 2012-08-01
    • 2012-08-15
    • 1970-01-01
    • 2013-01-21
    • 2023-03-14
    • 2020-05-14
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多