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)创建者,该软件正运行着第二代特征码引擎,第

三代浮动特征码引擎能不能出来尚是未知数.

联系:jike_man@hotmail.com http://crackchina.nease.net/

时间: 2024-07-28 15:56:04

Pclxav木马猎手第一代特征码引擎源代码_漏洞研究的相关文章

“冲击波”病毒的shellcode源代码_漏洞研究

2年前"冲击波"病毒爆发时,我曾经对它的SHELLCODE进行过分析,现在把我当时写的分析献出来,   让大家看看"一代名毒"是怎样的.一般来说,shellcode都是这样写的,因此只要hook shellcode必须调用的api,判断esp和eip   的差值如果在0x1000以内(也就是说代码在堆栈里运行),那么基本上可以确认系统受到缓冲区溢出攻击,该进程必须马上退出.   当然,有些更厉害的shellcode采用直接调用native api,raw socke

backdoor病毒珍藏绝密源代码_漏洞研究

--=\\backdoor.c\\=-- /*   A rip off a sockets tutorial i found somewhere cause I didn't feel like   writing stupid basic sockets code when I had it in my src directory   already.   */   /* Greets:   Undernet Channels:   #rootworm, #hacktech, #hyperli

JSP中的源代码泄漏问题_漏洞研究

摘要:在JSP技术得到广泛应用的同时,由于源代码泄漏而引起的JSP安全性也受到了广泛的关注.本文分析了几种造成源代码泄漏的因素,并针对每种因素提出了各自的解决方法.  关键词:JSP  源代码 泄漏   引言  JSP编程语言自从推出之日起,由于它的快速.平台无关.可扩展.面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere.BEA公司的WebLogic等等,也有越来越多的网站开始将自己的平台架构在JSP 环境中.    但是随之而来的

破解别人的asp木马密码的方法_漏洞研究

    破解目标:破解一asp木马的经过加密的登破解asp木马密码陆密码.由于木马里没有版本说明,具体也不知道这木马叫什么名.      破解思路:两种,用加密后的密码替换密文和利用密文及加密算法反解出密码.前者根本算不上真正的破解.      破解目的:没事破着玩.      如果得不到asp源代码,那么可以说对破解密码,我毫无胜算.有位华夏的朋友说他得到了一个web的权限,  但是无法修改主页,发现其中已经有个asp木马,但密码是经过加密的.那么就有了这篇动画了.好了,废  话太多了,那么,

特络伊木马如何利用文件关联和设置名_漏洞研究

       木马对文件关联的利用  我们知道,在注册表HKEY_LOCAL_MACHINE Software Microsoft Windows CurrentVersionRun下可以加载程序,使之开机时自动运行,类似"Run"这样的子键在注册表中还有几处,均以"Run"开头,如RunOnce.RunServices等.除了这种方法,还有一种修改注册表的方法也可以使程序自启动. 具体说来,就是更改文件的打开方式,这样就可以使程序跟随您打开的那种文件类型一起启动.

木马静态变动态 DLL木马程序大揭秘_漏洞研究

相信经常玩木马的朋友们都会知道一些木马的特性,也会有自己最喜爱的木马,不过,很多朋友依然不知道近年兴起的"DLL木马"为何物.什么是"DLL木马"呢?它与一般的木马有什么不同?  一.从DLL技术说起 要了解DLL木马,就必须知道这个"DLL"是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里.在那时候,写程序是一件繁琐的事情,因为每个程序的代码都是独立的,有时候为了实现一个功能,就要为此写很多代码,后来随着编程技术发展,程序员们把

利用图片做木马应用完全解析_漏洞研究

何谓BMP网页木马?它和过去早就用臭了的MIME头漏洞的木马不同,MIME木马是把一个EXE文件用MIME编码为一个EML(OUT LOOK信件)文件,放到网页上利用IE和OE的编码漏洞实现自动下载和执行.    然而BMP木马就不同,它把一个EXE文件伪装成一个BMP图片文件,欺骗IE自动下载,再利用网页中的JAVAscript脚本查找客户端的Internet临时文件夹,找到下载后的BMP文件,把它拷贝到TEMP目录.再编写一个脚本把找到的BMP文件用DEBUG还原成EXE,并把它放到注册表启

新兴木马NameLess BackDoor复仇记(图)_漏洞研究

NameLess BackDoor是一款新兴的DLL型木马,这个木马出世没多久,但绝对是一匹极有潜质的千里驹.说起NameLess BackDoor的前身来,不得不提及榕哥的BITS和WinEggDrop的PortLess.这两款大名鼎鼎的木马曾经都风光一时,可以说是木马界的元老了.而NameLess BackDoor则是汇集了上面这两款木马的优点,在目标机器的进程管理器中看不到,平时没有端口,提供正向连接和反向连接两种功能.同时NameLess BackDoor又去除了各处的缺点,比如反弹的c

网友举报:屁屁宽频软件自带木马病毒(图)_漏洞研究

昨天下载屁屁宽频.测试验证该程序有木马病毒. 系统启动项加载mstasks.exe 下面引自瑞星升级报告之: 27.Trojan.SdBot.gen.p 破坏方法:拷贝自己到系统目录,命名为MSTASKS.EXE,登记为自启动. 病毒驻留内存,非法连接hirc.3322.org,将本地信息泄漏出去. http://virus.chinavnet.com/newSite/Channels/Anti_Virus/Upgrade_Report/Upgrade_Report/200308/18-1708