奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 安全技术 >> 工具介绍 >> pclxav木马猎手第一代特征码引擎源代码
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • 久违的小榕新武器配合

  • 中国黑客常用的八种工

  • 最佳网管工具点评

  • 利用msn控制肉鸡的msn

  • 卡巴斯基设置教程

  • 七款命令行工具,为你

  • 图文实战WinXP SP2防火

  • 菜鸟变老鸟 零起步学习

  • pclxav木马猎手第一代特征码引擎源代码
    字体:

    中华网络安全联盟    作者:佚名    来源:网络    时间:2006-3-19

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

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

    即使象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)创建者,该软件正运行着第二代特征码引擎,第三代浮动特征码引擎能不能出来尚是未知数。
    联系:jike_man@hotmail.com http://crackchina.nease.net

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.