Python 和 C++ 之间的 XOR

XOR between Python and C++

我编写了一个 Python 脚本 (Python v3.9) 来给我 XOR 加密字符串的小端输出。然后我尝试编写一个 C++ 程序,该程序将使用相同的 XOR 密钥解码这些字节。我的 Python 脚本如下。

import itertools

stringMessage = "TEST STRING !@#"
xorKey = "Hello324234523"

def xor(message, key):
    toret = ''
    for c, k in zip(message, itertools.cycle(key)):
        toret += chr(ord(c) ^ ord(k))
    return toret

encrypted = xor(stringMessage, xorKey)

print("".join("\x{:02x}".format(ord(c)) for c in encrypted))

最终结果是 \x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b,然后像这样手动复制到 C++ 源中..

    char encryptedMessage[] = "\x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b";
    char xorKey[] = "Hello324234523";
    char decryptedMessage[sizeof encryptedMessage];
    int j = 0;
    for (int i = 0; i < sizeof encryptedMessage; i++) {
        if (j == sizeof xorKey - 1) j = 0;
        decryptedMessage[i] = encryptedMessage[i] ^ xorKey[j];
        j++;
    }
    printf("-------------------------\n");
    printf(decryptedMessage);

但是当我编译并执行我的 C++ 程序时,我得到的不是 TEST STRING !@#,而是 TEST STRING !@#e∟ ?8O`ff{}s§‼sk。我不明白额外的 e∟ ?8O`ff{}s§‼sk 字符串是什么。

已将 for (int i = 0; i < sizeof shellcode; i++) { 更改为 for (int i = 0; i < sizeof shellcode - 1; i++) {,现在可以使用了!