花指令编写基础之——如何让360认为helloworld是木马

其实这篇文章是讲讲最简单的花指令,这标题是写到后面发现360报木马,所以有此题目。

开始之前

首先编写一个简单的hello world程序,并编译

1
2
3
4
5
6
7
#include "stdio.h"

int main(int argc, char const *argv[])
{
printf("hello,giantbranch");

}

花指令可以简单理解为欺骗杀软,给分析者增加障碍的指令,但是对程序的运行结果没有影响的指令,比如下面的(高级点的使ida反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向)

1
2
3
4
push eax
push ebx
pop ebx
pop eax

再比如

1
2
sub eax, 1
add eax, 1

有时候会在jmp的下一行插入一些干扰ida静态分析的字节,而jmp是刚好跳过这些垃圾字节的

实践

指导思想:我们使用od在程序比较后的没有代码的地址编写一些简单花指令,之后跳回真正的入口点(当然我们要将程序的入口点修改为我们的代码的地址)

实践前我们先查下壳(其实这是vs2015编译的)

我们编写如下代码,当然你可以根据自己的需要写出自己的

之后我们通过计算可以知道我们的代码的相对偏移为0x1C5A(这是针对我的程序,只要减去当前程序加载的基址就行了)

当然不要忘记复制到文件中了

最后我们修改程序的入口点(用lordpe比较方便)
【注:由于我od打开了这个文件,所以截图是readonly了,所以修改时记得关闭程序,之后你的保存按纽就会点亮】

当然你也可以自己通过工具找到偏移,在用winhex等16进制工具修改

我们看看程序能否正常运行

360马上报毒……(通过这个实验,我们可以知道360会对程序的入口点的汇编代码进行检测,因位壳和混淆过的代码都比较不正常,这也是检测病毒木马有杀错无放过的一种方式)

关闭360先,ok成功运行

我们现在再来查查壳,peid核心扫描是扫不出来的,因为它是基于userdb.txt里面的特征查找的,还是从入口点开始查找的

其实这个还是可以查到的,推荐个工具

后记

其实代码加花的初衷是想给人阅读和判断制造障碍,绕过杀软等,但是360宁可错杀也不放过helloworld……

打赏专区