“\x5b\x4d\x6f etc..”在 Python 中是什么意思?

What does the "\x5b\x4d\x6f etc.." mean in Python?

这是我第一次post在这里,所以如果我有任何错误,请原谅。

所以,我在 Metasploit 页面上四处浏览,发现了这些奇怪的代码类型。我尝试在 google 和此处搜索它,但找不到像我一样的任何其他问题和答案。我还注意到 Elliot 在 Python 中编程时使用了 "Mr. Robot" 中的方法。我可以看到该代码通常用于病毒,但我需要知道为什么。这是我使用此方法找到的代码:

buf += "\x5b\x4d\x6f\x76\x69\x65\x50\x6c\x61\x79\x5d\x0d\x0a\x46\x69\x6c\x65\x4e\x61\x6d\x65\x30\x3d\x43\x3a\x5c"

该代码是以十六进制编码的 ASCII 字符序列。 可以直接打印。

print('\x5b\x4d\x6f\x76\x69\x65\x50\x6c\x61\x79\x5d\x0d\x0a\x46\x69\x6c\x65\x4e\x61\x6d\x65\x30\x3d\x43\x3a\x5c')

结果是:

[MoviePlay]
FileName0=C:\

他们使用 Metasploit,更具体地说是 msfvenom,专门为精心制作或利用不同编码的文档(docs、ppt、xls 等)等文件创建或生成 shellcode。

它是一个字符串,就像任何其他字符串一样 "Hello World!"。但是,它是以不同的方式编写的。在计算机中,根据编码,每个字符对应一个数字,称为代码点。您可能听说过的一种编码是 ASCII, another is UTF-8。举个例子,在这两种编码中,字母 H 对应数字 72。在 Python 中,通常使用匹配的字母指定一个字符串,如 "Hello World!"。但是,也可以使用代码点。在 python 中,这可以用 \xab 表示,其中 ab 替换为代码点的十六进制形式。所以 H 将变为 '\x48',因为 48 是 72 的十六进制表示法,即字母 H 的代码点。在这种表示法中,"Hello World!" 变为 "\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21"

您指定的字符串包含十六进制代码点 5b(十进制 91,字符的代码点 [),后跟代码点 4d (M) 等,导致完整的字符串 [MoviePlay]\r\nFileName0=C:\。这里的\r\n是特殊字符,一起代表换行符,所以也可以读成:

[MoviePlay]
FileName0=C:\

原则上,这种表示法不一定在病毒中找到,但这种编程通常需要对内存中的数字进行非常具体的操作,而无需过多考虑所表示的实际字符通过这些数字,这样就可以解释为什么你会看到它出现在那里。