먼저 BYTE (부호없는 char)에 XOR 암호화를 수행하려고 시도합니다. 즉, 먼저 정의하지 않고 함수에 직접 전달하려고합니다.XOR 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 배열을 정의하지 않고 함수에 전달할 수 있습니까?
문자열을 포함하는 간단한 char 배열을 사용하면 물론 쉽게 될 수 있지만 문자열 리터럴 대신 정수 값을 사용하여 바이트 배열을 전달하는 방법을 찾을 수 없습니다.
함수 입력으로 전달할 수 있으면 메모리에 노출되어야합니다. 문자열 리터럴을 사용하면 메모리 및 실행 파일에도 노출됩니다. – interjay
'sizeof (input)'는 배열이 아닌 포인터의 크기입니다. – mch
함수가 깨졌습니다. 함수 내에서 'sizeof'를 사용하여 해당 함수에 전달 된 배열의 길이를 인수로 사용할 수 없습니다. 이것은 주로 여러분이 * 배열을 전달할 수 없기 때문에 발생합니다 - 여러분이 생각하고있는 곳이면, 실제로는 첫 번째 배열 요소에 포인터를 전달하고있는 것입니다. 이러한 포인터는 배열의 요소 수에 대한 정보를 가지고 있지 않습니다. –