У вас две проблемы с этим кодом.Во-первых, это байтовый массив, его элементы не содержат данные о вашем ресурсе, а случайные данные, начиная с адреса вашего указателя 'src'.Используйте указатель на TByteArray следующим образом:
var
B: PByteArray absolute src;
index: DWORD;
begin
for index := 0 to len - 1 do
begin
B^[index] := B^[index] xor 5; //just to test if its working
end;
..
Во-вторых, вы все равно получите AV для попытки изменить сегмент памяти только для чтения.В зависимости от того, что вы пытаетесь сделать, вы можете использовать VirtualProtect
на «байтах» перед вызовом «crypt», или скопировать память в байтовый массив и изменить ее там, или использовать BeginUpdateResource
- UpdateResource
- EndUpdateResource
если вы пытаетесь изменить ресурс.