说说免杀

来源:互联网 发布:日语翻译软件 知乎 编辑:程序博客网 时间:2024/04/30 11:32
免杀与被杀一直是不灭的话题,随便说说我的免杀方法

网上和饭客的其他帖子已经说了很多了,我就不多说什么废话了。

在此说一点,我个人倾向于无损免杀,像那种直接NOP、00填充或者加一减一的大部分都是有损免杀,也许当时管用,换一个操作系统可能就不行了。

1.最常用的就是通用条转法了,不多说。

2.其次就是交换上下句,也不多说。

3.仔细琢磨特征码的附近语句,看看有什么是多余的,NOP掉,然后移动特征指令几个字节。

4.加花,配合跳转法,跳走之后来几个花指令再跳回来,对于高启发是有一定效果的。

5.特征是字符的可以修改大小写,或者移动到其他位置,然后修改调用原来字符的指令为新的字符的地址。还是杀的花就异或加密,异或加密的代码最后贴出。

6.最后就是自己发挥了,玩过编程的人做这些都很容易,一看就懂,数据的传递、堆栈、函数的调用等等随便修改,保持功能不变就可以了。

7.有一个免杀的误区大家要注意,在EXE中JMP=PUSH + RETN这样是对的,但是在DLL中就不可以了,否则还要重定位干什么,在DLL中变相的JMP就是【自定位】然后跳到【相对偏移】的xxx地址就可以了

代码段的免杀就是这些,至少是我常用的。下面来说说其他的数据免杀。

输入表免杀:

1.移动名称字符,修改指针。

2.与相邻的函数调换指针,然后在C32中调换名称字符。

3.动态填充函数地址,需要汇编基础了,代码我会在最后贴出来,处理之后用LOADPE删除该函数在输入表里的指针信息就可以了。

输出表:

1.移动函数名称字符并修改指针。

2.移动下输出函数的入口代码,别忘了加几个小花,然后异或加密输出表函数的名称字符,代码我会在最后贴出来。

附加数据:【配置信息】

还是异或加密,可以在文件入口解密,也可以用OD跟踪,在使用配置信息之前解密,这样最好。

其他的还没想起来,不知不觉都天亮了,呵呵,总之免杀中是指令代码的就跳转,加花,变异。是数据的就加密,要注意输入表字符是不能加密的。

下面就说说针对杀软的免杀:

卡巴:免杀到最后病毒名开头是HEUR的就应该是高启发了,加个签名就应该过了,不过的话带着签名继续定位。
卡巴主动:不要带SYS驱动,尽量不要自删除,不要注入进程等危险操作,应该就可以过了。

瑞星:特征或特征附近最多的就是TEST了,改AND就可以,字符修改大小写,注意不是所有字符都可以改大小写的。
瑞星内存:没啥说的,MYCCL内存定位,大部分是字符。
瑞星主动:废物一个,还是基于特征码的,用OD定位,是字符。

金山:主要杀鸽子的配置信息,在PE头的128字节处写90即可。遇到追杀的就是你添加新的区段的问题了,还有就是花指令不够强。

NOD32:说2种方法,加壳改壳,破坏输入表指针。

就说这几个,江民除了主动没啥特点,过江民的主动改一下释放路径即可,就不多说了,其他的杀软也没啥好说的,用我上面说的方法就可以。下面贴出来2个上面提到的代码。

1.异或加密代码
D01    pushad          寄存器入栈,在LordPE设置为新入口点
D02    call D03        调用下一行代码的VA,在OD中也可采用二进制编辑,输入E8 00000000
D03    pop ebx         出栈,ebx的值就是这一行代码的VA,也就是D03
D04    sub ebx,A1      A1是这样计算的,加密点起始的VA减去上面的D03,ebx的值就是加密点起始的VA
D05    xor ecx,ecx     清空ecx为下面循环解密xor的字节做准备
D06    mov ax,5D62     传5D62给ax做初始密匙用,可以修改的
D07    xor word ptr ds:[ebx+ecx*2],ax   对ebx+ecx*2处进行双字节解密
D08    inc ecx         ecx加1,加密了多少次
D10    cmp ecx,A2      此处的A2就是加密的代码的总长度除二,计算公式是:(最终VA-起始VA+1)/2 (十六进制)
D11    jl short D07    没有解密完就跳,继续解密
D12    popad           寄存器出栈,如果还要加密下一段,此处从D04开始继续。
D13    jmp到原入口点
加密的二进制代码如下:
60 E8 00 00 00 00 5B 81 EB 00 20 00 00 33 C9 66 B8 7D 4A 66 31 04 4B 41 81 F9 11 11 00 00 7C F3 61

2.隐藏输入表代码
004B702F    60              PUSHAD
004B7030    E8 00000000     CALL 08.004B7035
004B7035    5B              POP EBX //程序自定位
004B7036    8BEB            MOV EBP,EBX
004B7038    81C3 9F110000   ADD EBX,119F
004B703E    8BF3            MOV ESI,EBX //计算出LoadLibraryA的地址放到ESI中
004B7040    8BDD            MOV EBX,EBP
004B7042    81C3 1F100000   ADD EBX,101F
004B7048    8BFB            MOV EDI,EBX //计算出GetProAddress的地址放到EDI中
004B704A    8BDD            MOV EBX,EBP
004B704C    81C3 232B0000   ADD EBX,2B23
004B7052    53              PUSH EBX
004B7053    FF16            CALL ESI //调用LoadLibraryA
004B7055    50              PUSH EAX //保存DLL句柄,多个相同库里的函数就不必再调用LoadLibraryA了
004B7056    8BDD            MOV EBX,EBP
004B7058    81C3 09330000   ADD EBX,3309
004B705E    53              PUSH EBX
004B705F    50              PUSH EAX
004B7060    FF17            CALL EDI //调用GetProAddress
004B7062    A3 04864B00     MOV DWORD PTR DS:[4B8604],EAX //填充函数地址
004B7067    58              POP EAX //取出DLL句柄到EAX
004B7068    61              POPAD

来自:http://hi.baidu.com/daiqingfeng1/blog/item/57c8be58ca44da202934f03c.html

原创粉丝点击