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

#861
Lo que tienes que hacer es cuando se pulse la tecla "´"  ver si despues se pulsa una vocal, si se pulsa una vocal habrá querido escribir una tilde.

saludos.
#862
Programación C/C++ / Re: Socket
21 Noviembre 2011, 19:14 PM
Para no hacer 40 post sobre el poner el código o no, te respondo  mas o menos una orientación...

aqui tienes un tutorial de winsock creado por mazard:

https://www.underground.org.mx/index.php?topic=20773.0

y para enviar datos se usa la api send:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740149%28v=vs.85%29.aspx

saludos.
#863
Programación C/C++ / Re: Socket
21 Noviembre 2011, 13:48 PM
Pon el código que llevas desarrollado y te ayudamos  :P
#864
Cita de: do-while en 26 Octubre 2011, 20:32 PM
¡Buenas!

Si os interesa el tema, he aqui un documental que me parecio bastante interesante:La paradoja de Hawking

No se de que año es, ahora lo miro, pero no creo que sea demasiado antiguo.

¡Saludos!

Por lo que acabo de leer, en 2004 fue cuando dijo que podria estar equibocado con la paradoja de la informacion, por lo que creo que el documental pudo haber sido hecho hacia el 2005.

¡Saludos de nuevo!

Interesantísimo  :D :D :D
#865
Para redondear el VirtualAddress de una nueva sección hay que hacer VirtualAddress + VirtualSize alineado a SectionAlignment.

*El VirtualAddress y el Virtualsize de la última sección.
#866
Si añado datos... añado una pequeña cadena  :P. el problema está en que genera el ejecutable con menos peso y cambia datos de las secciones (osea el contenido) pero nose porque lo hace  :-\

saludos.
#867
Tras seguir intentando y intentando no logro arreglarlo del todo (aunque lo otro ya lo arregle), aora parece que todo esta bien pero ejecuto el exe y no me funciona :S de seguro es un error tonto y minúsculo pero no logro dar con él.

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

DWORD align(DWORD number, DWORD alignment)
{
 if(number % alignment == 0)
   return number;
 else
   return (number / alignment) * alignment + alignment;
}

int main()
{
IMAGE_DOS_HEADER dh;
IMAGE_NT_HEADERS nth;

IMAGE_SECTION_HEADER * sección;
IMAGE_SECTION_HEADER nSeccion;
   // char * stub_dos -> Datos del STUB_DOS
   // char * dSecciones -> Datos de las secciones
   long TamanoSecciones = 0;
   int i;

FILE * archivo = fopen("c:\\Mad.exe","r+b");
   if (archivo == NULL)
   {
       printf("Error al leer el archivo\n");
       system("PAUSE");

       return 1;
   }

fread(&dh,sizeof(dh),1,archivo); // Rellenamos IMAGE_DOS_HEADER

   char * stub_dos = (char*)malloc(dh.e_lfanew-0x40);

   fread(stub_dos,1,dh.e_lfanew-0x40,archivo); // Leemos el Stub DOS
   fread(&nth,sizeof(nth),1,archivo); // leemos nt headers

   sección = (IMAGE_SECTION_HEADER*)malloc(sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections);

   fread(sección,sizeof(IMAGE_SECTION_HEADER),nth.FileHeader.NumberOfSections,archivo);

   for (i=0;i<=nth.FileHeader.NumberOfSections-1;i++)
   {
       printf("%i\n",sección[i].SizeOfRawData);
       TamanoSecciones += sección[i].SizeOfRawData;
   }

   printf("%i\n",TamanoSecciones);

   char * dSecciones = (char*)malloc(TamanoSecciones);
   fread(dSecciones,TamanoSecciones,1,archivo); //leo todos los datos de las secciones.

   fclose(archivo); // terminamos de leer

   strcpy((char*)nSeccion.Name,".fary"); // nombre de la nueva sección: .fary
   nSeccion.VirtualAddress = align(sección[nth.FileHeader.NumberOfSections-1].VirtualAddress + sección[nth.FileHeader.NumberOfSections-1].Misc.VirtualSize, nth.OptionalHeader.SectionAlignment);
   nSeccion.SizeOfRawData = align(0x50, nth.OptionalHeader.FileAlignment);
   nSeccion.PointerToRawData = sección[nth.FileHeader.NumberOfSections-1].PointerToRawData + sección[nth.FileHeader.NumberOfSections-1].SizeOfRawData;//align(0x50,nth.OptionalHeader.FileAlignment);
   nSeccion.Characteristics = 0x60000020;
   nSeccion.Misc.VirtualSize = 0x50;

   nth.FileHeader.NumberOfSections += 1; // sumamos la nueva sección
   nth.OptionalHeader.SizeOfImage = align(0x50+nSeccion.VirtualAddress,nth.OptionalHeader.SectionAlignment);
    nth.OptionalHeader.SizeOfHeaders += 0x28;


   FILE * nuevo = fopen("Nuevo.exe","wb+");

   fwrite(&dh,sizeof(dh),1,nuevo);
   fwrite(stub_dos,dh.e_lfanew-0x40,1,nuevo);
   fwrite(&nth,sizeof(nth),1,nuevo);
   nth.FileHeader.NumberOfSections -= 1;
   fwrite(sección,sizeof(IMAGE_SECTION_HEADER)*nth.FileHeader.NumberOfSections,1,nuevo);
   fwrite(&nSeccion,sizeof(IMAGE_SECTION_HEADER),1,nuevo);
   fwrite(dSecciones,TamanoSecciones,1,nuevo);
   if (fseek(nuevo,0,SEEK_END) != 0)
   {
       printf("error\n");
   }

   char DatosSeccion[] = "Hola yo soy la sección de prueba, y ocupo exactamente la cantidad de 0x50 bytes.";
   fwrite(DatosSeccion,0x50,1,nuevo);

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


Si alguien es tan amable de hecharle un ojo y explicarme porque no anda le estaría muy agradecido ;)

saludos.
#868
ASM / Re: Funciones en FASM
28 Septiembre 2011, 21:48 PM
Ret Exe corruption

Código (asm) [Seleccionar]
;///////////////////////////////////////////////////////////////////////////////
;////  Ret Exe Corruption: corrompe los exe poniendo un 0xC3 (ret) en el    ////
;////  entry point. Este código no funciona con algunos ejecutables para    ////
;////  ello habría que hacer algunos modificaciones.                        ////
;////  Programado por Drinky94 a 13 - Septiembre - 2011                     ////
;///////////////////////////////////////////////////////////////////////////////

include 'win32ax.inc'

.data
        manija dd ?
        larchivo dd ?
        espacio dd ?
        bleidos dd ?

        PE dd ? ; puntero a NT

        EP dd ? ; EntryPoint
        wb dd ?
.code
start:
        invoke CreateFileA,'g:\bowser.exe', GENERIC_READ, FILE_SHARE_READ, 0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
        mov [manija],eax

        invoke GetFileSize,[manija],0
        mov [larchivo],eax

        invoke GlobalAlloc,GPTR,[larchivo]
        mov [espacio],eax

        invoke ReadFile,[manija],[espacio],[larchivo],addr bleidos,0
        invoke CloseHandle,[manija]
        leave

        mov eax,[espacio]


        cmp word[eax],'MZ'
        jne salir

        mov ecx,eax

        add eax,dword[eax+0x3C] ; EAX = PE
        mov [PE],eax

        cmp word[eax],'PE'
        jne salir

        add eax,0x28

        mov ebx,dword[eax]
        mov [EP],ebx ;EP = EntryPoint

        mov ebx,ecx ; EAX = puntero inicio

        add ecx,[EP]
        mov word[ecx],0xC3

        ;// Aquí tendríamos que eliminar el viejo archivo y generar nuestro Exe modificado con el mismo nombre.

        invoke CreateFile,"g:\NuevoRET.exe",GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0
        push eax
        invoke WriteFile,eax,ebx,[larchivo],wb,NULL
        pop eax
        invoke CloseHandle,eax

        invoke MessageBoxA,0,"FIN",0,0

        salir:
        leave
        ret
.end start
#870
Para convertir números de una base a otra tienes que dividir por la base a la que lo quieres pasar, ejemplo...

125 por ejemplo a octal, lo que tenemos que hacer es dividir sucesivamente el número entre la base (en este caso 8 ya que queremos pasarla a octal) asta que el cociente sea mas pequeño que el dividendo  entonces se colocara el ultimo cociente y los demas restos al revez, me explico mejor  haciendolo:

125/8 = 15 en el cociente  y de resto 5

aora volvemos a dividir pero aora ya dividimos entre el cociente

15/8 = 7 de resto y 1 en el cociente.

Ya acabamos las cuentas ya que el cociente que nos a dado es menor a la base a la que lo queremos pasar aora tenemos que colocar los números

El cociente de la ultima division 1 y el resto de la ultima division 7 y el resto de la penultima division 5 dan 175 y efectivamente 125 en base 10 (decimal) es 175 en base 8 (octal) compruebalo con la calculadora y verás  :P

Aora para hacer la inversa pasarlo a decimal lo que hay que hacer es aplicar esta fórmula:



te lo ago para que lo veas tambien

1·8^2 + 7·8^1 + 5·8^0 = 64 +56 + 5= 125 en decimal. En esta formula los resultados se suman no se colocan.

Es igual para pasarlo a todas las bases y para hacer la inversa :P  espero haberte ayudado.

saludos.