我尝试在BYTE(unsigned char)上执行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数组当然很容易,但我无法找到如何使用整数值而不是字符串文字传递字节数组。
答案 0 :(得分:0)
问题是我不想在不加密的情况下保存BYTE数组,因为它会在内存中暴露出来。
如何直接将BYTE数组传递给函数而不先定义它?
你不能这样做。它甚至没有意义。 传递字节取决于它们是否已经存储在内存中,对它们执行加密操作也是如此。
此外,如果程序本身应该提供明文,那么就不能避免以某种形式将明文存储在程序图像中。另一方面,如果明文字节是从外部源获得的,那么您可以考虑在输入它们时加密它们。根据细节,可能会避免同时在内存中包含所有明文。
您还可以考虑在加密其内容后擦除输入数组,而不是首先避免使用这样的数组。只需用0或随机字节覆盖它。然而,这对于来自外部源的明文的情况才有用;程序本身提供的数据甚至无需运行程序即可访问。