发布原因,主要是因为国内某安全软件长期存在的引擎问题.希望本文可以让其做实质性更新.
安全软件,要给用户,使用者以安全,而不是麻烦
.具体引擎问题表现,是扫描文件,创建一拷贝,再扫描这个拷贝的文件.
即使象AVP这种杀壳专家,见到壳也不会通通脱掉.也有很大的可能直接在壳中提取病毒
定义.
源代码如下,有部分删节,因本文并不是让所有的人都来写扫描器,且此引擎亦不再使用
.
constcBuf_Size=65536;
varfintbuffer:pbytearray;
procedureCheckInternalBuffer(aPos:Integer);
var
pFR:Integer;
begin
if(fIntBufferPos=-1)or(aPos<fIntBufferPos)or((aPos+16)>
(fIntBufferPos+cBuf_size))
thenbegin
pFR:=aPos-(cBuf_sizediv2);
ifpFR<0
then
pFR:=0;
fIntFile.Position:=pFR;
fIntFile.Read(fIntBuffer^,cBuf_Size);
fIntBufferPos:=pFR;
end;
end;
procedureFreeFile;
begin
iffIntFile<>nil
thenbegin
fIntFile.Free;
fIntFile:=nil;
end;
end;
functionCanOpenFile(constaName:string):Boolean;
var
fHandle:THandle;
begin
Result:=False;
//ReadOnly:=True;
ifFileExists(aName)
thenbegin
fhandle:=CreateFileA(pchar(aname),GENERIC_READ,FILE_SHARE_READ,
NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
iffhandle<>INVALID_HANDLE_VALUE
thenbegin
closehandle(fHandle);
Result:=True;
end;
end;
end;
functionLoadFromFile(constFilename:string):Boolean;
begin
Result:=True;
fIntFile:=newreadfilestream(filename);
try
fIntFile.Position:=0;
fdatasize2:=fintfile.Size;
fintbufferpos:=-1;
Result:=True;
finally
end
end;
functionFind(aBuffer:PChar;constaCount,aStart,aEnd:Integer
):Integer;
//findsomethinginthecurrentfileandreturnthe
position,-1ifnotfoundconstIgnoreCase,SearchText:Boolean
var
//pCR:TCursor;
pChAct:Char;
pCMem,pCFind,pCHit,pEnd:Integer;
begin
Result:=-1;
pEnd:=aEnd;
ifaCount<1
then
Exit;
ifaStart+aCount>(pEnd+1)
then
Exit;//willneverbefound,ifsearch-partissmallerthan
searcheddata
try
pCMem:=aStart;
PCFind:=0;
pCHit:=pCMem+1;
repeat
ifpCMem>pEnd
then
Exit;
CheckInternalBuffer(pCMem);
PChAct:=Char(fIntBuffer[pCMem-fIntBufferPos]);
if(PChAct=aBuffer[PCFind])
thenbegin
ifPCFind=(aCount-1)
thenbegin
Result:=PCMem-aCount+1;
Exit;
end
elsebegin
ifPCFind=0
then
PCHit:=PCMem+1;
Inc(PCMem);
Inc(PCFind);
end;
end
elsebegin
PCMem:=PCHit;
PCFind:=0;
PCHit:=PCMem+1;
end;
untilFalse;
finally
//Cursor:=pCR;
end;
end;
functionTForm1.check2(filename:string):boolean;
const
cHexChars=0123456789ABCDEF;
varh,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)div2;
forpCT:=0to(Length(findstr)div2)-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)
ifFindPos=-1
thenexit
else
begin
//dosomething!
result:=true;
exit;
end;
finally
end;
end;
支持多段定义的代码省略,无非也就是找到后再继续咯.
支持?忽略部分字节的代码省略,无非改改函数.
代码很乱,确实,本人一向不大喜欢排整齐,不然怎么出BUG(搞笑)
此代码是从十六进制编辑器代码中分离的,由于原控件是为使用者编辑文件而作,所以默
认是将文件拷到WINDOWS临时文件夹,再修改那个
拷贝的文件,避免用户误操作.
所以使用任何控件,还是得仔细检查源代码意图,必要时修改之,不然对使用者是不利的
.
关于国产杀软,江民不知错就改,剔除可查2000种病毒的某安全软件病毒码,就不能认为
有度量
瑞星,如能提升国际病毒猎杀力,多多关注国外动向,还是有希望的.
金山,不要免费赠送用户不需要的东西,未来会更好.
国外杀软猎杀病毒能力:KAV>MCAFEE>NOD32
未知病毒猎杀力则相反
最后一点小小要求,望国人少使用国外多引擎检测,使得国产杀软的底气再足点吧.
关于本文作者,jike,the2avpro(pclxav)创建者,该软件正运行着第二代特征码引擎,第
三代浮动特征码引擎能不能出来尚是未知数.
联系:jike_man@hotmail.comhttp://crackchina.nease.net/