代码
void main()
{
_asm{
add eax,len//越过解密部分,直接到shellcode的开始地址,len为解密部分代码的长度
xor ecx,ecx
decode_loop:
mov bl,[eax + ecx]
xor bl,key//key为秘钥
mov [eax+ecx],bi//把shellcode中的每一位进行解密
inc ecx
cmp bl,0x90//在最后放上一位0x90作为shellcode的结束的标志
jne decode_loop
}
}
解密之前事先可以写一个异或脚本,对shellcode的机器码进行加密,比如下面这种
for(i = 0;i<len;i++)
output[i] = input[i] ^ key;
然后再把上面的解密代码放入shellcode运行之前,就能起到自解密的作用。
当然这些都是最简单的操作,也能加入更复杂的算法来对shellcode进行加“壳”。