Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Hendrix en 26 Mayo 2006, 18:30 pm



Título: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 18:30 pm
Weno, hacia ya tiempo que no preguntaba en este subforo....ya es hora de preguntar algo... ;D ;D ;D

Bien, supongo que todos konoceran al themida por ejemplo, no??? pos me gustaria saber si es posible en VB desenkriptar una rchivo en memoria (es decir, sin desenkriptar el archivo y luego ejekutarlo...)

O por ejemplo lo que hace en UPX, que "reestablece" los datos en memoria....

Alguien podria ayudarme en esto????

Salu2 y gracias...



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 18:33 pm
Si, se puede hacer. Con las funciones de la familia Virtual* (VirtualAlloc, VirtualProtect, etc).


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 18:44 pm
me puedes dar algun ejemplo???? :-\ :-\ :-\

Gracias....en kuanto pueda (ahora mismo no puedo) me mirare a fondo estas funciones aparte de la info que me des... :P :P

Salu2



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 18:49 pm
me puedes dar algun ejemplo???? :-\ :-\ :-\

Gracias....en kuanto pueda (ahora mismo no puedo) me mirare a fondo estas funciones aparte de la info que me des... :P :P

Hace mil años que no programo en VB pero el UPX es Open Source.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 18:56 pm
el upx esta en VB???? si esta en C no se si lo voy a saber traducir....pero weno...da igual, me esforzare en entenderlo....

Salu2 y gracias...



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 19:07 pm
Creo que esta en C y sino en C++.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 19:14 pm
Bien, kuando guardo 2sitio" en la memoria para poner alli el programa...que ago?? porgo el kode ya desenkriptado kon WriteMemory???? :-\ :-\ :-\

Salu2



Título: Re: Desencriptacion en Memoria
Publicado por: byebye en 26 Mayo 2006, 21:01 pm
esque no guardas el codigo en una segunda zona (puede que alguno asi lo haga) pero poniendo el upx de ejemplo. digamos que el añade al ejecutable a comprimir la rutina de compresion y lo modifica el entrypoint para que apunte a esa rutina para que lo descomprima en cada ejecucion.

digamos que lo que hace es mirandolo de forma simpel asi:

inicio del programa (rutina que descomprime)

codigo
codigo
codigo
......
jmp direccion original donde empieza el codigo del programa.

tb te puedes encontrar compresores que añadan sus propias cabeceras y descompriman las originales en ejecucion o "poco a poco" todo depende.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 21:37 pm
Y eso de modificar el Entry Point en VB que tal esta??? Ademas, hacia donde lo tengo que apuntar para que se desenkripte??? ya que yo lo que e entendido es que primero hace unas acciones el upx y luego ejektua el codigo normal... :-\ :-\ :-\

Salu2 y gracias por esforzaros a explikarlo... ;) ;)



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 21:45 pm
Modificar el entry point es muy simple, es un DWORD (cuatro bytes). Tenes que saber bien el formato PE.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 21:52 pm
Ok...esto me lo puedo empollar yo solo...pero una vez sepa modifikar el PE, hacia donde lo ago apuntar???? :-\ :-\ :-\ supongo que a la funcin de desenkriptacion no, o si???stoy algo perdido... :-\ :-\ :-\

Saly2 y reitero las gracias... ;) ;)



Título: Re: Desencriptacion en Memoria
Publicado por: byebye en 26 Mayo 2006, 22:02 pm
logico, tiene que apuntar a tu rutina para descifrar el codigo.


Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 22:17 pm
Efectivamente y esta despues de descifrar tiene que saltar al codigo descifrado.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 22:49 pm
haber...diganme kon este eskema si voy en lo cierto o estoy perdido....

[ejecucion del archivo]
-Modificamos el PE-
- lo redireccionamos al code de desencriptacion-
-a este lo redireccionamos a una string enkriptada-
- la desenkritpa y luego que hace???-
- vuelve a otra string enkritpada y la desenkripta-
- se produce esto repetidas veces hasta finalizar la desenkriptación del ejekutable-
[Fin del ejektuable]

Mas o menos es asi????

Duda: - la desenkritpa y luego que hace???-

 :-\ :-\ :-\

Salu2



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 26 Mayo 2006, 22:53 pm
Sera una ristra de bytes me imagino y no una string como tal. Despues de haber descifrado todo saltas o llamas (jmp/call) al entry point original del programa.


Título: Re: Desencriptacion en Memoria
Publicado por: byebye en 26 Mayo 2006, 23:23 pm
mas o menos es como dices pero no del todo.

supongamos que el codigo del ejecutable original esta en 4500 (ficticio). ahora tu pones tu codigo en 4800 (el que descifra) pues el entrypoint del programa a de ser 4800 (esto no es asi ya que las direcciones no son igual en disco que en memoria pero para explicarlo mas o menos sobra).

ahora tu rutina tendria un puntero a 4800 que es donde estaria el inicio de los bytes cifrados, los desencriptas y saltas a esa direccion una vez la descompresion se a realizado.


lee el formato PE, y desde luego en vb no voy a decir que no se pueda, pero que es un trabajo de chinos si te lo digo.



Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 26 Mayo 2006, 23:32 pm
Kon lo que tu me as dicho entiendo esto:

tenemos un archivo de 4500 que okupa esto:

[---------------------------------]

Bien, kuando lo enkripto me tiene que ekdar esto????:

[---------------------------------][---------------------------------]

Pero esto es obvio que no es asi...proek, de que serviria enkriptarlo???

Otra kosa que se me vieen a la kabeza es esto:

Este espacio:

[---------------------------------] Pero vacio!!!! y ahora tenemos esto:


[---------------------------------][---------------------------------]

Lo que esta en kolor es la aprte enkritpada....luego lo que yo me imagino es que redirecciono a la parte enkriptada y kuando lo desenkritpa lo pone en la aprte kee sta vacia, luego kuando lo tiene todo desenkritpado direcciona el PE al PE original del archivo desenkritpado...y asi ya funcionaria normal....

Creo que esta ultima es la mas coerente....es asi que se hace???

Muchas Gracias!!!



Título: Re: Desencriptacion en Memoria
Publicado por: byebye en 27 Mayo 2006, 00:43 am
si mas o menos.

Citar
Pero esto es obvio que no es asi...proek, de que serviria enkriptarlo???

por logica la funcion que descifra tiene que estar sin cifrar, pq si el ordenador reconoce una instruccion como 6 y cifrada vale 8 no tiene ni idea de que le estas diciendo. ¿de que te sirve? pues desensambla un programa con upx por ejemplo y veras la rutina de descompresion pero ¿y el codigo original?


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 11:05 am
ok ok...ya lo entendi.... ;D ;D ;D ;D muchas gracias!!!!

Ahora solo me falta saber komo manejar el PE....me podriais dar alguna funcion que lo haga???? despues yo ya buskare como se utiliza y esto....y tendre que escribir en memoria, no??? puesto que tendre que redireccionar el PE mientras se esta ejekutando.... :-\ :-\ :-\

Salu2 y Gracias...


Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 27 Mayo 2006, 11:25 am
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 11:35 am
Muchas gracias....esta en ingles pero weno....supongo que no habra info en español, no????

Todo lo que sea algo komplikado esta en ingles.... :( :(

Salu2 y Gracias... ;) ;)



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 27 Mayo 2006, 11:37 am
No lo se la verdad (busca formato PE), en realidad TODO (o casi) esta en ingles y no demasiado en castellano. Es fundamental ENTENDER ingles para poder moverse en este mundo de la informatica ...


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 11:48 am
ya...de entender lo entiendo...pero me kuesta bastante....

Navegando por google enkontre una tecnika que utilizan los virus que es exactamente lo que yo keiro hacer, que es esta:

Entry Point Obscuring

Pero tampoko se explika bien komo se hace, y si lo explika lo explika kon kodigo ASM.... :-\ :-\ :-\

En VB es muy dificil hacerlo que no sale por ningun lado???

Salu2



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 27 Mayo 2006, 12:01 pm
Eso es cambiar el entry point, es lo que te estabamos explicando. Hay un DWORD (4 bytes) que indica la direccion (offset) del entry point. Tambien se puede meter un salto sobreescribiendo el entry point real pero es mas complejo y no tiene sentido en este caso ...

Mira bien el documento, busca entry point y si queres investiga y practica con el OllyDbg que es un depurador de modo Usuario bastante util para estas cosas.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 12:04 pm
Ok....eso del DWORD lo e elido ya en el manual ek me pasaste.... ;) ;) ;)

Lo que me interesa saber es si en VB se puede manejar este DWORD y kon que funcion.....

Salu2 y Gracias....



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 27 Mayo 2006, 12:06 pm
Lo que me interesa saber es si en VB se puede manejar este DWORD y kon que funcion.....

Un DWORD son 4 bytes. ¿Como lo podes manejar? Para escribirlo en el archivo de la misma manera que escribis cualquier dato binario en un archivo. En memoria no necesitas cambiarlo para nada pero sino lo harias usando WriteProcessMemory.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 12:10 pm
Ok...pos ya sta....ya lo se kambiar... ;) ;) ;)

Otra duda...supongamos que la funcion de desenkritpacion esta en 4580

En el DWORD tendria que poner 4580??? o ponerle un jump hacia 4580????

Me esta kostando pero al final sale.... ;D ;D ;D

Graicas!!!



Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 12:17 pm
Bien, por ahora e sakado esto:

Offset: 12
Size: 4   
Field: VirtualAddress   
Description: For executable images, the address of the first byte of the section relative to the image base when the section is loaded into memory. For object files, this field is the address of the first byte before relocation is applied; for simplicity, compilers should set this to zero. Otherwise, it is an arbitrary value that is subtracted from offsets during relocation.

Supongo que esto es a lo que te refieres tu....Bien, ahora voy a abrir un archivo .exe haber que kontiene en el offset 12, esto va a ser el Entry Point, no???

Si estoy ekivokado diganmelo y dejare de hhacer trabajo ek no importa...xD xD



Título: Re: Desencriptacion en Memoria
Publicado por: Eternal Idol en 27 Mayo 2006, 12:38 pm
No.

Busca el campo AddressOfEntryPoint en 3.4.1.Optional Header Standard Fields (Image Only), es el offset 16.

Y te vuelvo a recomendar que uses el OllyDbg, con ese programa podes ver en memoria todo el ejecutable e incluso te muestra estos campos del PE.


Título: Re: Desencriptacion en Memoria
Publicado por: Hendrix en 27 Mayo 2006, 12:43 pm
ok, ya tengo el Olly.....esta tarde me mirare el tutorial de Narvaja de komo moverme por el olly...porke no se buskar lso offsets en el olly...xD xD xD esta tarde ya tengo trabagito....aprender a manejar el olly... :-\ :-\

Salu2 y Gracias....



Título: Re: Desencriptacion en Memoria
Publicado por: c4st0r en 22 Agosto 2007, 17:54 pm
Hendrix me imagino que despues del tiempo que ha pasado dominaras esto de la memoria, para poder descifrar y ejecutar desde ella, llevo dos dias buscando por google y he encontrado algunas cosillas suletas pero nada en concreto, a ver si puedes hacer un resumen de como hacerlo, para poder saber por donde empezar, gracias de todos modos por lo que he leido hasta aqui ya me he hecho una idea pero es algo complicado que todavia no llego a entender y todo lo que veo esta en ingles


Título: Re: Desencriptacion en Memoria
Publicado por: cobein en 27 Agosto 2007, 07:56 am
Bueno hay un programa open source para hacer eso, el codigo esta en C y asm creo sellama YP.exe "Yoda's Protector" este programa encrypta comprime etc.