Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - fary

#511
...

Si no lo hubieras publicado casi que mejor, porque no merece la pena ni gastar la saliva hablando acerca de ese tipo.
#512
El código compila correctamente  :rolleyes: no sé que problema tienes con el...

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int divide(int n,int divisores)
{
   divisores = 2;
   while(n >= divisores)
   {
       while(n%divisores == 0)
       {
           n /= divisores;
       }
       divisores++;
    }
   return(divisores);
}

int main()
{
   int n,divisores;
   printf("dime el numero\n");
   scanf("%d",&n);
   printf("%d\n",divide(n, divisores));

   system("PAUSE");
   return(0);
}


Ordena el código porque eso que as puesto es un desastre, normal que no encuentres los errores.

saludos.
#513
Hola,

Te recomiendo que uses C++ en lugar de C ya que puedes hacer que cada fantasma y tu pacman sea un objeto y te va a resultar mucho más sencillo programarlo.

Fijate en este ejemplo:

http://www.codebotic.com/2014/12/implementacion-de-pacman-en-c-usando.html

saludos y suerte!
#514
Cita de: patilanz en 13 Enero 2016, 19:13 PM

En Windows es posible que estén abiertas dos cuentas de usuario por lo tanto si creas otra cuenta y mantienes la suya abierta creo que se podría hacer algo, sino puedes disimular el escritorio, mismo fondo, ratón, escritorio y el explorador de Windows tiene opción remota, mas trabajo pero se podría crear aunque no se si existe un RAT ya hecho para descargar...

Un saludo

Piensa lo que has dicho.
#515
    #include <stdio.h>

    void media(int sum){
int media;
media= sum/10;
printf("\nLa media de todos los valores introducidos es %d\n", media);
    }

    int main(void){
int datos[10];
int i;
int mayor=0;
int menor=9999999;
int suma=0;

for(i= 0 ; i < 10 ; i++){
printf("\nIntroduzca el valor del número #%i\n", i+1);
scanf("%d", &datos[i]);
suma += datos[i];
}

for(i=0 ; i < 10 ; i++){
if(datos[i] > mayor){
mayor = datos[i];
}
if(datos[i] < menor){
menor = datos[i];
}
}

printf("\nEl valor máximo es %d\n", mayor);
printf("\nEl valor mínimo es %d\n", menor);
printf("\nLa suma de todos los valores es %d\n", suma);
media(suma);
     
return 0;
    }


Sugerencias:

Que pongas el return, en el main... ya te lo he puesto yo en el arreglo del código pero tienes que acordarte de ponerlo si declaras una funcion que no sea de tipo void.

Identar el código, que no quede todo en plano ya que es imposible de leer.

Te he resumido el programa de 2 bucles innecesarios a 1 solo.

saludos.
#516
Te recomiendo que no infectes a nadie por que estas realizando un acto ilegal.

No creo que tantas preguntas sean ya con fin educativo...
#517
A ver... NO.

No sé que idea tienes pero vamos, supongo que tu crees que lo vas a ver como con TeamViewer pero que a el no le va a aparecer y NO. Si le mueves el ratón en su pantalla también le va a aparecer en la posición a la que lo moviste, o si abres una carpeta el lo va a ver.

Tu te vas a poder mover por las carpetas y eso pero para hacerlo de forma oculta lo tendrás que hacer desde la Shell Remota, ó alguna otra utilidad que tenga el troyano que eligas.


saludos.
#518
Pero... Eso es problema del programa, reporta los fallos al programador.

Saludos.
#519
Foro Libre / Re: Una Licuadora
7 Enero 2016, 13:24 PM
Si, tengo una idea.

Regalale otra cosa... algo menos cutre... prueba a ver...

#520
Inyecciones de código en memoria

Conocimientos previos:
     
-ASM
      -WinApi


Contenido:
1-   ¿Qué es la inyección de código en memoria?
2-   ¿Cómo realizarla?
     2.1- Teoría
     2.2 -Práctica
3-   Ejemplos de inyecciones
4-   Despedida



1- ¿Qué es la inyección de código en memoria?

La inyección de código en memoria consiste  en que otro proceso ejecute el código que nosotros queramos.



2- ¿Cómo realizarla?

2.1 - Teoria
Para realizar la inyección lo que haremos será crear   un espacio en el proceso donde queremos inyectar el código  con la api VirtualAllocEx a continuación escribiremos nuestro código con WriteProcessMemory y finalmente lanzamos el hilo con CreateRemoteThread

2.2- Práctica
Para poner en práctica la teoría anterior vamos a inyectar nuestra funcion en el proceso del buscaminas y haremos que nuestra función haga un MessageBox:

Código (asm) [Seleccionar]
format PE GUI 4.0
entry start

include 'win32ax.inc'

        Ventana db 'Buscaminas',0
        idproc dd ?
        ID dd ?

        TamFun dd ?
        DirFun dd ?

start:
        invoke FindWindow,NULL,Ventana
        invoke GetWindowThreadProcessId,eax,addr idproc   ;idproc = identficador del proceso
        invoke OpenProcess,PROCESS_ALL_ACCESS,0,[idproc]
        mov [ID],eax

        invoke LoadLibrary,"user32.dll" ;cargamos user32.dll
        invoke GetProcAddress,eax,"MessageBoxA" ;obtenemos la dirección de la api
        mov [mMessageBoxA],eax  ; movemos la dirección de la api a la variable que hay dentro de la funcion qeu inyectaremos

        mov eax,final  ;Obtenemos el tamaño de la función
        sub eax,Inyectado
        mov [TamFun],eax

        invoke VirtualAllocEx,[ID],0,[TamFun],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE  ;generamos el espacio dentro del proceso
        mov [DirFun],eax
        invoke WriteProcessMemory,[ID],eax,Inyectado,[TamFun],0 ;escribimos nuestro código en el proceso
        invoke CreateRemoteThread,[ID],0,0,[DirFun],0,0,0  ;Lanzamos el hilo.

        ret

        proc Inyectado
             call offset  ;Técnica del offset delta.
             offset:
             pop ebx
             sub ebx,offset
             push ebx ebx
             pop ecx edx

             add ecx,titulo
             add edx,cuerpo

             push 0
             push ecx
             push edx
             push 0

             call [ebx+mMessageBoxA]


             ret

             titulo db 'Me inyecte!',0
             cuerpo db 'Este Mensage sale del buscaminas ^^',0

             mMessageBoxA dd ? ;variable que contiene la dirección de MessageBoxA@user32.dll
        endp
        final:

data import
     library kernel32,'Kernel32.dll',\
             user32,'user32.dll'

     import user32,MessageBoxA,'MessageBoxA',\
            FindWindow,'FindWindowA',\
            GetWindowThreadProcessId,'GetWindowThreadProcessId'

     import kernel32,OpenProcess,'OpenProcess',\
            GetModuleHandle,'GetModuleHandleA',\
            GetProcAddress,'GetProcAddress',\
            VirtualAllocEx,'VirtualAllocEx',\
            WriteProcessMemory,'WriteProcessMemory',\
            CreateRemoteThread,'CreateRemoteThread',\
            LoadLibrary,'LoadLibraryA'
end data 


Como se puede apreciar no es muy difícil pero si plantea un problema grande y es que  nuestro ejecutable sabe en que dirección se encuentra la variable mMessageBoxA cuando compilamos pero al inyectar el código la dirección de la variable cambiara... y nuestra función fallara -_- para eso se usa la tecnica del Delta Offset para recalcular la dirección de las variables y que nuestro código se ejecute bien este en la dirección que este. Para entender que hace el delta Offset pinchar Aquí


3- Ejemplo de inyecciónes

Un simple ejemplo que lanza la calculadora, se inyecta en su proceso cambia el nombre a la ventana y hace un MessageBox

Código (asm) [Seleccionar]
Format PE GUI 4.0
entry start
include 'win32ax.inc'

calc db 'c:\windows\system32\calc.exe',0
pi PROCESS_INFORMATION ?
sin STARTUPINFO ?
TamFun dd ?  ;tamaño de la funcion...
DirFun dd ? ; dirección de la funcion
DirUser dd ?

start:
        invoke CreateProcessA,0,calc,0,0,0,0,0,0,sin,pi
        invoke Sleep,2000
        invoke LoadLibrary,"user32.dll"
        mov [DirUser],eax

        invoke GetProcAddress,[DirUser],"MessageBoxA"
        mov [mMessageBoxA],eax
        invoke GetProcAddress,[DirUser],"FindWindowA"
        mov [mFindWindow],eax
        invoke GetProcAddress,[DirUser],"SetWindowTextA"
        mov [mSetWindowTextA],eax

        mov ebx,final  ;obtenemos el Tamaño de la función
        sub ebx,Inyectada
        mov [TamFun],ebx

        invoke VirtualAllocEx,[pi.hProcess],0,[TamFun],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
        mov [DirFun],eax
        invoke WriteProcessMemory,[pi.hProcess],eax,Inyectada,[TamFun],0
        invoke CreateRemoteThread,[pi.hProcess],0,0,[DirFun],0,0,0
        ret

        proc Inyectada
                call offset
                offset:
                pop ebx
                sub ebx,offset
                push ebx
                pop ecx

                add ecx,Calculadora

                push ecx
                push NULL
                call [ebx+mFindWindow]

                push ebx
                pop ecx

                add ecx, TituloVen

                push ecx
                push eax
                call [ebx+mSetWindowTextA]

                push ebx ebx
                pop edx ecx

                add ecx,TituloMsg
                add edx,CuerpoMsg

                push 0
                push ecx
                push edx
                push 0

                call [ebx+mMessageBoxA]
                ret

                TituloMsg db 'Inyectado!',0
                CuerpoMsg db 'El código inyectado Cambio el nombre a la ventana',0
                TituloVen db 'Este es un título falso',0
                Calculadora db 'Calculadora',0

                mMessageBoxA dd ?  ;Dirección MessageBox
                mFindWindow dd ?   ;dirección fundwindow
                mSetWindowTextA  dd ? ;Dirección de SetWindowText
        endp
        final:
data import
     library kernel32,'kernel32.dll'

     import kernel32,CreateProcessA,'CreateProcessA',\
            Sleep,'Sleep',\
            GetModuleHandle,'GetModuleHandleA',\
            GetProcAddress,'GetProcAddress',\
            VirtualAllocEx,'VirtualAllocEx',\
            WriteProcessMemory,'WriteProcessMemory',\
            CreateRemoteThread,'CreateRemoteThread',\
            LoadLibrary,'LoadLibraryA'
end data   



4- Despedida
Bueno, ya solo queda la despedida.... Jajaja pues eso que espero que les sea utíl  el tuto, la barrera de lo que podais hacer con las inyecciones de código la poneis vosotros ;)

Saludos.