linux gdb shikata ga nai

Iniciado por b4rd0ck, 3 Marzo 2017, 04:34 AM

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

b4rd0ck

Hola a todos. No se si esta es la sección correcta.
Tengo el siguiente problema: estoy intentando analizar un shellcode que dispara un /bin/sh, el cual
encodee con el algoritmo Shikata Ga Nai de Metasploit.
Luego lo incorporo en un programa en C y lo analizo con GDB.
1ro lo encodee con 1 interacción y pude debuguearlo sin problemas.
Cuando lo encodee con 2 iteracciones, ahí me surge que cuando va a hacer un XOR lo hace en un
área de memoria diferente a la que estoy ejecutando y me dispara el siguiente mensaje:

  "Program received signal SIGSEGV, Segmentation fault."

los datos son los siguientes:

Dump of assembler code for function code:
   0x56557020 <+0>:   fldlg2
   0x56557022 <+2>:   fnstenv [esp-0xc]
   0x56557026 <+6>:   pop    edx
   0x56557027 <+7>:   mov    ebx,0x8f433112
   0x5655702c <+12>:   sub    ecx,ecx
   0x5655702e <+14>:   mov    cl,0xe
=> 0x56557030 <+16>:   xor    DWORD PTR [edx+0x17],ebx
   0x56557033 <+19>:   add    edx,0x4
   0x56557036 <+22>:   add    ecx,DWORD PTR [eax+0x22]
   0x56557039 <+25>:   mov    eax,ds:0xfc8bb57a
   0x5655703e <+30>:   icebp 
   0x5655703f <+31>:   popa   
   0x56557040 <+32>:   loopne 0x56557089
   0x56557042 <+34>:   cmp    eax,0xe48312c7
   0x56557047 <+39>:   es jmp 0x11a0:0x2ecb1f42
   0x5655704f <+47>:   mov    DWORD PTR [edx-0x7022ec56],edi
   0x56557055 <+53>:   inc    ebx
   0x56557056 <+54>:   cdq   
   0x56557057 <+55>:   (bad) 
   0x5655705a <+58>:   fadd   QWORD PTR [edx+0x5d]
   0x5655705d <+61>:   add    al,0x15
   0x5655705f <+63>:   inc    esp
   0x56557060 <+64>:   push   esp
   0x56557061 <+65>:   lods   eax,DWORD PTR ds:[esi]
   0x56557062 <+66>:   mov    edi,0xc5b7cceb
   0x56557067 <+71>:   mov    fs,WORD PTR [esi]
   0x56557069 <+73>:   aad    0x24
   0x5655706b <+75>:   popa   
   0x5655706c <+76>:   pop    ebp
   0x5655706d <+77>:   xor    ecx,DWORD PTR [eax]
   0x5655706f <+79>:   add    BYTE PTR [eax],al
End of assembler dump.
0x56557030 in code ()
(gdb) print /x $edx
$1 = 0x56555452

¿cómo puedo sortear este problema?

Gracias.-