简介:为了让自己的电脑在日常工作中更加安全,很多新手都会下载多种杀毒软件进行定期查杀。 他们觉得电脑一定很安全木马软件能杀病毒吗,于是就肆无忌惮地浏览一些不适合儿童的网站,甚至主动或被动地下载。 有些乱七八糟的软件,那么杀毒软件真的能查杀所有病毒木马吗? 在这篇文章中,我们将详细解释木马病毒如何伪装自己不被杀毒软件检测到。
什么是不杀生?
防病毒,与防病毒(AntiVirus)和反间谍软件(AntiSpyware)相对立,英文称为Anti-AntiVirus(缩写为Virus AV),直译为“反防病毒”,译为“反病毒技术”。
反病毒技术分类 二进制反病毒(无源代码)只能通过修改asm代码/二进制数据/其他数据来实现。 利用源代码进行防病毒保护可以通过修改源代码来实现,也可以与二进制防病毒技术相结合。
防病毒软件如何提取文件签名?
扫描时,首先获取文件各节的特征(节大小+节哈希值),然后进行哈希,得到类似于MD5的字符串。 然后比较这个哈希值字符串的第一个字母,第一个字母范围是0-9,AF。 根据首字母对单独的病毒数据库进行匹配。 你为什么要这么做? 只是为了提高扫描速度。 原来的200万个特征码需要匹配200万次。 初始字母分离后,只需匹配200/16,大约12万次。 这相当于效率提高了 16 倍。 通俗地说,就是不要用一个文件的所有内容来计算hash。 而是通过分片木马软件能杀病毒吗,取出一些重要的(难以改变的)内容进行哈希计算。 这样就可以通过特征码找到类似的病毒变种。
如何快速找到签名?
常见的特征码定位工具有CCL和MYCCL。 该工具的总体原理是对文件进行分割,并在某些分割部分填充数据(0)。 如果扫描该部分没有检测到报警,则特征码在该部分。 重复此操作,直到找到一小段内容。 不同的工具使用不同的分割算法,并且在查找签名方面有不同的结果。
这里给大家推荐最新的特征代码定位软件VirTest。
官方介绍:我们可以假设病毒上报流程是这样的。 如果检测文件为PE,则CODE位置有标志A,DATA位置有标志B,资源位置有标志C。 如果同时满足这三个条件,那么该软件就会被杀死。 会报告病毒,VIRTEST的工作原理是找到导致病毒报告的最后一个标志,即假设的标志C。
因此,VIRTEST采用2点排除法来测试标记C所在文件的位置。 由于被杀死的文件可能有多个类似于ABC的链条件,所以我们必须使用排除机制,首先找到最接近的文件的前链条件,排除文件的尾部数据。 当找到第一链条件时,擦除索引标记C并恢复尾部数据。
然后继续测试其他链条件,直到找到最后一个链条件。 擦除后,整个文件免杀,这意味着特征代码已经被定位,所以VIRTEST绝对可以准确定位所有复合特征。
我找到了特征码,如何避免被杀?
找到特征码后,只需更改特征码的值即可避免查杀成功。 常用的修改工具有OD、C32ASM、UE、010Editor等。
无需源码修改:
如果特征代码定位了数据(通过IDA/OD等确认),修改此类特征代码很容易导致软件无法运行、无法打开,或者影响程序运行过程或结果。
1. 数据
对于字符串,如果不影响程序逻辑,可以替换大小写; 如果数据无关紧要,可以随意替换。 整数,如果不影响结果,则替换该值,清零等。 PE头数据,根据具体的PE结构,无用的数据被清除或修改,有用的数据根据情况修改。 最后,最终的修改方法是找到访问数据的代码,直接修改代码访问数据的地址。 数据也可以放置在其他地址。
2. 代码
如果特征代码定位到代码(也通过IDA/OD等确认),可以在不改变程序功能的情况下采用各种方法进行修改。 汇编代码的等价替换,如mov eax,0可以用xor eax,eax替换,直接结果是一样的,只是二进制代码不同。 交换代码顺序而不影响逻辑。 代码块移位将代码块移动到未使用的内存位置,并通过添加 jmp addr 来跳过执行。 addr 是新的代码块地址。
修改是否有源代码:
当有源代码时,修改方法更加灵活和简单。
如果特征代码是数据,则修改数据位置、访问数据的代码位置等(类比非源码方法)。
添加指令是最有效也是最常用的方法。 关键是如何添加指令。
加上数据计算代码,加减乘除的各种组合。
添加字符串操作代码,进行添加、删除、查找、替换等操作。
添加多级跳转,并在跳转之间添加无效指令(不会被执行)。
添加看似有效的API调用,例如LoadLibrary+GetProcAddr+API等。