Como dejar NULL una opción de un Call?

Iniciado por .:UND3R:., 8 Julio 2011, 08:42 AM

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

.:UND3R:.

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

CitarPUSH 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í

CitarESP 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

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

MCKSys Argentina

No entiendo la pregunta...

Estas hablando de definir una funcion con parametros opcionales?

No te entiendo...  :P
MCKSys Argentina

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


.:UND3R:.

#2
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

CitarAPI "virtualxxx"

parámetros:

qw=1
as=2
ad=3

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

CitarPUSH 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:

CitarPUSH 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

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

_Enko

#3
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

.:UND3R:.

Gracias enko_

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

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