特征码定位查杀 简单提取一段特征码字段。 代码编写。...// 病毒的具体名称 0x1a20, // 病毒在文件中的偏移位置 "\x05\x00\x00\x00\x90\x00\x00\x80" // 病毒特征码...// 病毒的具体名称 0x3a10, // 病毒在文件中的偏移位置 "\x02\x00\x00\x00\x30\x00\x00\x90" // 病毒特征码...SetFilePointer(hFile, sign[x].FileOffset, NULL, FILE_BEGIN); // 读取目标程序指定位置的特征码到内存中 ReadFile(hFile..., buffer, sizeof(buffer), &dwNum, NULL); // 对比内存中两个特征码是否相等 if (memcmp(sign[x].VirusSign, buffer,
OD载入后,CTRL+G,转到00401000处 然后就CTRL+B,查找特征码740E8BD38B83????????FF93????????...F9运行程序吧,当程序运行后, 然后CTRL+B,查找FF 55 FC 5F 5E 四、VC++程序(非MFC程序) OD载入后,单击鼠标右键,选择"查找",然后是"所有命令” 在弹出的输入框里,写入特征代码...sub eax,0a 然后断下后,F7跟进,F8几次,就来到按钮事件了 五、MFC类程序 当然判断MFC和非MFC的程序,靠大家自己去判断了 运行程序然后就CTRL+F,查找特征代码:sub eax,...总结类:各种语言按钮事件特征码 VB: 816C24 Delphi & BC++ : 740E8BD38B83????????FF93???????? ...原文地址《各种语言按钮事件特征码》
CodeBuff, 0x100, fp); fclose(fp); delete[]CodeBuff; return TRUE; } 完善3: 封装一个偏移值,因为如果找到了特征码但是得到的是特征码的基址...,我们还要知道怎么从这个基址偏移得到我们想要的内容,所以这里就在字符串里面添加一些特征码: 比如这里: image.png 要往下偏移,也就是+地址,+8个byte才得到我们想要的地址,那么我们就可以把字符串写成这样...temp, Flag)) { vc.push_back(temp); } } 完善4: 一个文件里面肯定有很多内容,需要把整个文件的字符串提出来,然后分割,然后把特征码拿去匹配...总结 通过匹配特征码,这里机器码特征码硬编码不区分。...然后通过匹配到的特征码(因为特征码必须来多一点,不然很容易有相同的),特征码里面有一些值是会变的就采用模糊匹配来实现,然后得到特征码匹配上了的首地址,再通过字符串里面的首地址偏移,得到了要的数据的起始地址
如果特征码不在之前的某几块的范围内的话,那杀软在查杀的时候也不会杀除这些文件,因此前几块那些不包含特征码的块文件就会在查杀的时候被保留下来。...则说明这个块文件多露出的那一块原始数据包含了病毒特征码。...我们定位特征码的位置,既不能说是看被查出有毒的,也不能说是没被查出有毒的。准确说是第一个被查出有毒的。第一此被查出有毒的那个区段就是特征码的一个范围。...因为现在的杀毒软件一般是复合定位,也就是说多特征码定位,而且发现任何一处特征码就能确定出病毒来,所以MyCCL在确定出一处特征码(这里是第二个文件块)时,会提醒用户要不要继续分析。...点击特征区间,会出现我们之前找到的特征码范围。
实现内存特征码扫描,此种扫描方式支持模糊匹配,可使用??代替模糊匹配数值。...std; #define BLOCKMAXSIZE 409600//每次读取内存的最大大小 BYTE* MemoryData;//每次将读取的内存读入这里 short Next[260]; //特征码转字节集...{ int len = 0; WORD TzmLength = strlen(Tzm) / 3 + 1; for (int i = 0; i < strlen(Tzm); )//将十六进制特征码转为十进制...} } return TzmLength; } //获取Next数组 void GetNext(short* next, WORD* Tzm, WORD TzmLength) { //特征码...int num = Next[MemoryData[i + TzmLength]]; if (num == -1) i += (TzmLength - Next[256]);//如果特征码有问号
0BOOL ret = IsPeFile(lpMapAddress, 0);printf("是否为PE文件: %d \n", ret);system("pause");return 0;}判断PE文件特征码...= IMAGE_NT_SIGNATURE)return FALSE;}return TRUE;}// 扫描特征码,对比void GetPeSignature(LPCWSTR FilePath){typedef...[32 + 1]; // 存储特征码大小32,其中的1是结束符.}SIGN, *pSIGN;// 定义特征码与特征描述信息,你可以自己去提取一段特征码SIGN Sign[2] = {{"Microsoft..., NULL, FILE_BEGIN);// 读取目标程序指定位置的特征码到内存中ReadFile(hFile, buffer, sizeof(buffer), &dwNum, NULL);// 对比内存中两个特征码是否相等...,然后按照我写好的格式进行增加,例如我是用vs2013编译的,那么检测结果就可能会是vs2013,特征码的提取应尽量保证一致性。
获取网卡mac地址一般需要用到IPHLPAPI模块,下面该模块用来获取mac地址的代码(内部名为: IPHLPAPI.GetAdaptersInfo),如果要查找该地址,可以搜索其前24byte的特征码...:8B FF 55 8B EC 51 57 8B 7D 0C 85 FF 0F 84 E2 27 00 00 56 8D 45 FC 50 E8(测试无效,特征码会变)。
在前面的系列教程如《驱动开发:内核枚举DpcTimer定时器》或者《驱动开发:内核枚举IoTimer定时器》里面LyShark大量使用了特征码定位这一方法来寻找符合条件的汇编指令集,总体来说这种方式只能定位特征较小的指令如果特征值扩展到...如下是一段特征码搜索片段,可以看到其实仅仅只是将上章中的搜索方式变成了一个SearchSpecialCode函数,如下函数,用户传入一个扫描起始地址以及搜索特征码的字节数组,即可完成搜索工作,具体的参数定义如下...pSearchBeginAddr 扫描的内存(内核)起始地址ulSearchLength 需要扫描的长度pSpecialCode 扫描特征码,传入一个UCHAR类型的字节数组ulSpecialCodeLength...判断地址是否有效 if (FALSE == MmIsAddressValid((PVOID)(i + j))) { break; } // 匹配特征码...图片我们首先通过MmGetSystemRoutineAddress得到IoInitializeTimer首地址,然后在偏移长度为0x7e范围内搜索特征码48 8d 0d特征,其代码可以总结为如下样子。
= IsPeFile(lpMapAddress, 0); printf("是否为PE文件: %d \n", ret); system("pause"); return 0; } 判断PE文件特征码...// 存储检测文件偏移地址 BYTE VirusSign[32 + 1]; // 存储特征码大小32,其中的1是结束符. }SIGN, *pSIGN; // 定义特征码与特征描述信息,你可以自己去提取一段特征码...,这里循环两次从零开始 for (int x = 0; x <= 2; x++) { // 将待检测程序的文件指针指向特征码的偏移位置 SetFilePointer(hFile, Sign[...x].FileOffset, NULL, FILE_BEGIN); // 读取目标程序指定位置的特征码到内存中 ReadFile(hFile, buffer, sizeof(buffer), &...,然后按照我写好的格式进行增加,例如我是用vs2013编译的,那么检测结果就可能会是vs2013,特征码的提取应尽量保证一致性。
在笔者上一篇文章《驱动开发:内核特征码搜索函数封装》中为了定位特征的方便我们封装实现了一个可以传入数组实现的SearchSpecialCode定位函数,该定位函数其实还不能算的上简单,本章LyShark...将对特征码定位进行简化,让定位变得更简单,并运用定位代码实现扫描内核PE的.text代码段,并从代码段中得到某个特征所在内存位置。...= 0){return VariableAddress;}return 0;}// 对指定内存执行特征码扫描NTSTATUS UtilLySharkSearchPattern(IN PUCHAR pattern...= FALSE){*ppFound = (PUCHAR)base + i;DbgPrint("[LyShark.com] 特征码匹配地址: %p \n", (PUCHAR)base + i);return...Name);// 判断是不是我们要找的.text节if (RtlCompareString(&LySharkSection, &LySharkText, TRUE) == 0){// 如果是则开始匹配特征码
当杀毒软件获得病毒样本后,会从病毒中取一段足以证明该病毒身份且独一无二的二进制代码,这就是所谓的特征码。当特征码被列入病毒库后,凡是带有该特征码的程序几乎都会被杀毒软件视为病毒程序。...这时我们发现程序再次出现提示发现特征码,这也就使我们获得了特征码的大致范围。 为了尽可能缩小特征码范围,我们还要继续操作。选择“特征区间”,右击特征码选择“符合定位此处”。...接着继续我们之前的操作,不断循环,直到生成的文件不被杀死为止,也就是说不断地取特征码范围,直到没有特征码可以取为止。 取完特征码后,我们就要对特征码进行修改。...打开C32Asm载入灰鸽子的服务端,从第二排工具栏中选择倒数第三个(像花环一样的那个图标),接下来就是对特征码进行汇编修改。找到从汇编代码选取出特征码,右击特征码,选择“跳到”。...这时会弹出一个窗口,我们在OFFSET中输入特征码地址后就会自动找到特征码所在位置。我们右击选择“填充”,用00直接填充后保存就可以了。 修改特征码是最常见的一种免杀方式,免杀的效果也非常不错。
扫描特征码基地址 #include #include #include union Base { DWORD address.../* 参数一:process 要查找的进程 /* 参数二:markCode 特征码字符串,不能有空格 /* 参数三:特征码离基址的距离,默认距离:1 /* 参数四:findMode 扫描方式,找到特征码后...,默认为:1 /* 0:往上找基址(特征码在基址下面) /* 1:往下找基址(特征码在基址上面) /* 参数五:offset 保存基址距离进程的偏移...= 0) return 0; //特征码长度 int len = strlen(markCode) / 2; //将特征码转换成byte型 BYTE *m_code...call地址 /* 参数一:process 要查找的进程 /* 参数二:markCode 特征码字符串,不能有空格 /* 参数三:特征码离基址的距离,默认距离:1 /* 参数四:findMode 扫描方式
有效载荷 GET stager HTTP/1.1 Host: x.x.x.x User-Agent: Mozilla/5.0 测试过程 影响范围 CobaltStrike <= 4.5 该特征已申请了
本章我们将学习特征码的提取与定位,特征码是软件中一段固定的具有标志性的代码片段,特征码的用途非常广泛,最常见的就是杀毒软件的查杀了,查杀就是根据特征码定位技术实现的,再比如木马的免杀也是修改了特征码的一些特征片段而躲避查杀的啦...蓝屏保护特征码: 55 8B EC BB 06 00 00 00 蓝屏防御特征码: 55 8B EC 81 EC 14 00 00 00 68 0C 00 00 00 1.先来看一下这个CM例子,当我们点击按钮...1的时候,会提示一个MessageBox信息框,而点击按钮2则程序没有反映,我们现在要做的就是通过按钮1提取到按钮事件的特征码,然后下断点并定位到按钮2的按钮事件中。...最后提取这段通杀特征【FF 55 FC 5F 5E】。 12.直接按下【F7】,进入按钮二的核心代码处。...13.如果要使用特征码定位的话,可以在OD反汇编窗口按下【ctrl + B】,直接搜索即可。
MYCCL下载|特征码定位器MYCCL(http://www.rsdown.cn/down/32780.html) 首先我们先看看各个区段: 程序启动正常! 发现历史记录信息,已经成功导入!...[注意] 文件00011B34_0000004C出现特征码!.... (*)没有发现新的特征码.... ------------------------------------------------ >>复合特征码定位结果<<...学习\汇编花指令加载shellcode\Release\ConsoleApplication1.exe ------------------------------------------------ 特征码...物理地址/物理长度 如下: [特征] 00011B34_0000004C 特征码分布示意图: [--------------------------------------------------
(上) 特征工程之数据预处理(下) 本篇文章会继续介绍特征工程的内容,这次会介绍特征缩放和特征编码,前者主要是归一化和正则化,用于消除量纲关系的影响,后者包括了序号编码、独热编码等,主要是处理类别型、文本型以及连续型特征...---- 3.2 特征缩放 特征缩放主要分为两种方法,归一化和正则化。...而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上,统计信息是不准确的,学习效果变差。 本质是因为独热编码之后的特征的表达能力较差。...该特征的预测能力被人为的拆分成多份,每一份与其他特征竞争最优划分点都失败。最终该特征得到的重要性会比实际值低。...假设有连续特征j ,离散化为 N个 0/1 特征;连续特征 k,离散化为 M 个 0/1 特征,则分别进行离散化之后引入了 N+M 个特征。
在特征工程之特征选择中,我们讲到了特征选择的一些要点。本篇我们继续讨论特征工程,不过会重点关注于特征表达部分,即如果对某一个特征的具体表现形式做处理。...主要包括缺失值处理,特殊的特征处理比如时间和地理位置处理,离散特征的连续化和离散化处理,连续特征的离散化处理几个方面。 1....对地理特征,比如“广州市天河区XX街道XX号”,这样的特征我们应该如何使用呢?处理成离散值和连续值都是可以的。如果是处理成离散值,则需要转化为多个离散特征,比如城市名特征,区县特征,街道特征等。...处理方法其实比较简单,比如某特征的取值是高,中和低,那么我们就可以创建三个取值为0或者1的特征,将高编码为1,0,0这样三个特征,中编码为0,1,0这样三个特征,低编码为0,0,1这样三个特征。...比如对于用户的ID这个特征,如果要使用独热编码,则维度会爆炸,如果使用特征嵌入就维度低很多了。对于每个要嵌入的特征,我们会有一个特征嵌入矩阵,这个矩阵的行很大,对应我们该特征的数目。
后面还有两篇会关注于特征表达和特征预处理。 1....特征的来源 在做数据分析的时候,特征的来源一般有两块,一块是业务已经整理好各种特征数据,我们需要去找出适合我们问题需要的特征;另一块是我们从业务特征中自己去寻找高级数据特征。...选择合适的特征 我们首先看当业务已经整理好各种特征数据时,我们如何去找出适合我们问题需要的特征,此时特征数可能成百上千,哪些才是我们需要的呢? ...寻找高级特征 在我们拿到已有的特征后,我们还可以根据需要寻找到更多的高级特征。比如有车的路程特征和时间间隔特征,我们就可以得到车的平均速度这个二级特征。...根据车的速度特征,我们就可以得到车的加速度这个三级特征,根据车的加速度特征,我们就可以得到车的加加速度这个四级特征。。。也就是说,高级特征可以一直寻找下去。
这样,一个block内所有cell的特征向量串联起来便得到该block的HOG特征。这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中。...则一块的特征数为:3*3*9; (5)收集HOG特征 最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类使用。 (6)那么一个图像的HOG特征维数是多少呢?...Dalal提出的Hog特征提取的过程:把样本图像分割为若干个像素的单元(cell),把梯度方向平均划分为9个区间(bin),在每个单元里面对所有像素的梯度方向在各个方向区间进行直方图统计,得到一个9维的特征向量...,每相邻的4个单元构成一个块(block),把一个块内的特征向量联起来得到36维的特征向量,用块对样本图像进行扫描,扫描步长为一个单元。...最后将所有块的特征串联起来,就得到了人体的特征。
在本篇中我们聊一下特征表达(或者说特征编码)的问题,即从这些选定的维度,如何去刻画特定的对象。 01 特征表达要考虑哪些方面?...从一个完整的机器学习任务来看,在选择完特征之后,特征表达的任务就是要将一个个的样本抽象成数值向量,供机器学习模型使用。因此,特征表达就要兼顾特征属性和模型需求这两个方面。...特征属性 特征按其取值类型不同,可以简单分为连续型和离散型。而离散型特征,又可以分为类别型和序列型。下面依次简要说明。 连续型特征:取值为连续实数的特征。 比如,身高,175.4cm。...04 特殊特征的处理 有时候,根据模型的需要,需要对一些特征做特殊处理。这里以时间特征和地理特征为例,进行说明。 对时间特征,有时候模型用到的并不是其绝对量,而是相对量,这个情况下就需要求差值。...小结 本文在特征选择的基础上,进一步讨论了特征表达的问题,主要涉及连续和离散型特征的编码方式、特殊特征的处理和缺失值处理等方面。
领取专属 10元无门槛券
手把手带您无忧上云