资源描述:
《shellcode编码变形大法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ShellCode编码变形大法'"~'cnwtfwtf@hackercomcn-譬)栏目编辑))■I特定的要求,一类是对SheIICode的长度大小有限制:另一类就是不能出现某些特殊字符比如CmaiI漏洞不能有大写字母,FoxmaiI不能有Ox2EOx2F字符一类的.在这里不讨论长度限制的情况,而是讨论一下如何避免特殊字符.要使ShelICode避免出现特殊字符有2种方法:一种是编写好ShelICode后,对不合要求的字符进行指令等价变换.比如一些liS漏洞里面不能出现Ox20,对指令Moveax,20h.就可以改为M
2、oveax,24h;subeax,04h,这样来避免出现Ox20.这种等价变换法对有少量字符限制的情况比较实用,但如果限制的字符较多,这种方法就比较困难了.另一种就是把代码分成两块.第二块是EnShelICode,即编过码后的ShelICode,完成我们想要的功能,比如开端口.反向连接的ShelICode有不合法的字符,所以我们利用一定的算法,把初始的SheJICode进行一定的变换编码,变成合法的EnShelICode后放在第二块.而第一块是完成解码的Decode.其功能是把EnShelICode重新变回初始的She
3、lICode后,再跳过去执行.其示意图如图1所示.好,编译,链接,执行!哈哈,弹出新She来了如图19所示.■_--巾_■■_呻图19换就失去了意义.在这篇文章里主要讨论算法F的变换和逆算法F在Decode里的实现.XOR是指按位异或其运算规则是相同为0,不同为1.即厂.oooXOFl=llxor0:llxorl=0...根据运算规则.我们可以推出对于某个值X.密钥Key,有如下等式成立:<~:——从上面的对照分析,我们可以看出系统底层的东西是可以融汇贯通的,所以只要深入地掌握了某个系统的底层,就可以很容易学习领
4、会其它的系统,并且注意力会放在两者相同和不同的地方.更利于理解.Windows下堆栈的溢出已经有了很多经典的文章.而LinuX对初学者来说不太直观.所以用窗口模式和WindowS的作对比,希望至少能从方法上帮助初学者了解,有任何问题请和编辑部联系.架起我们之间互相联系的桥梁!仂2o0410黑客防线●壁■■_EXPL口ITC口MMUNI口N)栏目编辑)wtf)wtf@hackercomcn,,厂一XXOFKey:ZZxorKey=X…=>XxorKeyxorKey=X...即一个值对同一个数,异或两次后得到的结果为
5、其原值.我们可以利用该性质来实现变换算法F和逆算法F.1.变换算法F算法很简单,我们把ShelICode数组里的每一个字符ShelICode[i]与某一密钥Key作异或就得到了EnShelICode保存在EnShelICode数组中.其实现代码如图2所示,这里令密钥Key为0x97当然也可以改成其它值.Decode中要把EnShelICode重新变回ShelICode,根据上面的分析.只需要将EnShelICode里面的字符再异或编码时的Key就可以了所以也比较简单.实现的汇编代码如下:厂一'jmpDecodeendD
6、ecode—start:popedx//得列解碍开始位置esp一>edxdecedxxoreCX?eCXmovcx,Ox2O0//要解码的Enshe:ode,长度Ox200应谈足够Decode—Loop:xorbyteptr【edx+ecx],0x97//因为编码耐盾的Key是0x97,所以解碍要一样loopDec~eloopjmpDecode_okDecode—end:callDecodestartDecode—ok:...我们把上面的汇编转换成机器码,就得到了Decode的代码,然后在后面附上EnShelIC
7、ode的代码就得到了完整的部分了.3.小结Xor大法是最早使用同时也是现在最常见的编码方法.它最大的好处是编码和解码都比较简单,而且也可以避开一定的字符比如ASCII为0的字符通常ShelICode是以字符串形式传送过去的,为0的字符会被认为是字符串的结束标志而导致截断后面的字符:而用Xor方法经过编码后,为0的字符就会被编码成其他的值从而避免被截断.该方法也有一定适应性如果ShelICode异或某个Key后还有非法字符,可以尝试改变Key的值,直到完全合法为止.当然,这种方法的缺点也很明显,当限制字符较多或限制字符是
8、一个较大的范围的时候很有可能找不到合适的Key来符合限制要求.在这种情况下,我们就需要用其他的算法来实现编码和解码了.我们在编码的时候,先对每一个字符都进行异或编码.如果某个字符异或后,还是非法字符,则再单独对该字符进行处理变换成符合要求的字符,这就是直接替换法.该方法最早可以在Yuange的文章中看到.1.变换算法F:其思想是S