@H=(
$H1,
$H2,
$H3,
$H4,
$H5,
$H6,
);#花指令的数组。
这里定义一个数组@H用来存储花指令语句,perl中的数组可以包含变量,表达式,任何数值,引用和字符串,还可以是数组当然也可以为空。语法是:
@list=(
1,
2,
3,
…
);
(分行是为了看得更清楚,如无必有可以改为单行显示)为了更容易看,我先将每对指令赋值给变量,再将变量放入数组中。
print "\nPUSH EBP\nMOV EBP,ESP\n";
这句是打印出花指令的开头两句PUSH EBP和MOV EBP,ESP,和C一样\n是换行。
for($i=1; $i<=$N; $i++)
{
$rand1 = int rand(@H);
print @H[$rand1];
}#循环打印出随机生成的花指令。
先讲讲这里需要用到的知识,for循环语句和rand函数,for循环几乎所有编程语言都有,我们看看语法:
for(变量初始值;循环条件;条件改变)
{
循环体
}
运行过程是先给变量赋值,再判断是否符合循环条件,符合时执行循环体,再处理初始变量,之后判断是否符合循环条件,符合时执行循环体,直到不符合循环条件跳出循环。
这里还用到的是rand函数。
函数名 rand
调用语法 retval = rand (num);
解说 随机数函数,返回0和整数num之间的一个浮点数。
运行过程是先给$i赋值1,再比较$i是否小于等于$N,是的话执行循环体,就是用rand函数读取@H数组,赋值给$rand1,再用print打印出来。执行一遍后$i++,就是$i=$i+1,$i的值增加1,再比较$i是否小于等于$N,是的话再继续执行循环体,直到$i大于$N为止。
$J1="JMP 附近空地址随便乱跳\nJMP 跳回入口点\n";
$J2="je 跳回入口点\njne 跳回入口点\n";
$J3="jz 跳回入口点\njnz 跳回入口点\n";
$J4="jb 跳回入口点\njge 跳回入口点\n";
$J5="jl 跳回入口点\njge 跳回入口点\n";
$J6="ja 跳回入口点\njle 跳回入口点\n";
$J7="jg 跳回入口点\njle 跳回入口点\n";
@J=(
$J1,
$J2,
$J3,
$J4,
$J5,
$J6,
$J7,
);#跳转指令数组。
这里就是跳转语句的数组了,跳转语句在花指令中的作用是程序执行完花指令再跳回文件的原始入口点执行程序,一般用的是JMP 无条件转移指令,我们把je 等于时转移和jne 不等于时转移结合起来就成了JMP了,以此类推jb 若小于则跳和jge 大于或等于转移,ja 若大于则跳和jle 若小于等于则跳等结合都成JMP,这样我们有很多不同组合,可以加大杀毒软件对木马查杀难度。(我找了免杀的汇编知识资料,大家可以看看里面的跳转指令部分)
$rand2 = int rand(@J);
print @J[$rand2]; #随机生成跳转指令并打印出来。
最后还是用rand函数读取跳转数组,这里只需读取一次,并打印出来。
3、测试工具
代码写好了,是不是很简单啊,功能可不一般哦,看看效果吧。(如图3)怎样,不错吧,这样就可以拥有N多免杀花指令了,呵呵~~
后记
程序很简单,但效果很好,有兴趣的朋友可以用C,VB写个,应该不难实现。第一次写编程的文章,写得不好,见谅。最后感谢好友wo1fSea在我写这个小程序过程对我的帮助。
上一页 1 2