楼主: zhq445078388
收起左侧

[技术原创] 【2011年12月20日】动态编译 加快速度 ZMPI自学习反病毒 高级启发式 钓鱼启发式

  [复制链接]
zhq445078388
 楼主| 发表于 2011-8-7 00:20:55 | 显示全部楼层
zhangjianqwe 发表于 2011-8-7 00:18
不过那云做辅佐也是非常好的选择。而抛弃本地。感觉就不行了。如果真能能够本地库和云端库同时配合那就非 ...

各大云都在那么做。。
这个东西不好说 说多了该口水了 打住
zhangjianqwe
发表于 2011-8-7 00:23:41 | 显示全部楼层
zhq445078388 发表于 2011-8-7 00:20
各大云都在那么做。。
这个东西不好说 说多了该口水了 打住

搞过游戏的人应该都非常清楚怎么做的。。更我发现。。。写杀软很少去懂游戏的算法。
yjwfdc
头像被屏蔽
发表于 2011-8-7 00:25:51 | 显示全部楼层
zhq445078388 发表于 2011-8-7 00:12
我提倡的做法是把你们认定的样本都放在一个目录下面
然后发现有错误样本 删除样本 把库删除 重新学 ...

如果真的做杀毒软件,错一个就重新建库,那就死人了。

可以出两个引擎,一个入库用的,一个查杀用的。入库的程序在自己手里,还怕谁调用?
zhangjianqwe
发表于 2011-8-7 00:29:04 | 显示全部楼层
yjwfdc 发表于 2011-8-7 00:25
如果真的做杀毒软件,错一个就重新建库,那就死人了。

可以出两个引擎,一个入库用的,一个查杀用的。 ...

当然不会这样简单的至少会有重组特征的
zhq445078388
 楼主| 发表于 2011-8-7 00:31:41 | 显示全部楼层
yjwfdc 发表于 2011-8-7 00:25
如果真的做杀毒软件,错一个就重新建库,那就死人了。

可以出两个引擎,一个入库用的,一个查杀用的。 ...

有一些特征 如果简单分开 那么可能会重复入库
特征在学习的时候 会经过分割重组的
分割得到7份  分别存入7个库
如果是用入库程序 那么就做不到了
zhangjianqwe
发表于 2011-8-7 00:40:41 | 显示全部楼层
zhq445078388 发表于 2011-8-7 00:31
有一些特征 如果简单分开 那么可能会重复入库
特征在学习的时候 会经过分割重组的
分割得到7份  分别存 ...

  1. //////////////////////////////////////////////////////////////////////
  2. // Construction/Destruction
  3. //////////////////////////////////////////////////////////////////////

  4. CRightPrism::CRightPrism()
  5. {

  6. }

  7. CRightPrism::~CRightPrism()
  8. {

  9. }

  10. bool CRightPrism::InitBase(const C2DGiftWrap& gw2D,float fHeight)
  11. {
  12.         if (gw2D.m_bExceptionOccur)
  13.                 return false;
  14.         AArray<int,int>* pCHVs=gw2D.GetCHVertecies();

  15.         if (!pCHVs)
  16.                 return false;

  17.         m_vCentroid=gw2D.m_vCentroid;
  18.        
  19.         m_nCurVNum=2*pCHVs->GetSize();                //当前顶点数量为2D凸包的顶点数量的2倍

  20.         VertexInfo vInfo;
  21.         vInfo.cDegree=3;                        //直棱拄所有顶点的面度数均为3

  22.         //构造顶点及顶点信息
  23.         for(int i=0;i<pCHVs->GetSize();i++)
  24.         {
  25.                 //同时添加底面和顶面的一个顶点
  26.                 A3DVECTOR3 v=gw2D.m_pVertexes[pCHVs->GetAt(i)];
  27.                 v.y=0.0f;
  28.                 m_arrVertecies.Add(v);
  29.                
  30.                 v.y=fHeight;
  31.                 m_arrVertecies.Add(v);

  32.                 m_arrVertexInfo.Add(vInfo);
  33.                 m_arrVertexInfo.Add(vInfo);
  34.         }
  35.        
  36.         //开始构造平面面片

  37.         //底面
  38.         //取前三个点构造平面几何信息
  39.         A3DVECTOR3 v1(gw2D.m_pVertexes[pCHVs->GetAt(0)]),v2(gw2D.m_pVertexes[pCHVs->GetAt(1)]),v3(gw2D.m_pVertexes[pCHVs->GetAt(2)]);
  40.         CPatch* pPatch=new CPatch(this);
  41.         pPatch->Set(v1,v2,v3);                        //几何信息                       
  42.        
  43.         //依次向Neighbors中添加元素
  44.         VPNeighbor vpn;
  45.         AArray<VPNeighbor,VPNeighbor>& arrNeighbors1=pPatch->GetNeighbors();
  46.         for(i=0;i<pCHVs->GetSize();i++)
  47.         {
  48.                 vpn.vid=2*i;                       
  49.                 arrNeighbors1.Add(vpn);
  50.         }
  51.         //添加到链表
  52.         m_listPatches.AddTail(pPatch);       
  53.        
  54.         //顶面
  55.         //取前三个点,并按照逆序构造平面几何信息
  56.         v1=m_arrVertecies[1];
  57.         v2=m_arrVertecies[3];
  58.         v3=m_arrVertecies[5];

  59.         pPatch=new CPatch(this);
  60.         pPatch->Set(v3,v2,v1);                        //几何信息                       
  61.        
  62.         //依次向Neighbors中添加元素
  63.         AArray<VPNeighbor,VPNeighbor>& arrNeighbors2=pPatch->GetNeighbors();
  64.         //顶面按照逆序添加
  65.         for(i=pCHVs->GetSize()-1;i>=0;i--)
  66.         {
  67.                 vpn.vid=2*i+1;                       
  68.                 arrNeighbors2.Add(vpn);
  69.         }
  70.         //添加到链表
  71.         m_listPatches.AddTail(pPatch);       
  72.        
  73.         //开始添加各个侧面
  74.         for(i=0;i<pCHVs->GetSize();i++)
  75.         {
  76.                 pPatch=new CPatch(this);               
  77.                 AArray<VPNeighbor,VPNeighbor>& arrNeighbors=pPatch->GetNeighbors();
  78.                
  79.                 //每个侧面都是一个矩形
  80.                 if(i<pCHVs->GetSize()-1)
  81.                 {
  82.                         v1=m_arrVertecies[2*i+2];
  83.                         v2=m_arrVertecies[2*i];
  84.                         v3=m_arrVertecies[2*i+1];
  85.                         pPatch->Set(v1,v2,v3);
  86.                        
  87.                         vpn.vid=2*i;
  88.                         arrNeighbors.Add(vpn);

  89.                         vpn.vid=2*i+1;
  90.                         arrNeighbors.Add(vpn);

  91.                         vpn.vid=2*i+3;
  92.                         arrNeighbors.Add(vpn);

  93.                         vpn.vid=2*i+2;
  94.                         arrNeighbors.Add(vpn);
  95.                        
  96.                 }
  97.                 else               
  98.                 {
  99.                         //最后一个矩形的情况比较特殊
  100.                         v1=m_arrVertecies[0];
  101.                         v2=m_arrVertecies[2*i];
  102.                         v3=m_arrVertecies[2*i+1];
  103.                         pPatch->Set(v1,v2,v3);
  104.                        
  105.                         vpn.vid=2*i;
  106.                         arrNeighbors.Add(vpn);

  107.                         vpn.vid=2*i+1;
  108.                         arrNeighbors.Add(vpn);

  109.                         vpn.vid=1;
  110.                         arrNeighbors.Add(vpn);

  111.                         vpn.vid=0;
  112.                         arrNeighbors.Add(vpn);                       
  113.                 }
  114.                 m_listPatches.AddTail(pPatch);
  115.         }       

  116.         m_nOriginPatchNum = m_listPatches.GetCount();
  117.        
  118.         //*
  119.         //初始化删除误差

  120.         //这里应考虑将误差的基置为距离最大的两顶点的距离!

  121.         if(m_fArrRemovedError)
  122.                 delete[] m_fArrRemovedError;
  123.         m_fArrRemovedError=new float[m_nOriginPatchNum+1];
  124.         for(i=0;i<4;i++)
  125.                 m_fArrRemovedError[i]=-1.0f;                        //0,1,2,3都置为无效值

  126.         m_bExceptionOccur=false;
  127.         //*/

  128.         //计算每个patch的邻域patch
  129.         ComputePatchNeighbors();

  130.         //寻找最小删除误差对应的面片
  131.         SearchLeastErrorPatch();       
  132.        
  133.         //如果需要简化则加上下面的代码!
  134.         //ReduceAll();
  135.         //Goto(9);

  136.         return true;
  137. }

  138. void CRightPrism::Export2DObstruct(C2DObstruct* p2DObstruct)
  139. {
  140.         //由于本类支持简化操作,因此真正有效的数据仅为底面片的顶点
  141.         //在初始化本类时,底面片为插入m_listPatches的第一个面片
  142.         ALISTPOSITION CurPatchPos=m_listPatches.GetHeadPosition();
  143.         CPatch *pCurPatch=m_listPatches.GetNext(CurPatchPos);
  144.         vector<A3DVECTOR3> Vertices(pCurPatch->GetVNum(), A3DVECTOR3(0.0f, 0.0f, 0.0f));
  145.         for(int i=0;i<pCurPatch->GetVNum();i++)
  146.                 Vertices[i]=pCurPatch->GetVertex(i);

  147.         p2DObstruct->Init(Vertices);
  148.                
  149. }


  150. }        // end namespace
复制代码
这才好玩
zhangjianqwe
发表于 2011-8-7 00:43:06 | 显示全部楼层
睡觉喽山。有空聊
年下
发表于 2011-8-7 08:40:04 | 显示全部楼层
zhq445078388 发表于 2011-8-6 23:15
原来这样

话说你头像的是伪娘还是真美女

真美女!至于你信不信,反正我是信了
peterwong
发表于 2011-8-7 09:05:59 | 显示全部楼层
小白不敢用
jefffire
头像被屏蔽
发表于 2011-8-7 09:14:14 | 显示全部楼层
本帖最后由 jefffire 于 2011-8-7 09:15 编辑
zhq445078388 发表于 2011-8-6 19:26
将样本放在同一个目录下
然后批量学习该目录
然后去扫描该目录 你就知道了


用了一下。用卡饭4,5日的包学习,然后查6号的包,查出来4个。还算不错
不过,程序学习的都是黑文件,提取的都是强特征,定位7个点,做免杀估计还是没难度。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-6-29 05:01 , Processed in 0.097848 second(s), 14 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表