【发布时间】:2017-10-18 13:17:12
【问题描述】:
我试图通过尝试将 BYTE(无符号字符)直接传递给函数而不先定义它来对 BYTE(无符号字符)执行 XOR 加密。
异或函数:
void xor(BYTE input[], BYTE output[]) {
BYTE key[] = { 'T', 'A', 'M' }; //Can be any chars, and any size array
int i;
for (i = 0; i < sizeof(input); i++) {
output[i] = input[i] ^ key[i % (sizeof(key) / sizeof(BYTE))];
}
BYTE 数组示例:
BYTE Shellcode[] =
{
0x48, 0x83, 0xEC, 0x08,
};
问题是我不想在不加密的情况下保存 BYTE 数组,因为它会暴露在内存中。
如何不先定义就直接将 BYTE 数组传递给函数?
使用包含字符串的简单 char 数组当然很容易,但我不知道如何使用整数值而不是字符串文字来传递字节数组。
【问题讨论】:
-
如果你可以将它作为输入传递给函数,它必须暴露在内存中。如果你使用字符串文字,它也会暴露在内存中(和可执行文件中)。
-
sizeof(input)是指针的大小,而不是数组的大小。 -
您的函数已损坏:您不能在函数内部使用
sizeof来确定作为参数传递给该函数的数组的长度。这主要是因为你不能传递一个数组——无论你认为这是你在做什么,实际上你是在传递一个指向第一个数组元素的指针。这样的指针不携带有关数组中元素数量的信息。 -
有道理,谢谢!猜猜我会硬编码输入长度!
-
对我来说这还不清楚。您是否在问如何避免数据存储在内存中但仍然可以进入 CPU 并被处理?如果是这样......没有一般的方法可以做到这一点。但在某些系统上,这可能取决于硬件架构。此外,您可能必须编写汇编代码而不是 C。顺便说一句 - 您从哪里获得输入?
标签: c windows encryption xor