Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - lapras

#1
ASM / Shellcode no imprime caracter(64 bits)
10 Noviembre 2012, 04:37 AM
Hola, estaba haciendo una shellcode de prueba. Simplemente debe de imprimir el carácter 'w'.
He usado el gdb para comprobar todas la instrucciones y el programa acaba correctamente pero no se por que no imprime el carácter.

#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
 
int (*sc)();
/****************************************************************
0000000000000000 <main>:                                         /
  0: 48 31 c9             xor    %rcx,%rcx                  /
  3: 48 31 c0             xor    %rax,%rax                  /
  6: eb 11                 jmp    19 <n>                     /
                                                                 /
0000000000000008 <et>:                                            /
  8: 59                   pop    %rcx                       /
  9: b0 04                 mov    $0x4,%al                   /
  b: b3 01                 mov    $0x1,%bl                   /
  d: b2 01                 mov    $0x1,%dl                   /
  f: cd 80                 int    $0x80                      /
 11: 48 31 c0             xor    %rax,%rax                  /
 14: 48 ff c0             inc    %rax                       /
 17: cd 80                 int    $0x80                      /
                                                                 /
0000000000000019 <n>:                                             /
 19: e8 ea ff ff ff       callq  8 <et>                     /
                                                                 /
000000000000001e <abc>:                                           /
...                                                           /
******************************************************************/



char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x11\x59\xb0\x04\xb3\x01\xb2\x01\xcd\x80\x48\x31\xc0\x48\xff\xc0\xcd\x80\xe8\xea\xff\xff\xffw";
 
int main(int argc, char **argv) {
 
   char *ptr = mmap(0, sizeof(shellcode),
           PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON
           | MAP_PRIVATE, -1, 0);
 
   if (ptr == MAP_FAILED) {
       perror("mmap");
       exit(-1);
   }
 
   memcpy(ptr, shellcode, sizeof(shellcode));
   sc = ptr;
 
   (void)((void(*)())ptr)();
 
   return 0;
}


EI: juntando mensajes.

He corregido algunos posibles errores. Pero sigue sin funcionar.
Tengo que decir que que el código ensamblador(en nasm) funciona pero la shellcode insertada en c no funciona.
Lo que he hecho es añadir los xor por si quedaba basura en los registros y cambiar la llamada a exit() por un ret para que después de la función continúe.

#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
 
int (*sc)();
/****************************************************************
0000000000000000 <main>:                                      /
  0: 48 31 c9             xor    %rcx,%rcx              /
  3: 48 31 c0             xor    %rax,%rax              /
  6: eb 13                 jmp    1b <n>                 /
                                                                 /
0000000000000008 <et>:                                        /
  8: 59                   pop    %rcx                   /
  9: 48 31 c0             xor    %rax,%rax              /
  c: 48 31 db             xor    %rbx,%rbx              /
  f: 48 31 d2             xor    %rdx,%rdx              /
 12: b0 04                 mov    $0x4,%al               /
 14: b3 01                 mov    $0x1,%bl               /
 16: b2 01                 mov    $0x1,%dl               /
 18: cd 80                 int    $0x80                  /
 1a: c3                   retq                          /
                                                             /
000000000000001b <n>:                                         /
 1b: e8 e8 ff ff ff       callq  8 <et>                 /
                                                             /
0000000000000020 <abc>:                                       /
 20: 77                   .byte 0x77                    /
...                                                       /
******************************************************************/



char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x13\x59\x48\x31\xc0\x48\x31\xdb\x48\x31\xd2\xb0\x04\xb3\x01\xb2\x01\xcd\x80\xc3\xe8\xe8\xff\xff\xffw";
//char shellcode[] = "\x48\x31\xc9\x48\x31\xc0\xeb\x11\x59\xb0\x04\xb3\x01\xb2\x01\xcd\x80\x48\x31\xc0\x48\xff\xc0\xcd\x80\xe8\xea\xff\xff\xffw";
 
int main(int argc, char **argv) {
 
   char *ptr = mmap(0, sizeof(shellcode),
           PROT_EXEC | PROT_WRITE | PROT_READ, MAP_ANON
           | MAP_PRIVATE, -1, 0);
 
   if (ptr == MAP_FAILED) {
       perror("mmap");
       exit(-1);
   }
 
   memcpy(ptr, shellcode, sizeof(shellcode));
   sc = ptr;
 
   (void)((void(*)())ptr)();
   printf("\n");
 
   return 0;
}


El código de nasm es el siguiente:
Código (asm) [Seleccionar]

;EXAMPLE VARIABLES IN LINUX


global main

main:                           ; main

xor rcx, rcx            ; eficient way turning register to 0
xor rax, rax            ; exclusive or
         
jmp n            
et:
pop rcx

xor rax, rax
xor rbx, rbx
xor rdx, rdx
mov al, 4                      ; Number of system call (write)
mov bl, 1                      ; argument(1=stdout)
mov dl, 1                      ; number of characters
int 0x80

ret

n:
call et
abc: db 'w'            ; declaring one variable(size 8 bytes)


EI: juntando mensajes.

Bueno, resulta que también pregunté en stackoverflow y al final me contesto a mi mismo.
Podeis ver la respuesta en este hilo: http://stackoverflow.com/questions/13323379/shell-code-print-character64bits
#2
Java / Ejecutar .class en windows.
6 Octubre 2011, 23:41 PM
Hola, estuve programando en java en linux.
Pero ahora en windows no se como, una vez compilado el código, puedo ejecutar el archivo.class
En linux era muy fácil porque con solo poner: java programax   en la linea de comandos ya funcionaba.
#3
Hola estoy empezando a escribir shellcodes. Estaba leyendo un manual que encontre en esta misma página: Shellcodes linux de Raise.
He llegado ala parte en donde pone este código:

Código (asm) [Seleccionar]
jmp    0x1f
        popl   %esi
        xorl   %eax,%eax
        movb   %al,0x7(%esi)
        movl   %esi,0x8(%esi)
        movl   %eax,0xc(%esi)
        movb   $0xb,%al
        movl   %esi,%ebx
        leal   0x8(%esi),%ecx
        leal   0xc(%esi),%edx
        int    $0x80
        xorl   %eax,%eax
        xorl   %ebx,%ebx
        inc    %eax
        int    $0x80
        call   -0x24
        .string \"/bin/sh\"


Como podrán comprobar es ensamblador de 32 bit y al compilarlo me da error.
Entonces decidí hacer una modificaciones:

Código (cpp) [Seleccionar]
void funcion();
int main(){

funcion();



}

void funcion(){
    asm("jmp    0x2e(%rip);"
        "popq   %rsi;"
        "xorq   %rax,%rax;"
        "movb   %al,0x7(%rsi);"
        "movq   %rsi,0x8(%rsi);"
        "movq   %rax,0xc(%rsi);"
        "movb   $0xb,%al;"
        "movq   %rsi,%rbx;"
        "leaq   0x8(%rsi),%rcx;"
        "leaq   0xc(%rsi),%rdx;"
        "int    $0x80;"
        "xorq   %rax,%rax;"
        "xorq   %rbx,%rbx;"
        "inc    %rax;"
        "int    $0x80;"
        "call   -0x29;"
        ".string \"/bin/sh\";");
}


Luego el problema es que me da segmentation fault.

Les pongo un pequeño analisis en gdb para que lo vean más claro:
(gdb) disassemble funcion
Dump of assembler code for function _Z7funcionv:
   0x00000000004005c4 <+0>: push   %rbp
   0x00000000004005c5 <+1>: mov    %rsp,%rbp
   0x00000000004005c8 <+4>: jmpq   *0x2e(%rip)        # 0x4005fc <_Z7funcionv+56>
   0x00000000004005ce <+10>: pop    %rsi
   0x00000000004005cf <+11>: xor    %rax,%rax
   0x00000000004005d2 <+14>: mov    %al,0x7(%rsi)
   0x00000000004005d5 <+17>: mov    %rsi,0x8(%rsi)
   0x00000000004005d9 <+21>: mov    %rax,0xc(%rsi)
   0x00000000004005dd <+25>: mov    $0xb,%al
   0x00000000004005df <+27>: mov    %rsi,%rbx
   0x00000000004005e2 <+30>: lea    0x8(%rsi),%rcx
   0x00000000004005e6 <+34>: lea    0xc(%rsi),%rdx
   0x00000000004005ea <+38>: int    $0x80
   0x00000000004005ec <+40>: xor    %rax,%rax
   0x00000000004005ef <+43>: xor    %rbx,%rbx
   0x00000000004005f2 <+46>: inc    %rax
   0x00000000004005f5 <+49>: int    $0x80
   0x00000000004005f7 <+51>: callq  0xffffffffffffffd7
   0x00000000004005fc <+56>: (bad) 
   0x00000000004005fd <+57>: (bad) 
   0x00000000004005fe <+58>: imul   $0xc9006873,0x2f(%rsi),%ebp
---Type <return> to continue, or q <return> to quit---
   0x0000000000400605 <+65>: retq   
End of assembler dump.
(gdb) run
Starting program: /home/tuket/a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000004005c8 in funcion() ()
(gdb)


Ah por cierto al compilar el codigo me daba un warning en el jmp que dicia que no se habia indicado el signo *. Sin embargo en el codigo desemsamblado vemos que lo ha puesto solo.
Aver si me podeis ayudar :)
#4
Hardware / Drivers Pavilion Elite m9075.es
22 Junio 2011, 23:43 PM
Hola tengo un "Pavilion Elite m9075.es" me ha costada encontrar los drivers para xp  pero me queda uno muy importante que es el de red.
En la pagina oficial solo se encuentran los de windows vista.
He buscado en google pero me resulta imposible
http://h10025.www1.hp.com/ewfrf/wc/product?lc=es&dlc=es&cc=es&lang=es&product=3605248&

En esta pagina tienes para descargar los drivers y ver las especificaciones. Parece que el adaptador de red es Intel 82566DC-2 Gigabit.
Pero aun sabiendo el nombre no he encontrado el driver necesario.
Gracias por adelantado y espero que puedan ayudar.  ;D
#5
He hecho 2 programas de sockets en C++.
Consiste enviar la cadena "hola" desde un ordenador a otro y hacer que lo muestre en la pantalla del otro ordenador.
Lo he conseguido hacer pero el problema es que el 80% de las veces los datos llegan corruptos. Esto me extraña por que según tengo yo entendido los sockets de flujo usan el protocolo TCP y en este protocolo es el mismo el que se encarga de que lleguen los resultados adecuadamente.
¿Por que sucede esto?¿Como se puede evitar?

Datos: un ordenador es linux y el otro es windows. No estoy usando datagramas.
#6
Bases de Datos / cual es mi error: sentencia SQL
23 Octubre 2010, 00:04 AM
CREATE DATABASE IF EXISTS videoteca;

Pues eso a ver si podéis encontrar el error por que yo no.
Meda un error 1064 y que me lea el manual de sintaxis.

edito:
Vale que tonto xD
CREATE DATABASE IF NOT EXISTS videoteca;
#7
Dudas Generales / reparacion windows 7
18 Octubre 2010, 22:47 PM
hola resulta que una prima se le ha escoñao el ordenador, es windows 7.
El problema es que al iniciar se queda la pantalla en negro sale el cursor y ahí se queda no puedo ejecutar el administrador de tareas con ctr+alt+supr.
Desde un live cd linux intente acceder al disco duro de diversas formas: mediante nautilus, mount y munt force, de todas las maneras me daba error(supongo que debe ser lo típico de que cerraste mal windows y tienes que iniciar y apagar correctamente). Luego también probé con un live Cd de windows xp llamado Ultimate boot CD for Windows aqui me indicaba que el tamaño de tal partición en la que estaba windows 7 es de -1 Mb xD y cuando intentaba acceder mediante el gestor de carpetas de windows se quedaba trabado (No responde)  también lo intente con el interprete de comandos cmd y simplemente entraba y salia .
Asi que... esto tiene remedio ?? puede ser que haya algún sector del disco dañado?? hay alguna alternativa??

PD: en realidad no tengo ninguna necesidad de salvar datos puesto que tengo copia de seguridad, es simplemente para saber que podría hacer en tal apuro.
Gracias por adelantado.
#8
Hola resulta que tengo una serie de dudas sobre telecomunicaciones en móviles, es sólo por curiosidad no tengo intenciones maliciosas ni nada xD

Bueno ahí va mi problema.
Imaginemos que un amigo me llama desde su teléfono móvil y emite unas ondas a la torre de comunicaciones, entonces yo contesto la llamada y nos ponemos a hablar, pero las ondas que emite la torre llegan a todos los teléfonos moviles aunque supuestamente sólo mi teléfono móvil capta la señal que emitió mi amigo y emite el sonido correspondiente.
Total mis preguntas son las siguientes:¿Como sabe mi teléfono móvil que esa señal que emite mi amigo es la que debe captar? ¿Otal vez es la torre la que verifica una identidad?(yo creo que esto no debe ser por que aunque verificase una identidad la torre seguiría emitiendo datos sin saber quien los capta)¿Podría algún dispositivo captar la señal que envía mi amigo, y escuchar lo que debería de estar diciéndome sólo a mi? ¿Tiene cada número de teléfono una señal espacial y supuestamente única?
Graciassss
#9
Ingeniería Inversa / Ollydbg me engaña
3 Septiembre 2010, 17:42 PM
Resulta que en dump en la direccion 7C800000h me pone 4D5Ah('MZ') pero resulta que si hago MOV WORD AX, [7C800000] me pone en AX otra cosa ¿Por que pasa esto? ¿Me esta olly siendo infiel? :(
#10
Hace bastante tiempo que no encuentro milworm en la web. es que se ha caído? para siempre?
#11
Hola tengo una duda. Si yo escribo un mensaje a una hora en mi país y lo ve alguien de otro país con diferencia horaria¿el ve la hora en la que lo escribí en mi país o en el suyo? :-\
Gracias de antemano. ;)
#12
La verdad que no tengo ni idea de como hacerlo lo que mas me hacerco es esto:
.text
.global main

main:

movl 1, %eax
movl %eax, u
movl $u, %ecx
addl $48, %ecx


movl $3, %edx
movl $1, %ebx
movl $4, %eax
int $0x80

.data

u:
.string "0"

Quisiera mostrar lo que hay en la direccion 1 de la memoria, no se ni siquiera si se puede o esta protegido :-\
#13
ASM / Que cosa mas rara
2 Noviembre 2009, 23:19 PM
que alguien compile y pruve este codigo ensamblador en linux.
yo de verdad no entiendo nada, pero cada vez esto me atrae mas:



.text  

       .globl main  

main:

       movl    $1, %edx
addl     $1, %edx

movl    $1, %ebx      
       movl    $4, %eax        
       int     $0x80          

movl $msg, %edx
movl    $1, %ebx        
       movl    $4, %eax      
       int     $0x80        




       movl    $0, %ebx      
       movl    $1, %eax      
       int     $0x80          

.data
msg:
.string "\n"
#14
ASM / sintaxis intel y AT&T
4 Septiembre 2009, 13:31 PM
hola estoy empezando con el esamblador y me gustaria saber si con el compilador gcc es posible que al compilar codigo en C me genere el codigo ensamblador en sintaxis intel en vez de AT&T cuando uso la opcion -S. Tambien quisiera saber que diferencias hay entre las dos sintaxis y cual es mas recomendable aprender. Por cierto ¿es muy diferente el ensamblador de 32 bits y el de 64?

gracias de antemano