其实这篇文章是讲讲最简单的花指令,这标题是写到后面发现 360 爆木马,所以有此题目。
首先编写一个简单的 hello world
程序,并编译
花指令可以简单理解为欺骗杀软,给分析者增加障碍的指令,但是对程序的运行结果没有影响的指令,比如下面的(高级点的使 ida 反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向)
再比如:
有时候会在 jmp 的下一行插入一些干扰 ida 静态分析的字节,而 jmp 是刚好跳过这些垃圾字节的
指导思想:我们使用 od 编写一些简单花指令放在程序比较靠后没有代码的地址上,之后跳回真正的入口点(当然我们要将程序的入口点修改为我们的代码的地址)
实践前我们先查下壳(其实这是 vs2015 编译的)
我们编写如下代码,当然你可以根据自己的需要写出自己的
之后我们通过计算可以知道我们的代码的相对偏移为 0x1C5A
(这是针对我的程序,只要减去当前程序加载的基址就行了)
当然不要忘记复制到文件中了
最后我们修改程序的入口点(用 lordpe 比较方便)
【注:由于我 od 打开了这个文件,所以截图是 readonly 了,所以修改时记得关闭程序,之后你的保存按纽就会点亮】
当然你也可以自己通过工具找到偏移,再用 winhex 等 16 进制工具修改
我们看看程序能否正常运行
360 马上报毒......
通过这个实验,我们可以知道 360 会对程序的入口点的汇编代码进行检测,因为壳以及混淆过的代码都比较不正常,这也是检测病毒木马能杀错也不放过的一种方式
关闭 360 先,ok 成功运行
我们现在再来查查壳,peid 核心扫描是扫不出来的,因为它是基于 userdb.txt
里面的特征查找的,还是从入口点开始查找的
其实这个还是可以查到的,推荐个工具
其实代码加花的初衷是想给人阅读和判断制造障碍,绕过杀软等,但是 360 宁可错杀也不放过 helloworld ......