elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???  (Leído 2,003 veces)
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« en: 22 Agosto 2014, 16:40 pm »

Hola, estoy desarrollando un malware en ensamblador. Ya ha fallado varias veces cuando intento hacer una operacion que usa los registros ESI y EDI. Lo he analizado y he descubierto que los registros DS y ES no apuntan a los datos embebidos dentro del mismo segmento de codigo.

Por eso necesito que me ayuden un poco explicandome como hacer que los registros DS (Data Segment) y ES apunten hacia CS (Code Segment). Será que pueden darme un breve ejemplo en codigo de como hacerlo?? Gracias de antemano por sus respuestas.


En línea

Vista mi blog es enriquemesa.blogspot.com
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.662


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #1 en: 22 Agosto 2014, 17:05 pm »

Código
  1. push cs
  2. pop ds

Siempre es mejor exponer el problema que uno tiene en detalle (S.O., extracto de codigo, etc.) y no la solucion que cree debe darle.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #2 en: 22 Agosto 2014, 18:35 pm »

Gracias Eternal Idol, sé que debí ser un poco más especifico y comentar más acerca de mi problema, pero no sé si al explicar un poco más mi problema, la gente no responda y no quiero que piensen que soy vago o que no estoy trabajando por una solucion.

Ah, la solucion que me brindaste ya la había probado antes, y aún así mi programa falló. Ahora pienso que debe haber otra cosa que está mal en mi codigo. Por ahora no preguntaré más, para no saturar el foro de preguntas mías.

Gracias por tu respuesta.
En línea

Vista mi blog es enriquemesa.blogspot.com
cpu2


Desconectado Desconectado

Mensajes: 993


Ver Perfil
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #3 en: 22 Agosto 2014, 19:29 pm »

Corrijanme si me equivoco, pero para modificar los registros de los segmentos necesitas tener privilegios en CPL. En que modo estas?

A porcierto estas en x86 o en x64?

Recuerdo a ver leido de que en x64, se puede modificar los valores de fs y gs con una instruccion sin tener ningun tipo de privilejio, pero tienes que tenerla activada en el registro de control cr4.

Un saludo.
En línea

harry_the_blogger

Desconectado Desconectado

Mensajes: 105


Visita mi blog es enriquemesa.blogspot.com


Ver Perfil WWW
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #4 en: 22 Agosto 2014, 19:41 pm »

cpuz , estoy trabajando en x86. Usé el codigo que me dio Eternal Idol, pero mi programa falla de nuevo. No sé si necesito permisos para cambiar los registros de segmento. Bueno, si tu dices que necesito permisos, será reescribir el codigo de nuevo y evitar usar esos registros.

Código
  1. push cs
  2. pop ds
  3. push cs
  4. pop es
  5.  

A mí no me funciono. Estoy compilando con FASM, y compila bien. Pero en tiempo de ejecucion falla. Aqui dejo el codigo completo:

Código
  1. format pe console 4.0
  2. include 'C:\fasm\INCLUDE\WIN32AX.INC'
  3.  
  4. section '.text' readable writable executable
  5.  
  6. virus_size_before_compilation equ (end_of_file-main)
  7.  
  8. main:
  9.    invoke CreateFile, cFileName, GENERIC_READ, 0, 0, 4, FILE_ATTRIBUTE_NORMAL, 0
  10.    mov [file_handle], eax
  11.  
  12.    ;I get the filesize of the host, and move it to a variable.
  13.    ;This data could be interesting in a near future
  14.    invoke GetFileSize, [file_handle], 0
  15.    mov [host_size], eax
  16.  
  17.    ;Calculates the possible new size of the executable
  18.    ;add eax, virus_size
  19.    ;mov [infected_size], eax
  20.  
  21.    ;Read 8000 bytes from the file
  22.    invoke  ReadFile, [file_handle], buffer, 8000, bytesread, 0 ; Now read the full file
  23.  
  24.    ;Debugging purpouses.
  25.    invoke MessageBox, NULL, addr msg, addr msg_caption, MB_OK ; Easy way of outputing               the text
  26.    invoke MessageBox, NULL, addr cFileName, addr msg_caption, MB_OK
  27.  
  28.    ;You must verify that the API has successfully opened and read bytes from the file
  29.    invoke MessageBox, NULL, addr buffer, addr msg_caption, MB_OK
  30.  
  31.    lea edx, [buffer]       ;Load in edx the address of buffer
  32.                            ;I use the edx register as a pointer to the buffer.
  33.  
  34.                            ;Now I am in the DOS header.
  35.    cmp word [edx], "MZ"    ;Check if the file is a real executable
  36.    jnz bad_executable
  37.    add edx, [edx+60]       ;This instruction modify the pointer.
  38.                            ;Now the edx register points to a position
  39.                            ;60 bytes (3C in hex) after the begin of buffer
  40.                            ;Now I am in the PE Header
  41.  
  42.    cmp word [edx], "PE"    ;I check if the executable has a valid PE header
  43.                            ;This is very useful to know if I am infecting
  44.                            ;an old DOS program instead a Win32 executable.
  45.    jnz bad_executable
  46.    call good_executable
  47.  
  48.    ;First, make a routine that verifies that the DS:ESI and ES:EDI
  49.    ;pair of segments are correct and they points to the Code Segment
  50.    push cs
  51.    pop ds
  52.    push cs
  53.    pop es
  54.  
  55.    invoke MessageBox, NULL, addr end_message, addr msg_caption, MB_OK
  56.  
  57.    ret
  58.  
  59. good_executable:
  60.    invoke MessageBox, NULL, addr msg_found, addr msg_caption, MB_OK
  61.    ret
  62.  
  63. bad_executable:
  64.    invoke MessageBox, NULL, addr msg_not_found, addr msg_caption, MB_OK
  65.    ret
  66.  
  67. datazone:
  68.    cFileName db 'test.exe', 0
  69.    ;This buffer will store parts of the whole file.
  70.    buffer rb 8000
  71.  
  72.    ;Strings zone...
  73.    end_message db 'The file was sucessfully infected...', 0
  74.    msg_found  db      'I have found a Real EXE!!!...', 0
  75.    msg_not_found db  'The current exe file is invalid...', 0
  76.    file_signal db 'X'
  77.    end_msg     db      'End of program', 0
  78.    msg         db      'File founded', 0
  79.    msg_caption db      'Assembly program...', 0
  80.    sign        db      'Sorry, You have HIV...', 0
  81.    byteswritten dd      ?
  82.    bytesread    dd      ?
  83.  
  84.    ;Variables needed by the infection function
  85.    file_handle  dd      ?
  86.    host_size dd ?
  87.    map_handle dd ?
  88.    infected_size dd ?
  89.    virus_size dd virus_size_before_compilation
  90.    OldEip  dd  ?
  91. end_of_file:
  92. .end main
  93.  
En línea

Vista mi blog es enriquemesa.blogspot.com
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.662


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #5 en: 22 Agosto 2014, 20:46 pm »

cpuz , estoy trabajando en x86. Usé el codigo que me dio Eternal Idol, pero mi programa falla de nuevo. No sé si necesito permisos para cambiar los registros de segmento. Bueno, si tu dices que necesito permisos, será reescribir el codigo de nuevo y evitar usar esos registros.

Deberias decirnos exactamente donde falla. ¿Lo depuraste? ¿CreateFile retorna algo diferente a -1 (0xFFFFFFFF) pese a que intentes abrir el archivo en modo exclusivo? Sinceramente no se donde donde esta la relacion con los segmentos todavia ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
cpu2


Desconectado Desconectado

Mensajes: 993


Ver Perfil
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #6 en: 22 Agosto 2014, 20:53 pm »

Deberias decirnos exactamente donde falla. ¿Lo depuraste? ¿CreateFile retorna algo diferente a -1 (0xFFFFFFFF) pese a que intentes abrir el archivo en modo exclusivo? Sinceramente no se donde donde esta la relacion con los segmentos todavia ...

Exacto, no se que pintan los segmentos hay, pero una cosa @EI es correcto que los segmentos solo se pueden modificar con privilegios en CPL, en ring3 nada, no?

O eso entendi en los manuales.

@harry_the_blogger

Podrias utilizar push para guardar los retornos de las funciones, mejor que moverlos a .data.

Un saludo.
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.662


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: ¿Como hacer que los registros DS y ES apunten al Segmento de Codigo (CS)???
« Respuesta #7 en: 22 Agosto 2014, 21:06 pm »

Exacto, no se que pintan los segmentos hay, pero una cosa @EI es correcto que los segmentos solo se pueden modificar con privilegios en CPL, en ring3 nada, no?

Claro, esto genera una excepcion, por eso le dije al principio que deberia intentar explicar su PROBLEMA y no la supuesta SOLUCION. Si hubiera estado en modo real el codigo le hubiera servido pero en este caso es seguro que el PROBLEMA es otro y obviamente otra sera la SOLUCION.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines