发新话题
打印

【分享】Pclxav木马猎手第一代特征码引擎源代码

本主题由 yuan14121 于 2008-1-5 13:15 关闭

【分享】Pclxav木马猎手第一代特征码引擎源代码

发布原因,主要是因为国内某安全软件长期存在的引擎问题,希望本文可以让其做实质性更新。  

安全软件,要给用户,使用者以安全,而不是麻烦。具体引擎问题表现,是扫描文件,创建一拷贝,再扫描这个拷贝的文件。  

即使象AVP这种杀壳专家,见到壳也不会通通脱掉。也有很大的可能直接在壳中提取病毒定义。  
源代码如下,有部分删节,因本文并不是让所有的人都来写扫描器,且此引擎亦不再使用。  

constcBuf_Size = 65536;  
var fintbuffer:pbytearray;  

procedure CheckInternalBuffer ( aPos : Integer );  

var  
pFR : Integer;  
begin  
if (fIntBufferPos = -1 ) or (aPos < fIntBufferPos) or ((aPos+16) >  
(fIntBufferPos+cBuf_size))  
then begin  
  
 pFR := aPos - (cBuf_size div 2);  
 if pFR < 0  
 then  
 pFR := 0;  
 fIntFile.Position := pFR;  
 fIntFile.Read ( fIntBuffer^, cBuf_Size);  
 fIntBufferPos := pFR;  
end;  
end;  
procedure FreeFile;  
begin  
 if fIntFile <> nil  
then begin  
  
 fIntFile.Free;  
 fIntFile := nil;  
end;  
end;  
function CanOpenFile ( const aName : string ) :Boolean;  
var  
fHandle : THandle ;  
begin  
Result := False;  
//ReadOnly := True;  
if FileExists ( aName )  
then begin  
fhandle:=CreateFileA(pchar(aname ) , GENERIC_READ, FILE_SHARE_READ ,  
NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);  
 if fhandle <> INVALID_HANDLE_VALUE  
 then begin  
closehandle ( fHandle );  
Result := True;  
  
 end;  
end;  
end;  
function LoadFromFile(const Filename: string): Boolean;  
begin  
Result := True;  

fIntFile := newreadfilestream ( filename );  
 try  
fIntFile.Position := 0;  

  
fdatasize2:=fintfile.Size;  
fintbufferpos:=-1;  

Result := True;  
 finally  
  
end  
end;  


function Find ( aBuffer : PChar ; const aCount , aStart , aEnd : Integer  
 ) : Integer;  
 // find something in the current file and return the  
position, -1 if not found const IgnoreCase , SearchText : Boolean  
var  
//pCR : TCursor;  
pChAct : Char;  
pCMem , pCFind , pCHit , pEnd : Integer;  
begin  
Result := -1;  
pEnd := aEnd;  
  
if aCount < 1  
then  
Exit;  

if aStart + aCount > (pEnd+1)  
then  
Exit; // will never be found, if search-part is smaller than  
searched data  
try  

 pCMem := aStart;  
 PCFind := 0;  
 pCHit := pCMem+1;  

 repeat  

 if pCMem > pEnd  
 then  
 Exit;  

 CheckInternalBuffer ( pCMem );  
 PChAct := Char(fIntBuffer [ pCMem - fIntBufferPos]);  

 if ( PChAct = aBuffer[PCFind] )  
 then begin  
if PCFind = (aCount-1)  
then begin  
 Result := PCMem-aCount+1;  
 Exit;  
end  
else begin  
 if PCFind = 0  
 then  
 PCHit := PCMem+1;  
 Inc ( PCMem );  
 Inc ( PCFind );  
end;  
 end  
 else begin  
PCMem := PCHit;  
PCFind := 0;  
PCHit := PCMem+1;  
 end;  
 until False;  


finally  
// Cursor := pCR;  
end;  

end;  
function TForm1.check2(filename:string):boolean;  

const  
cHexChars = ’0123456789ABCDEF’;  
varh,n,x,  
findlen,FindPos,mypos : longint;  
up , findstr:string;  
pSTR : String;  
pCT,pCT1: integer;  
begin  
result:=false;  
findstr,mypos给值:  
 mypos:=mypoint;  
  
pSTR := ’’;  
pCT1 := Length ( findstr ) div 2;  
for pCT := 0 to (Length ( findstr ) div 2) -1  

pStr := pStr + Char ( (Pos ( findstr[pCt*2+1] , cHexChars ) -1) * 16 +  
(Pos ( findstr[pCt*2+2] , cHexChars ) -1));  

 GetMem ( FindBuf , pCT1 );  
try  
  
 FindLen := pCT1;  

 Move ( pStr[1] , FindBuf^, pCt1 );  
  
 FindPos :=Find (findstr, FindBuf , FindLen ,mypos, mypos+findlen-1)  
;  
  
if FindPos = -1  
then exit  

 else  
  
begin  

// do something!  
 result:=true;  
 exit;  

  


end;  
finally  
end;  
 end;  

支持多段定义的代码省略,无非也就是找到后再继续咯。  
支持?忽略部分字节的代码省略,无非改改函数。  
代码很乱,确实,本人一向不大喜欢排整齐,不然怎么出BUG(搞笑)  

此代码是从十六进制编辑器代码中分离的,由于原控件是为使用者编辑文件而作,所以默认是将文件拷到WINDOWS临时文件夹,再修改那个  
拷贝的文件,避免用户误操作。所以使用任何控件,还是得仔细检查源代码意图,必要时修改之,不然对使用者是不利的。  

关于国产杀软,江民不知错就改,剔除可查2000种病毒的某安全软件病毒码,就不能认为有度量;  
瑞星:如能提升国际病毒猎杀力,多多关注国外动向,还是有希望的;  
金山:不要免费赠送用户不需要的东西,未来会更好。  
国外杀软猎杀病毒能力:KAV>MCAFEE>NOD32 未知病毒猎杀力则相反。  

最后一点小小要求,望国人少使用国外多引擎检测,使得国产杀软的底气再足点吧。  

关于本文作者:jike,the2avpro(pclxav)创建者,该软件正运行着第二代特征码引擎,第三代浮动特征码引擎能不能出来尚是未知数。

TOP

是啊!多支持一下国内杀软,就瑞星来说,做的就很不错,在反病毒技术,查杀能力上不比国外的逊色.

TOP

引用:
原帖由 风吹麦浪 于 2008-1-2 18:30 发表
是啊!多支持一下国内杀软,就瑞星来说,做的就很不错,在反病毒技术,查杀能力上不比国外的逊色.
逊色多了

TOP

支持一下啊...谢谢分享

TOP

发新话题