查看: 2504|回复: 13
收起左侧

[分享] 黄金率0.618在提取特征码中的作用

[复制链接]
studycpp
发表于 2011-11-27 22:12:41 | 显示全部楼层 |阅读模式
本帖最后由 studycpp 于 2011-11-27 22:13 编辑

有这样一篇文章描述了 金山等模糊hash算法
http://bbs.kafan.cn/forum.php?mod=viewthread&tid=1005272

本人通过对近10000个可执行文件等文件的研究,发现文件的关键执行部分在文件的头部 ,整个位置0.618处,以及1-0.618处 和文件末尾,因此微特征码可以从这几处提取,已经用于UncleAV的研制。文件的起始位置可以定义为PE header
ring3 code
  1. ///1 read
  2.         DWORD realRead=0,filePos=0;
  3.         DWORD ptrLow;BOOL readRet;
  4.         ptrLow=SetFilePointer(hFile,filePos,NULL,FILE_BEGIN);
  5.         if (INVALID_SET_FILE_POINTER==ptrLow &&
  6.                 (readRet = GetLastError()) != NO_ERROR )
  7.         {
  8.                 return ret;
  9.         }
  10.         readRet=ReadFile(hFile,calcData,FILE_READ_BUFFER_LEN,&realRead,NULL);

  11.         if (readRet==FALSE)
  12.         {
  13.                 return ret;
  14.         }


  15.         if (pfileInfo->dwFileLen<=FILE_HASH_MYHASH_LEN)
  16.         {
  17.                 ret=GetHash(CALG_SHA,calcData,FILE_HASH_MYHASH_LEN,pfileInfo->pbMyHash,pfileInfo->myHashLen);
  18.                 return ret;
  19.         }


  20.         ///2 read
  21.         filePos=(DWORD)(pfileInfo->dwFileLen*0.618);
  22.         SetFilePointer(hFile,filePos,NULL,FILE_END);       
  23.         ReadFile(hFile,&calcData[FILE_READ_BUFFER_LEN],FILE_READ_BUFFER_LEN,&realRead,NULL);

  24.         ///3 read
  25.         filePos=(DWORD)(pfileInfo->dwFileLen*0.618);
  26.         SetFilePointer(hFile,filePos,NULL,FILE_BEGIN);       
  27.         ReadFile(hFile,&calcData[FILE_READ_BUFFER_LEN*2],FILE_READ_BUFFER_LEN,&realRead,NULL);


  28.         ///4 read
  29.         filePos=FILE_READ_BUFFER_LEN;
  30.         ptrLow=SetFilePointer(hFile,filePos,NULL,FILE_END);       
  31.         if (INVALID_SET_FILE_POINTER==ptrLow &&
  32.                 (readRet = GetLastError()) != NO_ERROR )
  33.         {
  34.                 return ret;
  35.         }
  36.        
  37.         readRet=ReadFile(hFile,&calcData[FILE_READ_BUFFER_LEN*3],FILE_READ_BUFFER_LEN,&realRead,NULL);

  38.         if (readRet==FALSE)
  39.         {
  40.                 return ret;
  41.         }

  42.     HASh code。。。。。

复制代码
guidanba
发表于 2011-11-27 22:23:56 | 显示全部楼层
黄金分割率无所不能。
690565755
发表于 2011-11-27 23:06:10 | 显示全部楼层
楼主牛人啊,这都发现了,黄金律真的无所不能啊
MagicFuzzX
发表于 2011-11-27 23:10:03 | 显示全部楼层
请问有什么统计学证据可以证明关键代码在这两处??
zhq445078388
发表于 2011-11-28 06:19:47 | 显示全部楼层
本帖最后由 zhq445078388 于 2011-11-28 06:20 编辑

关键执行位置么?
告诉你一个不好的消息
在打花指令时候使用随机位置插入jmp
会让你崩溃的
zhq445078388
发表于 2011-11-28 06:25:44 | 显示全部楼层
本帖最后由 zhq445078388 于 2011-11-28 06:28 编辑

当时我记得 我看了大概300个左右的常规的exe
发现了文件头645字节以后 到整个文件一半多的位置是关键执行点
当时也认为可以用这个做点啥。
然后 有朋友跟我说 让我看看网络上出现的木马样本
我去看了下
说句打击人的话 光E语言的“目的代码打乱”就可以让这个理论崩溃

另外还有一点 文件尾在很多时候是无用的
很多人用来放置一些校验码之类的东西
比如crc之类的
一些质量不高的木马 逃杀金山的方式 也就是
每过一段时间前段部分随机插nop
然后文件尾自动插nop
-oAo-
发表于 2011-11-28 10:10:46 | 显示全部楼层
黄金分割率只是个美好的愿望,黑客没那么傻
天原
发表于 2011-11-28 10:29:37 来自手机 | 显示全部楼层
果然是姐夫那篇…
zhq445078388
发表于 2011-11-28 11:44:21 | 显示全部楼层
天原 发表于 2011-11-28 10:29
果然是姐夫那篇…

JE写的么?。。我想要原文连接去看看~
zhq445078388
发表于 2011-11-28 11:57:35 | 显示全部楼层
天原 发表于 2011-11-28 10:29
果然是姐夫那篇…

je是妹纸 不可能把??
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-2-2 16:50 , Processed in 0.123063 second(s), 16 queries .

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

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