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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Como dejar NULL una opción de un Call?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como dejar NULL una opción de un Call?  (Leído 2,522 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Como dejar NULL una opción de un Call?
« en: 8 Julio 2011, 08:42 am »

Bueno creo que se entiende, es decir si quiero ejecutar un call que es más o menos así

Citar
PUSH 1000
PUSH 40
PUSH 3400
CALL EAX

Osea que cuando llegué a CALL EAX (EAX=Una API) en la pila aparecerán los parámetros más o menos así

Citar
ESP CALL to API
ESP+4 PUSH 3400
ESP+8 PUSH 40
ESP+C PUSH 1000

Pero en la descripción de esta apí ficticia el valor 1000 es opcional osea que se puede dejar NULL, mi pregunta es que coloco para no alterar los otros parámetros del call

Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Como dejar NULL una opción de un Call?
« Respuesta #1 en: 8 Julio 2011, 17:46 pm »

No entiendo la pregunta...

Estas hablando de definir una funcion con parametros opcionales?

No te entiendo...  :P
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Como dejar NULL una opción de un Call?
« Respuesta #2 en: 8 Julio 2011, 19:14 pm »

Con el ejemplo anterior cuando se llama a esa API esta tiene 3 parámetros verdad?

pero mi duda es como hago para dejar el primer parámetro (si se ve desde el desamblador el PUSH 1000) o último (si se ve desde la pila) vacio?

osea dejar un parámetro vacio ya que si este es opcional no sería necesario, pero si no lo pongo, al hacer los push estos se desfazarían

un ejemplo más para que se entienda

Citar
API "virtualxxx"

parámetros:

qw=1
as=2
ad=3

ahora si llevo este ejemplo al Ollydbg quedaría más o menos así

Citar
PUSH 3
PUSH 2
PUSH 1
CALL EAX (virtualxxx)

esto al llegar a la pila queda así:

_______________
Citar
|Call virtualxx to .....
|qw=1
|as=2
|ad=3

este es el ejemplo pero pregunto si ahora yo no necesito (opcional) poner el parámetro qw

por lo que en vez de quedar así

parámetros:

qw=Nada
as=2
ad=3

este si lo ignoro distorsiona los parámetros de la api:

Citar
PUSH 3
PUSH 2
CALL EAX (virtualxxx)

en la pila quedaría así:
____________________
Citar
|Call virtualxx to .....
|qw=2
|as=3

Por eso mi pregunta es que poner en el desamblador para que un parámetro de call se considere NULL ya que si no pongo nada este distorsionaría todos los parámetros como mostré en los ejemplos anteriores

Si no se entendió dímelo de nuevo

Saludos
« Última modificación: 8 Julio 2011, 19:22 pm por .:UND3R:. » En línea


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


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Como dejar NULL una opción de un Call?
« Respuesta #3 en: 8 Julio 2011, 19:40 pm »

la funcion es cdecl o stdcall?

si es stdcall, solo acepta un numero de paramentros constantes, por ende, si un paramentro es opcional se puede dejar nulo.
Para el caso: push 0

si es cdecl, puede aceptar numero de paramentros variables
PUEDES HACER el push 0.
o bien,
 si el programa pasa 3 paramentros, y tu quieres pasar dos, y se da el caso,  puedes:
a) modificar uno de los paramentros  que indicarian la cantidad de variables que se le pasar'a a la funcion. Por ejemplo si es wsprintf, y el parametro de formato es "%s%i" tendrias que sacar o %i o %s segun lo que quieras.
b)modificar el push que no quieras y reemplazarlo por nop.
b2)si reemplazas por nop, al final del llmado a la funcion deberas restar 4 al add esp, X
« Última modificación: 8 Julio 2011, 19:44 pm por _Enko » En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Como dejar NULL una opción de un Call?
« Respuesta #4 en: 8 Julio 2011, 19:55 pm »

Gracias enko_

Creo que la solución es PUSH 0 en resumen si alguien lo puede corroborar para desamblador ollydbg
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cómo dejar mi buscador así ???
Dudas Generales
Constance 4 5,517 Último mensaje 20 Septiembre 2010, 18:35 pm
por Constance
Como utilizar dos veces la funcionn srand(time(NULL))
Programación C/C++
BJM 3 7,039 Último mensaje 19 Enero 2013, 11:58 am
por Puntoinfinito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines