Python中的Hex代码生成器

时间:2014-03-18 20:31:39

标签: python x86 bytecode

我正在尝试在python中为学校中的分配生成一个hexcode生成器。

我想强制执行地址空间,但是,我无法在python中构建真正的十六进制代码。

我的剧本:

 for j in range(0, 100):
       var = "\\x%x" % j
       newpath = "\xa0\xf4\xff"+var
       print newpath

正确打印字节码“\ xa0 \ xf4 \ xff” - 作为正确的十六进制码。但是,我的bruteforcer无法生成真正的十六进制代码,只能生成字符串“\ xab”等。如何生成实际的十六进制代码:基本上,我想生成一个32位机器的整个地址空间。

编辑: 更具体地说,通过查看一些任意输出,您可以看到最后一个“十六进制代码”不被视为十六进制代码,而是一个字符串:

 ���\x5d
 ���\x5e
 ���\x5f
 ���\x60
 ���\x61
 ���\x62
 ���\x63

2 个答案:

答案 0 :(得分:0)

Hex只是数字的不同表示。它使用的是基数16而不是基数10,这是我们通常习惯使用的。

考虑到这一点,任何数字都可以表示为十六进制数字:

for i in range(0, 0x20):
    print "0x%08X" %i

输出

0x00000000
0x00000001
0x00000002
0x00000003
...
0x0000000E
0x0000000F
0x00000010
0x00000011
...

在print语句中使用%X我们说"解释为base 16"。您也可以在其十六进制表示中指定一个数字,就像我在range(0, 0x20)语句中所做的那样。

您看到"\xa0\xf4\xff"的打印输出的原因是因为python无法将该字符串中的值替换为字符并打印下一个最好的东西,即数字的字符串表示形式。不要将四个字节的数组与其32位字表示或其四个字符串表示混淆,它是相同的东西!

我建议您使用内置函数ord()hex()chr()来感受事物的运作方式。例如:

print ord('a')
print hex(10)
print chr(97)

输出:

97
0xa
a

答案 1 :(得分:0)

我认为你需要编写一个函数来获得你想要的输出:

def hexrepr(s):
    quotechar = '"' if s.count("'") >= s.count('"') else "'"
    rep = [quotechar]
    for ch in s:
        # control char?
        if ch != quotechar:
            rep += '\\x{:02x}'.format(ord(ch))
        else: # escape embedded quotechar
            rep += "\\{}".format(ch)
    rep += quotechar
    return "".join(rep)

for j in xrange(100):
    newpath = "\xa0\xf4\xff" + chr(j)
    print hexrepr(newpath)

输出:

"\xa0\xf4\xff\x00"
"\xa0\xf4\xff\x01"
"\xa0\xf4\xff\x02"
"\xa0\xf4\xff\x03"
  ...
"\xa0\xf4\xff\x61"
"\xa0\xf4\xff\x62"
"\xa0\xf4\xff\x63"