A ver si me das un empujoncito, en el codigo que direccion hay que poner la fisica y la virtual? y aparte la direccion de la sección seria PointerToRawData no? o VirtualAddress? en que se diferencian? Thanks
soez lee un poco sobre el formato PE y esas dudas las tendras despejadas.
Quizas no lo haya aprendido lo que es debido, pero leer lo he leido y lo voy entendiendo. Voy a buscar mas manuales, thanks
Soez debes de leer y si no entiendes volver a leer y luego volver nuevamente a leer hasta que te quede una duda en concreto que no puedas resolver... pero estas preguntando el paso 1, paso 2, paso 3, paso 4, paso n... asi verdaderamente no aprenderas nada.
aparte ayer pregunto como obtener el valor del offset 0x3C... no es por ofender pero en unas horas no vas a comprender el formato PE y si a esto le sumas que tienes que leer sobre punteros....
Cita de: ctlon en 8 Agosto 2010, 19:50 PM
aparte ayer pregunto como obtener el valor del offset 0x3C... no es por ofender pero en unas horas no vas a comprender el formato PE y si a esto le sumas que tienes que leer sobre punteros....
Es delito preguntar? aparte no han sido solo unas horas, nadie nace sabiendo
para nada es delito, es mas tonto el que se queda con la duda. pero tampoco es delito aconsejar. y viendo que continuas con tu educacion igual que en otras secciones y te tomas a mal los consejos, pues nada continua empezando por el techo que vas muy bien.
Citaraparte no han sido solo unas horas
vale 2 dias, total lo mismo da. sin tener una base sobre lo otro, como si bufas al viento.
Cita de: soez en 9 Agosto 2010, 01:11 AM
Es delito preguntar? aparte no han sido solo unas horas, nadie nace sabiendo
Lo que te dijo
ctlon te lo dijo por tu bien (más fácil hubiera sido responderte), y yo respaldo su consejo, te lo digo por experiencia, tanto por "preguntón" como por "respondón". Si intentas afrontar los problemas por ti mismo y pensando "no lo dejaré hasta que lo comprenda" sí aprenderás realmente, en cambio la gente que al mínimo problema que encuentra pide ayuda realmente no está progresando, solventa el problema en ese momento pero no vive el proceso de aprendizaje necesario para llegar a esa solución.
Saludos ;)
Valla animos que das majete, debes de creerte el unico capacitado. Y no son ofensas por consejos, si me ofendo es con razon, no me veras enfadarme por alguien que pregunta si no todo lo contrario. Nos tomamos aqui las cosas demasiado en serio, cuando esto es un simple foro, donde la gente se comunica. No debamos confundir con la gente que quiere las cosas hechas con la gente que pone interes. Ale ya puedes contestar
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
EDITO: lo de [zero] es una respuesta, no ha menospreciado en ningun momento (por cierto alguien a quien admiro). [zero] entiendo lo que dices, pero no por que me digan algo voy a pasar y no voy a querer entender lo que hace, solo me ayuda entre tantas cosas que aprender.
soez en ningun momento te menosprecio, y no soy el unico capacitado.
CitarNos tomamos aqui las cosas demasiado en serio, cuando esto es un simple foro, donde la gente se comunica.
enserio son, logicamente. se comunica , aprende una de otra y en ocasiones nos reimos un rato.
Citar
No debamos confundir con la gente que quiere las cosas hechas con la gente que pone interes
interes? el otro tema que creaste pide como obtener el valor en el offset 3C... solo es sumar base+offset, si no entiendes eso poco interes creo que has puesto hasta el momento, y menos ya hablemos de meterle mano al formato PE pq no vas a saber ni por donde empezar a la hora de hacer codigo que no depende de su ejecutable.
y ahora tu respuesta, en el propio formato como ya se te aconsejo lo explica:
CitarVirtual Address. The virtual address the section is currently relocated to, relative to the Image Base. Each Section's virtual address space consumes a multiple of Section Align (power of 2 between 512 and 256M inclusive. Default is 64K), and immediately follows the previous Section in the virtual address space (the virtual address space for a image must be dense).
CitarPHYSICAL OFFSET = DD Physical offset for section's first page. This offset is relative to beginning of the EXE file, and is aligned on a multiple of the File Align field in the PE Header. The offset is used as a seek value.
asi que hijo, te vuelvo a decir que estudies el formato, no que lo leas como una revista playboy.
Jeje para decir que no me ves capacitado si debes de creerlo, en unos dias te pongo un codigo, para que lo veas ;)
PD. Lo que si resulta facil es aconsejar en vez de decir, esto tienes que aprender, eso si que es poner interes, uff
Yo no he dicho que no te veo capacitado, te he dicho que tendrias que estudiar el formato de los ficheros con los que quieres trabajar. como ya te he demostrado en el estaban tus dudas aclaradas.
Yo no me referia a poco o mucho capacitado, si no el interes que pongo
Cita de: ctlon en 9 Agosto 2010, 02:06 AM
Yo no he dicho que no te veo capacitado, te he dicho que tendrias que estudiar el formato de los ficheros con los que quieres trabajar. como ya te he demostrado en el estaban tus dudas aclaradas.
EDITO: Lo tenia hecho desde ayer, lo que pasa que no se por que no me funca, si pregunto es por algo, y aprendo mas programando que estudiandolo
//Variables cabecera
PIMAGE_DOS_HEADER PIDH;
PIMAGE_NT_HEADERS PINTH;
PIMAGE_SECTION_HEADER PISH;
LPSTR lpFileMaped;
//Direccion DOS
PIDH=(PIMAGE_DOS_HEADER)&lpFileMaped[0];
//Cogemos la direccion donde empieza el PE
PINTH=(PIMAGE_NT_HEADERS)&lpFileMaped[PIDH->e_lfanew];
//Manejador
HANDLE hFile;
//Escribimos variables
DWORD dwTamArchivo, dwNumeroBytesLeidos;
//Recorremos todas las secciones
//for(DWORD i=0; i<INTH->FileHeader.NumberOfSections; i++)
//{
//Cogemos la direccion de la sección
PISH=(PIMAGE_SECTION_HEADER)&lpFileMaped[PIDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*1];
//Abrimos el fichero
hFile = CreateFileA(szArchivo,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo y los pasa a bytes
dwTamArchivo = GetFileSize(hFile,0);
//Creamos un buffer que contendrá el contenido de la sección en bytes
LPSTR lpBuffer = (LPSTR)GlobalAlloc(GPTR, dwTamArchivo);
//Leemos la sección una vez pasado a bytes, metiendo el contenido en lpBuffer
ReadFile(hFile, lpBuffer, dwTamArchivo - (PISH->PointerToRawData + PISH->SizeOfRawData), &dwNumeroBytesLeidos,0);
//Nos colocamos en la sección
SetFilePointer(hFile, PISH->PointerToRawData, 0, 0);
//Ciframos o desciframos con XOR ^ 100
for(DWORD j=0; j<0PISH->SizeOfRawData; j++){
lpBuffer[j]^=250;}
//Nos colocamos en la sección
SetFilePointer(hFile, PISH->PointerToRawData, 0, 0);
//Sobreescribimos los nuevos carácteres
WriteFile(hFile, lpBuffer, dwTamArchivo - (PISH->PointerToRawData + PISH->SizeOfRawData), &dwNumeroBytesLeidos,0);
//}//for i
//ciframos
//Cerramos el fichero
CloseHandle(hFile);
Esto en la nueva sección estaria bien?
inicio = INTH.OptionalHeader.ImageBase + ISH.VirtualAddress;
final = INTH.OptionalHeader.ImageBase + ISH.VirtualAddress + ISH.misc.VirtualSize;
y el nuevo entry point ?
INTH.OptionalHeader.AddressOfEntryPoint = INTH.OptionalHeader.ImageBase + ISH.VirtualAddress + INTH.OptionalHeader.sizeofimage
Contando con que la sección tenga caracteristicas de escritura
Cita de: soez en 9 Agosto 2010, 01:33 AM
Valla animos que das majete, debes de creerte el unico capacitado.
Deberias de ponerte en mi posicion cuando no sabia ingles y queria aprender ASM, pregunte en un lugar y me dieron lo que tenia que leer, dije que no entendia y me dijeron que era un p*to que no daria para esto por preguntar tanto, que dejara de intentar programar y me fuera a jugar algun juego de esos que con un manual sale sencillo... Ctlon y Zero no estan mostrando que esten capacitados o no, si estan ahi es porque deben de estarlo. hay un señor que dijo.
"Dale un Pez y comera por un Dia, enseñalo a pezcar y comera toda la vida".
lo primero que no me gusta es que ni verificas el resultado de las funciones y continuas llamando una tras otra sin control alguno, pon el codigo completo si tienes dudas y soluciona lo primero.
Bueno ya he hecho avances, nose si la parte de la encryptacion esta bien.
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INTH;
PIMAGE_SECTION_HEADER ISH;
//Direccion DOS
//Manejador
HANDLE hFile;
//Escribimos variables
DWORD dwTamArchivo, dwNumeroBytesLeidos;
//Abrimos el archivo
hFile = CreateFileA(szArchivo,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo y los pasa a bytes
dwTamArchivo = GetFileSize(hFile,0);
//Creamos un buffer que contendrá el contenido del archivo en bytes
LPSTR lpBuffer = (LPSTR)GlobalAlloc(GPTR, dwTamArchivo);
//Metemos el archivo en lpBuffer
ReadFile(hFile, lpBuffer, dwTamArchivo, &dwNumeroBytesLeidos,0);
//Cogemos direccion del DOS
IDH=(PIMAGE_DOS_HEADER)&lpBuffer[0];
//Cogemos la direccion donde empieza el PE
INTH=(PIMAGE_NT_HEADERS)&lpBuffer[IDH->e_lfanew];
for(DWORD i=1; i<INTH->FileHeader.NumberOfSections; i++)
{
MessageBoxA(0, "He entrao en el for","",0);
//Cogemos la direccion de la sección
ISH=(PIMAGE_SECTION_HEADER)&lpBuffer[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
//Ciframos o desciframos con XOR ^ 250
for(DWORD j=ISH->PointerToRawData; j<ISH->PointerToRawData+ISH->SizeOfRawData; j++){
lpBuffer[j]^=250;}
//Nos colocamos al principio del fichero
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
//Sobreescribimos los nuevos carácteres
WriteFile(hFile, lpBuffer, dwTamArchivo, &dwNumeroBytesLeidos,0);
}//for i
//ciframos
//Cerramos el fichero
CloseHandle(hFile);
PD. No tengo nada en contra de [zero]
EDITO: Me falta escribir la parte de la nueva sección
//Variables cabecera
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INTH;
PIMAGE_SECTION_HEADER ISH;
//Direccion DOS
//Manejador
HANDLE hFile;
//Escribimos variables
DWORD dwTamArchivo, dwNumeroBytesLeidos;
DWORD NuevaSeccion=0x200;
//Abrimos el archivo
hFile = CreateFileA(szArchivo,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo y los pasa a bytes
dwTamArchivo = GetFileSize(hFile,0);
//Creamos un buffer que contendrá el contenido del archivo en bytes
LPSTR lpBuffer = (LPSTR)GlobalAlloc(GPTR, dwTamArchivo);
//Buffer para arrastrar el PE
LPSTR lpTemporal = (LPSTR)GlobalAlloc(GPTR, dwTamArchivo + NuevaSeccion);
//Metemos el archivo en lpBuffer
ReadFile(hFile, lpBuffer, dwTamArchivo, &dwNumeroBytesLeidos,0);
//Copiamos el contenido del inicial al temporal
CopyMemory(&lpTemporal[0],&lpBuffer[0], dwTamArchivo);
//Rellenamos con ceros la nueva sección
memset(&lpTemporal[dwTamArchivo], '\x90', NuevaSeccion);
//Cogemos direccion del DOS
IDH=(PIMAGE_DOS_HEADER)&lpTemporal[0];
//Cogemos la direccion donde empieza el PE
INTH=(PIMAGE_NT_HEADERS)&lpTemporal[IDH->e_lfanew];
//Ajustamos el VirtualSize de las Secciones
for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++){
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
ISH->Misc.VirtualSize=ISH->SizeOfRawData;
}
//Ajusatmos i al numero de secciones
DWORD i=INTH->FileHeader.NumberOfSections-1;
//Copiamos el contenido 40 bytes antes
CopyMemory(&lpTemporal[IDH->e_lfanew-0x28],&lpBuffer[IDH->e_lfanew],sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i);
//rellenamos con nops
memset(&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i],'\x90', 0x28);
//Nos dirigiemos a la nueva sección
IDH->e_lfanew=IDH->e_lfanew-0x28;
INTH=(PIMAGE_NT_HEADERS)&lpTemporal[IDH->e_lfanew];
//Creamos los valores a la nueva sección
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
BYTE NuevoNombre[7]=".nueva";
CopyMemory(ISH->Name, NuevoNombre, 7);
ISH->SizeOfRawData=NuevaSeccion;
ISH->PointerToRawData=dwTamArchivo;
ISH->Characteristics=0xE0000020;
ISH->VirtualAddress=ISH->VirtualAddress+INTH->OptionalHeader.SectionAlignment;
ISH->Misc.VirtualSize=NuevaSeccion;
//Ajustamos OptionalHeader sections
INTH->FileHeader.NumberOfSections+=1;
//Ajustamos el tamaño del archivo
INTH->OptionalHeader.SizeOfImage=INTH->OptionalHeader.SizeOfImage + ISH->Misc.VirtualSize;
//Cogemos el actual EntryPoint
DWORD EntryP=INTH->OptionalHeader.ImageBase + INTH->OptionalHeader.AddressOfEntryPoint;
//Actualizamos el nuevo EntryPoint
INTH->OptionalHeader.AddressOfEntryPoint=INTH->OptionalHeader.ImageBase + ISH->VirtualAddress ;
for(DWORD i=0; i<INTH->FileHeader.NumberOfSections-1; i++)
{
if((ISH->Characteristics&0xE0000020)==0xE0000020){
//Cogemos la direccion de la sección
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
//Cogemos inicio y fin de la sección
DWORD inicio=ISH->PointerToRawData;
DWORD fin=ISH->PointerToRawData + ISH->SizeOfRawData;
//Encryptamos
while(inicio<fin){lpBuffer[inicio]^=250;inicio++;}
}
}//for i
//Escribimos en la nueva sección
LPSTR lpFinal = (LPSTR)GlobalAlloc(GPTR, 0x15);
lpFinal="\x68\x00\x00\x00\x00"
"\xc3";
//Copiamos el contenido al final del archivo
CopyMemory(&lpTemporal[dwTamArchivo],&lpFinal[0], 0x15);
//Nos colocamos al principio del fichero
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
//Sobreescribimos los nuevos carácteres
WriteFile(hFile, lpTemporal, dwTamArchivo + NuevaSeccion, &dwNumeroBytesLeidos,0);
//Cerramos el fichero
CloseHandle(hFile);
EDITO: Bueno lo ultimo, hay algun dato que falla
//Variables cabecera
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INTH;
PIMAGE_SECTION_HEADER ISH;
//Manejador
HANDLE hFile;
HANDLE FileMaped;
//Escribimos variables
DWORD dwTamArchivo, dwNumeroBytesLeidos;
DWORD NuevaSeccion;
//Abrimos el archivo
hFile = CreateFileA(szArchivo,GENERIC_READ+GENERIC_WRITE,FILE_SHARE_WRITE+FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
//Obtenemos el tamaño del archivo y los pasa a bytes
dwTamArchivo = GetFileSize(hFile,0);
//Mappeamos el archivo
FileMaped=CreateFileMapping (hFile, 0, PAGE_READWRITE, 0, 0, 0);
//Creamos un buffer que contendrá el archivo mappeado
LPSTR lpBuffer=(LPSTR)GlobalAlloc(GPTR, dwTamArchivo);
lpBuffer=(LPSTR)MapViewOfFile(FileMaped,FILE_MAP_ALL_ACCESS,0,0,0);
CloseHandle(FileMaped);
//Cogemos direccion del DOS
IDH=(PIMAGE_DOS_HEADER)&lpBuffer[0];
//Cogemos la direccion donde empieza el PE
INTH=(PIMAGE_NT_HEADERS)&lpBuffer[IDH->e_lfanew];
//Cogemos tamaño de la nueva sección
NuevaSeccion=INTH->OptionalHeader.FileAlignment;
//Buffer para arrastrar el PE
LPSTR lpTemporal = (LPSTR)GlobalAlloc(GPTR, dwTamArchivo + NuevaSeccion);
//Copiamos el contenido del archivo mappeado al temporal
CopyMemory(&lpTemporal[0], &lpBuffer[0], dwTamArchivo);
//Cogemos direccion del DOS
IDH=(PIMAGE_DOS_HEADER)&lpTemporal[0];
//Cogemos la direccion donde empieza el PE
INTH=(PIMAGE_NT_HEADERS)&lpTemporal[IDH->e_lfanew];
//Rellenamos con ceros la nueva sección
memset(&lpTemporal[dwTamArchivo], 0x00, NuevaSeccion);
//Ajustamos el VirtualSize de las Secciones
for(DWORD i=0;i<INTH->FileHeader.NumberOfSections;i++){
ISH=(PIMAGE_SECTION_HEADER)&lpBuffer[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
ISH->Misc.VirtualSize=ISH->SizeOfRawData;
}
//Ajusatmos i al numero de secciones
DWORD i=INTH->FileHeader.NumberOfSections;
//Cogemos el antiguo VirtualAddress
ISH=(PIMAGE_SECTION_HEADER)&lpBuffer[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*(i-1)];
DWORD UltimoVirtualAddress=ISH->VirtualAddress;
DWORD UltimoPointToRawData=ISH->PointerToRawData;
DWORD UltimoSizeOfRawData=ISH->SizeOfRawData;
//Movemos el PE el contenido 40 bytes antes
CopyMemory(&lpTemporal[IDH->e_lfanew-0x28],&lpBuffer[IDH->e_lfanew],sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i);
//rellenamos con ceros
memset(&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*(i-1)],0x00, 0x28);
//Recolocamos la direccion del PE
IDH->e_lfanew=IDH->e_lfanew-0x28;
//Nos dirigiemos a la nueva sección
INTH=(PIMAGE_NT_HEADERS)&lpTemporal[IDH->e_lfanew];
//Nos colocamos en la ultima sección
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
BYTE NuevoNombre[8]=".nueva";
CopyMemory(ISH->Name, NuevoNombre, 8);
ISH->Misc.VirtualSize=NuevaSeccion;
ISH->VirtualAddress=UltimoVirtualAddress+INTH->OptionalHeader.SectionAlignment;
ISH->SizeOfRawData=NuevaSeccion;
ISH->PointerToRawData=UltimoPointToRawData+UltimoSizeOfRawData;
ISH->Characteristics=0xE0000020;
//Ajustamos OptionalHeader sections
INTH->FileHeader.NumberOfSections++;
INTH->OptionalHeader.SizeOfImage=ISH->VirtualAddress+INTH->OptionalHeader.SectionAlignment;
//Cogemos el actual EntryPoint
DWORD EntryP=INTH->OptionalHeader.ImageBase + INTH->OptionalHeader.AddressOfEntryPoint;
//Actualizamos el nuevo EntryPoint
//INTH->OptionalHeader.AddressOfEntryPoint=UltimoPointToRawData+UltimoSizeOfRawData;
//Declaramos variables para coger secciones
DWORD cont;
for(DWORD i=0; i<INTH->FileHeader.NumberOfSections-1; i++)
{
//Cogemos la direccion de la sección
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*i];
if(ISH->Characteristics==0x20000020){
cont=i; MessageBoxA(0, "for","",0);
//Cogemos inicio y fin de la sección
DWORD inicio=ISH->VirtualAddress;
DWORD fin=ISH->VirtualAddress + ISH->SizeOfRawData;
//Encryptamos
while(inicio<fin){lpTemporal[inicio]^=250;inicio++;}
}
}//for i
//Escribimos en la nueva sección
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*0];
DWORD ini=INTH->OptionalHeader.ImageBase + ISH->VirtualAddress;
ISH=(PIMAGE_SECTION_HEADER)&lpTemporal[IDH->e_lfanew+sizeof(IMAGE_NT_HEADERS)+sizeof(IMAGE_SECTION_HEADER)*0];
DWORD fini=INTH->OptionalHeader.ImageBase + ISH->VirtualAddress + ISH->SizeOfRawData;
//Creamos la sección para desencryptar
BYTE retorno[]={0x68,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x00,0x5B,0x58,0x59,0x80,0x30,0xFA,0x40,0x3B,0xC3,0x75,0xF8,0xFF,0xE1};
*(DWORD *)&retorno[0x01]=EntryP;
*(DWORD *)&retorno[0x06]=ini;
*(DWORD *)&retorno[0x0B]=fini;
//Introducimos el descifrado
CopyMemory(&lpTemporal[UltimoPointToRawData+UltimoSizeOfRawData], (PVOID)retorno, 0x20);
//Nos colocamos al principio del fichero
SetFilePointer(hFile, 0, 0, FILE_BEGIN);
//Sobreescribimos los nuevos carácteres
WriteFile(hFile, &lpTemporal[0], dwTamArchivo+NuevaSeccion, &dwNumeroBytesLeidos,0);
//Cerramos el fichero
CloseHandle(hFile);
//Liberamos memoria
GlobalFree(lpTemporal);
GlobalFree(lpBuffer);
No tengo NI IDEA del formato PE. Pero tienes razon.
Es como el que dice.
Necesito hacer un login en PHP! > Estudia PHP
Si perfecto.
Pero porque no decir.
Mira pues yo sabiendo sobre programacion te diria estructurar antes el sistema. Haras un sistema en 3 fases. Fase 1 , 2 y 3.
Fase 1. Introducir los datos. Se hara en form.html..
Fase 2. Recibir y comprobar datos... como haremos esto? facil:
<? codigo ?>
hacemos $user=$_POST[user] para....
AHORA estudiate eso.
Os aseguro que el tio ha entendido mas que cuando se lee y estudia un tutorial de PHP. La experiencia y practica en manos de expertos, hace que se haga facil y sencillo transferir o traducir los conocimientos a la teoria, en vez de la teoria de un novato sin haber aplicado la practica. Eso esta clarisimo.
Seguro que de chico cuando bebe aprendias de tus padres y no de otros bebes con los que te juntabas.
No aprende mas el que estudia, sino el que mas pregunta y se lo estudia amigos
Un saludo
PD: Lo siento por hacer este offtopic y por no contestar a tu pregunta, pero no tengo ni idea de PE XD
jeje no pasa nada, y llevas razon en lo que dices. Saludos bro ;)
No existen caminos cortos, se debe aprender todo porque no sabes cuando lo necesitaras.
No entiendo pq hay que explicar algo que esta documentado y no poco.
Aparte de esto, por otras preguntas relacionadas un dia atras se le ve verde en otros campos que son necesarios. bajo mi punto de vista despues del 1 el 2 de toda la vida.
Cita de: ctlon en 16 Agosto 2010, 04:02 AM
No entiendo pq hay que explicar algo que esta documentado y no poco.
Aparte de esto, por otras preguntas relacionadas un dia atras se le ve verde en otros campos que son necesarios. bajo mi punto de vista despues del 1 el 2 de toda la vida.
Y cuales son esos puntos, porque no he recibido
ninguna ayuda, todo lo que esta en el foro esta remirado, incluso fuera de el, lo que no puedo hacer es darme palizas estudiandolo.
http://foro.elhacker.net/analisis_y_diseno_de_malware/leer_direccion_que_hay_en_la_posicion_3c_con_el_editor_hex-t301714.0.html;msg1496025#msg1496025 ahi mismo, es decir aparentas no tener concepto alguno sobre punteros y el otro dia ya quieres manejar un fichero PE.
Citarlo que no puedo hacer es darme palizas estudiandolo.
lo que no se puede hacer es correr antes de andar. y tema terminado, si te parece mal los conejos que se te dieron contacta con un administrador y que el decida.