problema en la creacion de shellcode basica

Iniciado por daryo, 14 Julio 2014, 21:57 PM

0 Miembros y 1 Visitante están viendo este tema.

daryo

estaba intentando crear una shellcode con este tutorial:
http://www.portalhacker.net/b2/tutorial-creando-shellcode/125582/

utilizo code blocks y windows 7 en una maquina virtual , estoy haciendo algo mal o es que esta forma de hacerlas no funciona para win 7 y me falta hacer algo?

el proceso es : se busca la ubicacion de las apis a usar, se crea la hice en nasm luego  con ollydbg se abre y se le da binary copy para luego pegarlo todo en un editor te texto.

pero me da error a en el momento crearla y compilarla en un programa de c

cuando la ejecuto normal funciona perfectamente:
Código (asm) [Seleccionar]
.386
.model flat,stdcall
option casemap:none


.code
lib db "User32.dll",0
inicio:
call delta
delta:
pop ecx
sub ecx,offset delta
add ecx,offset lib

mov eax,776f2864h ;direccion de loadlibraryA
push ecx
call eax
push 0
push 0
push 0
push 0

mov eax,777dea71h ;//direccion de MessageBoxA
call eax
end inicio

muchas gracias de antemano :D
buenas

.:UND3R:.

Buenas no entendí muy bien el problema, pero la shellcode que has puesto está programada en MASM, además de que posee algunas inconsistencias como por ejemplo algunos includes que no son necesarios debido a que las APIs se están llamando directamente.

Algunas pruebas:
- Ensamblar en MASM
- verifica que las direcciones de las APis concuerden con las de tu SO (OllyDbg -> go to -> LoadLibraryA y verificas que el address sea el mismo, al igual que para MessageBoxA)
- ¿En qué parte falla el código?

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

daryo

Citaralgunos includes que no son necesarios debido a que las APIs se están llamando directamente.
sep tienes razon ya las quite

CitarEnsamblar en MASM
ok probare eso

Citarverifica que las direcciones de las APis concuerden con las de tu SO (OllyDbg -> go to -> LoadLibraryA y verificas que el address sea el mismo, al igual que para MessageBoxA)

las direcciones las saque de mi mismo pc usando el programa arwin. Asi que no creo ademas cuando compilo normal el programa  funciona perfecto.

Citar- ¿En qué parte falla el código?
no lo se exactamente pero  crashea cuando tengo la shellcode e intento compilarla en este programa:
char code[] = "mi shellcode";

int main()
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}

buenas

cpu2

Pues entonces llamala directamente.

char code[] = "mi shellcode";
     
int main()
    {

__asm call code
   
}


Un saludo.

daryo

#4
gracias cpu pero no funciono

el tutorial del que me guio esta hecho para fasm y ahi si  funciona con sus respectivos cambios pero en masm no.(empezare con fasm pero igual me gustaria saber que esta pasando)

@.:UND3R:. tenias razon era masm no nasm en todo caso ya se cual es el error pero no como solucionarlo

el delta offsetno esta sirviendo cuando le digo:
Código (asm) [Seleccionar]
lib db "User32.dll",0
add ecx,offset lib
push ecx


al parecer no esta tomando la direccion que indica la ubicacion de la cadena "user32.dll"  por eso cuando lo compilo funciona correctamente pero cuando lo convierto en shellcode no.


para llegar a esa Conclusión probe lo siguiente:
en el codigo en c carge  User32.dll necesaria para MessageBoxA

   char code[] = "mi shellcode";
   
   int main()
   {
   LoadLibrary("User32.dll");
   int (*func)();
   func = (int (*)()) code;
   (int)(*func)();
   }

y le quite el delta offset a el codigo en asm

Código (asm) [Seleccionar]
.386
.model flat,stdcall
option casemap:none

.code
lib db 'User32.dll',0
inicio:

mov ecx,offset lib
mov eax,75a62864h ;direccion de loadlibraryA
push ecx
call eax
push 0
push 0
push 0
push 0
   
mov eax,76d3ea71h ;//direccion de MessageBoxA
call eax
mov eax,75a62acfh // exitprocess
call eax
end inicio


en ese caso si sale la ventanita e_e
buenas

dRak0

No te lo tomes como ofensivo pero lo que veo es que tienes muy pocos conocimientos de assembly. Te recomiendo que lo aprendas.Un muy buen libro es el de kip irvine (En español encima) y tiene un workbook para practicar.Despues el shellcode no es mas que una secuencia de opcodes.El libro de irvine explica con el ensamblador MASM , si tengo que decidir cual aprender desde el principio seria NASM (Disponible en GNU/Linux, OpenBSD, todo tipo de UNIX like). Tambien podrias escribir el code en C y dsp obtener los opcodes con objdump u otro por el estilo , pero deberias sacar todo lo que agrega el compilador.

PD:Te das cuenta que es MASM por las directivas que utiliza.

daryo

si tienes razon hasta ahora chapuceo en todo esto , pero no comprare un libro : P
buenas

dRak0

Hay que leer primero el libro y luego comprarlo si te gusta. Yo lo baje de internet y lo mande a imprimir a una imprenta que me hace precio.

El workbook: http://kipirvine.com/asm/workbook/asmWorkbook.pdf

Saludos!




daryo

#8
se borro todo , decia que disculpa pero ese libro esta terrible es de 16 bits , para msdos y las paginas es tan todas al costado

si quieren cierren el post ya se desvio : P
buenas

dRak0

Tas muy equivocado cubre 32 bits , "Lenguaje ensamblador para computadoras basadas en intel" , va por la sexta edicion creo , yo tengo la 5ta.Es mas hay un capitulo dedicado a la API de windows. Ademas si quieres diseñar tu propio OS tienes que saber 16 bits para el bootloader y en el tema de rootkits tmb juega un importante papel.

Sludos y perdon por desviar el tema , solo que si lees este libro , vas a tener muchas menos preguntas y una gran variedad de herramientas para afrontar el tema del exploiting, malware ,etc.