duda ollyscript, saber si saltó o no

Iniciado por .:UND3R:., 31 Agosto 2011, 22:02 PM

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

.:UND3R:.

como puedo hacer para que el script sepa si con un je jne ja,etc saltó o no?

Saludos

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

MCKSys Argentina

Revisaste el README de OdbgScript?

3.1 Language
------------
The scripting language of OllyScript is an assembly-like language.

In the document below, src and dest can be (unless stated otherwise):
- Constant in the form of a hex number without prefixes and suffixes, with leading 0 (i.e. 00FF, not 0x00FF or 00FFh)
   For decimal values, use the point (i.e. 100. 128.)
- Variable previously declared by VAR, or are declared with MOV
- A 32-bit registers (one of EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP).
   A 16-bit register (one of AX, BX, CX, DX, SI, DI, BP, SP)
   A 8-bit register (one of AL, AH, ... DL, DH)
- A memory reference in square brackets (i.e. [401000] points to the memory at address 401000,
   [ecx] points to the memory at address ecx).
- A flag with an exclamation mark in front (one of !CF, !PF, !AF, !ZF, !SF, !DF, !OF)
- Sometimes byte strings are required. Those are scripted as #6A0000# (values between two #) and
   must have an even number of characters.
   Some byte strings can contain the wildcard '?', for example #6A??00# or #6?0000#
- A combination of these values with operators:

You can use operators in your scripts, +-*/&|^>< for dword and + to concatenate strings.
- Operators > and < are shr and shl (>> and << in C/C++)
- Operator ^ is XOR
- Operator & is AND
- Operator | is OR
MCKSys Argentina

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


.:UND3R:.

No entendí como aplicarlo, mira me explico

00427b5 cmp eax,ebx
............ jz 00457b4
00457b4
...
...
..

como sabe si saltó o no?, se guarda en $RESULT?

encontré esto, pero no entendí como aplicarlo a mi caso
CitarTEST dest,src
-------------
Performs a logical AND of the two operands updating the flags register without saving the result.
(Modifies Flags: CF OF PF SF ZF (AF undefined))

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

_Enko

#3
Citar
00427b5 cmp eax,ebx
............ jz 00457b4
00457b4

si estas en 00457b4 es porque si salto, si no salto, sigue en la instruccion que continua al jz. Para el caso  en 00427XX

Si quieres asegurarte que 45754 se ejecute solamente si hubo un salto, coloca un jmp antes.

00457XX jmp 00XXXXXX
00457b4  ;si estas aqui, es que viene desde el salto (jz 457b4)



Citar
test eax, eax
jz eax_es_igual_a_cero
jnz eax_no_es_igual_a_cero

.:UND3R:.

Cita de: _Enko en  1 Septiembre 2011, 04:10 AM
si estas en 00457b4 es porque si salto, si no salto, sigue en la instruccion que continua al jz. Para el caso  en 00427XX

Si quieres asegurarte que 45754 se ejecute solamente si hubo un salto, coloca un jmp antes.

00457XX jmp 00XXXXXX
00457b4  ;si estas aqui, es que viene desde el salto (jz 457b4)




Entiendo la idea, pero como aplicarla en OllyScript?

Saludos y gracias por responder

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

apuromafo CLS

#5
idea 1 , comparar la direccion

Citarvar direccion1
var direccion2
mov direccion1,00457b4
mov direccion1,00457b5// este deberia ser debajo del salto
//bp direccion1
//bp direccion1
cmp eip,direccion1
je estamosendireccion1
cmp eip,direccion2
je estamosendireccion2
eval "que raro estamos en {eip}!!!"
msg $RESULT
jmp fin
estamosendireccion1:
eval "estamos en  {direccion1}"
msg $RESULT
//bc direccion1
jmp fin
estamosendireccion2:
eval "estamos en  {direccion2}"
msg $RESULT
//bc direccion2
jmp fin
fin:
ret


idea 2 comparar por ejecucion eob y run/erun/ bpgoto



idea 3 comparar los flags

idea 4, comparar por bytes y destinos.

etc.

.:UND3R:.

Cita de: apuromafo en  1 Septiembre 2011, 16:07 PM
idea 1 , comparar la direccion


idea 2 comparar por ejecucion eob y run/erun/ bpgoto
idea 3 comparar los flags

idea 4, comparar por bytes y destinos.

etc.

Muchas gracias Apuromafo, lo tomaré como referencia a mi idea

Saludos

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

.:UND3R:.


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

apuromafo CLS

si estamos en una direccion digamos que es "eip",
vemos el tamaño de ese valor de eip , no se un push un call o otro
luego se resta a eip, el valor del tamaño de eso y ahi iria atras.

hay muchas cosas dependiendo insisto de lo que realmente se quiere hacer.
otra cosa se podria investigar el valor de codesize o otro..aver mejor un ejemplo grande..:


aqui queria buscar la iat, en el oep, luego si no la pillo busco un jmp comenzando en Eip, y encontrando su memory base
en otras palabras si estoy en 401000 y comienza el modulo en 400000 pues colocara start el valor de 400000 , luego voy revisando si tiene nombre de api con la funcion GN, luego voy restando de donde si encuentra una api hacia atras con sub , luego de encontrar ese lugar loguea si la distancia es 4, pasa que si no hay apis, normalmente hay un espacio asi

12345 api
00000
00000
12345 api

si cuenta por ejemplo 15 funciones y en la tercera vez cuenta 16, pues no es como para detenerlo....
luego si tenemos una iat asi por ejemplo
00000
00000
00000
12345 api

puede que la funcion sea por ejemplo 20 apis y luego 20 y luego 20, ahi veo que
el primer valor logueado y con la misma cantidad de funciones repetidas, es la que deberemos usar como inicio
esto solo para ejemplos pequeños

private script como idea de   JMp dword api buscando el comienzo de la iat


Citarmov safeexit,0
MOV RARO,0
mov start,eip
GMEMI start,MEMORYBASE
mov start,$RESULT
iatcero_sub1:
findmem #FF25????????#, start
cmp $RESULT, 0
je nohaymas
CMP RARO,15
JE nohaymas2
mov resuultado,$RESULT
gci resuultado,DESTINATION
mov tmp,$RESULT
gn tmp
mov API_NAME, $RESULT
cmp API_NAME, 0
je msgg55
mov hash,[resuultado+2],4
mov hash2,[resuultado+2],4
//v1 GMEMI hash,MEMORYBASE
//mov iatapuromafo, $RESULT
//GMEMI hash,MEMORYBASE
//mov memo,$RESULT
//mov size,$RESULT
mov idolo,4
mov cam,1
mov malas,0
terminarree:
cmp idolo,7
je ahorasi
sub hash2,4
//mov hash2,$RESULT
//gci hash2,DESTINATION
//mov tmp,$RESULT
mov hash3,[hash2],4
gn hash3
mov API_NAME, $RESULT
cmp API_NAME, 0
je nopillaapi
inc cam
jmp terminarree
mueve7:
mov idolo,7
jmp terminarree
nopillaapi:
add malas,1
//eval "{hash2} y {malas}"
//log $RESULT
cmp malas,1
jne malas2
ja malas2
mov hash_acumula1,hash2
jmp continue
malas2:
cmp malas,2
jne malas3
ja malas3
mov hash_acumula2,hash2
mov comparar,hash_acumula1
sub comparar,hash_acumula2
cmp comparar,4
jne increm
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm:
jmp continue
malas3:
cmp malas,3
jne malas4
ja malas4
mov hash_acumula3,hash2
mov comparar2,hash_acumula2
sub comparar2,hash_acumula3
cmp comparar2,4
jne increm2
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm2:

jmp continue
malas4:
cmp malas,4
jne malas5
ja malas5
mov hash_acumula4,hash2
mov comparar3,hash_acumula3
sub comparar3,hash_acumula4
cmp comparar3,4
jne increm3
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm3:
jmp continue
malas5:
cmp malas,5
jne malas6
ja malas6
mov hash_acumula5,hash2
mov comparar4,hash_acumula4
sub comparar4,hash_acumula5
cmp comparar4,4
jne increm55
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm55:
jmp continue
malas6:
cmp malas,6
jne malas7
ja malas7
mov hash_acumula6,hash2
mov comparar5,hash_acumula5
sub comparar5,hash_acumula6
cmp comparar5,4
jne increm56
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm56:
jmp continue
malas7:
cmp malas,7
jne malas8
ja malas8
mov hash_acumula7,hash2
mov comparar6,hash_acumula6
sub comparar6,hash_acumula7
cmp comparar6,4
jne increm57
inc safeexit
mov algo,hash2
add algo,4
add algo,4
eval "tengo {safeexit} diferencia de 4, y {cam} //{algo}"
log $RESULT,""
increm57:
jmp continue
malas8:
continue:
cmp malas,10
je mueve7
cmp safeexit,4
je cuidado
jmp terminarree
cuidado:
eval "{hash2} y {malas}"
log $RESULT,""
jmp terminarree

ahorasi:
ret

mov restar,hash,1
sub hash,restar
mov iatapuromafo,hash

mov start2,iatapuromafo
add start2,restar
findmem #000000000000000000000000#, start2
mov end, $RESULT
mov end2,500
mov end3,end2
add end3,iatapuromafo

mov end4,end
//

cmp end4,end3
ja end3
sub end4,iatapuromafo
mov end5,end4
log "working with hash+iatzise below 500"
ret
end3:
mov end5,end2
log "working with hash+default 500 iatzise"
ret
nohaymas:
msgg:
msg "try other way"
ret
msgg55:
add start,4
INC RARO
jmp iatcero_sub1

nohaymas2:
msg "se buscaron 15 y nada!"
ret