elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: [1] 2
1  Seguridad Informática / Análisis y Diseño de Malware / Re: Ayuda para quitar una firma. Método XOR y error de acess violation. en: 28 Junio 2013, 11:17 am
Para mi "Hexear" un Malware para removerle firma de antivirus es perdida de tiempo
Mejor codificate uno mismo y así podes modificarle todo lo que quieras.


No, si ya, más que nada lo hago como reto presonal y para aprender algo de ASM, jeje :P
2  Seguridad Informática / Análisis y Diseño de Malware / Ayuda para quitar una firma. Método XOR, MEEPA y error de acess violation. en: 28 Junio 2013, 00:44 am
Muy buenas gente, resulta que estoy haciendo un mod de un crypter, y ya he quitado bastantes firmas (18 para ser exactos), y todas ellas las he hecho modificando algún offset, cambiando el entrypoint, las tables, etc.

El problema viene conque un antivirus me detecta la string "RtlMoveMemory", por lo que no puedo hacer el método RIT.

He intentado hacer el método XOR y el MEEPA (mejor que el XOR, ya que edito la dirección y pongo lo que quiera) y ninguno de los dos me funciona, me rompe el ejecutable y me pone: "Acess Violation Error" al hacer debug con el olly. Si lo pruebo sin esas instrucciones tira perfectamente, osea que no se por qué es, es como si no pudiera escribir esa zona del fichero. Ah, y no está pasado por un packer ni nada, he modificado directamente el source compilado. Os dejo una capturilla a ver si me ayudáis  :rolleyes:



(ignorad que esté en rojo y la dirección del entrypoint, estuve haciendo modificaciones. El entrypoint está en el MOV)
3  Programación / Programación C/C++ / Re: Dad vuestra opinion sobre I/O en: 23 Junio 2013, 14:03 pm
Hombre, teniendo en cuenta que cin, cout, etc. son funciones que se introdujeron con C++ (creo), son más avanzadas y por lo tanto mejores; pero si quieres operar a bajo nivel o programar en C, tendrás que usar las otras.

Además, cin, cout etc. yo las veo muuucho más sencillas de usar, no sé, no tienes que indicar la clase de variable que saldrá, tienen pocos argumentos, etc.  :P
4  Programación / Programación C/C++ / Re: Error en tiempo de ejecución al hacer un stream con fwrite en: 17 Junio 2013, 23:43 pm
@ccjrocks, mi código también te permite manipular cada byte del archivo, uno a uno, la única diferencia es que primero lee el archivo de entrada entero, después haces lo que quieras con cada byte y los escribes, uno a uno, al fichero de salida.

Saludos.

¿Pero no sería un desperdicio de memoria bastante importante tener que volver a leer todo el archivo almacenado en una variable? ¿No es mejor editar en el mismo momento en el cual es leído? Así nos evitamos volver a recorrer todo el archivo en la memoria, así como almacenarlo.
5  Programación / Programación C/C++ / Re: Error en tiempo de ejecución al hacer un stream con fwrite en: 16 Junio 2013, 00:52 am
No has pensado en hacer algo como esto?:

Código
  1. uint64_t getFileSize(istream& stream)
  2. {
  3. uint64_t cur, ret;
  4. cur = stream.tellg();
  5. stream.seekg(0, ios::end);
  6. ret = stream.tellg();
  7. stream.seekg(cur, ios::beg);
  8.  
  9. return ret;
  10. }
  11.  
  12. ifstream readfile(readpath.c_str(), ios::binary|ios::in);
  13.  
  14. uint64_t fileSize = getFileSize(readfile);
  15. char *buf = new char[fileSize];
  16. readfile.read(buf, fileSize);
  17.  
  18. for(size_t i=0; i<fileSize; i++)
  19. {
  20. /* Haces lo que quieras con buf[i] */
  21. outputfile.put(buf[i]);
  22. }
  23.  
  24. delete[] buf;
  25.  

Lo veo un poco menos confuso no?

Lo que me interesaba era realizarlo char a char, pero este código escribe entero de un plumazo por lo que no me serviría  :-\ Pero muchas gracias!!

Pues es raro que no te funcione mi código porque a mi si me funciona, puede que el error esté en otro sitio.
Mi código completo es este:
Código
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. ofstream outputfile;
  8. outputfile.open("file1",ios::out);
  9. ifstream readfile;
  10. readfile.open("file2",ios::in);
  11.  
  12.  
  13. while(readfile.good()){
  14. char writebuffer=readfile.get();
  15.  
  16. if(readfile.good())outputfile.put(writebuffer);
  17. }
  18. readfile.close();
  19. outputfile.close();
  20. }

Tenías razón sobre lo del read y write, si que desplazan.
Otra manera que me funciona es esta:

Código
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7. ofstream outputfile;
  8. outputfile.open("file1",ios::out);
  9. ifstream readfile;
  10. readfile.open("file2",ios::in);
  11.  
  12. char writebuffer;
  13. while(readfile.read(&writebuffer,1)){
  14. if(readfile.good())outputfile.write(&writebuffer,1);
  15. }
  16. readfile.close();
  17. outputfile.close();
  18. }

Al final resultaba que ¡¡LOS DOS CÓDIGOS FUNCIONABAN!! El problema era muy simple: Paraba la ejecución yo manualmente antes del ifstream.close()  :xD En serio, menuda chorrada y era simplemente eso. Muchas gracias a todos!!

Lo que aún no entiendo es por qué necesito cerrar el ifstream, osea, hago escritura en binario, una vez acabe de escribir el fichero se supone que no tiene ninguna cabecera de cierre ni nada por el estilo no? Es decir, al haber escrito todos los caracteres del fichero, aunque no cierre el stream, debería ser el mismo fichero. ¿Sabéis por que es? Porque el problema era ese, pensaba que aunque no cerrara el stream el fichero se había escrito ya completamente

 ;-) Por fín lo arreglé!!
6  Programación / Programación C/C++ / Re: Error en tiempo de ejecución al hacer un stream con fwrite en: 15 Junio 2013, 21:23 pm
Supongo que estás haciendo un crypter o algo así... no?

Abres el archivo pasándole el flag ios::binary, pero no el flag ios::in. No sé si eso puede causar el error, pero prueba a cambiarlo.

Saludos.

Creo que no le he pasado el flag ios::in no?? :-\
Y sí, es un crypter  ;D

Vale, ya sé cual es un fallo. Resulta que read y write no se desplazan por el fichero solo leen y escriben empezando por el principio(a no ser que especifiques un offset).
Tendrías que usar put y get:
Código
  1. while(readfile.good()){
  2. char writebuffer=readfile.get();
  3.  
  4. if(readfile.good())outputfile.put(writebuffer);
  5. }
  6. readfile.close();
  7. outputfile.close();

A ver si te funciona esto...

Por otra parte tengo que decir que el error que te da no tiene pinta de ser por eso. Tengo la impresión de que en algún lugar se ha modificado un puntero. La dirección 0x20202020 es muy sospechosa, 0x20 en ascii es un espacio. ¿Cabe la posibilidad de que el error esté en otro sitio?

He probado tu code y esta vez me da el error 0x05, que cambiando el code de otras formas también me daba. Los errores que recibo probando diferentes codes son el 0x05 y 0x20 siempre.

Y he estado investigando y te diré que el read SÍ desplaza el fichero, osea que seguimos como al principio...

Creo que debe ser algo relacionado con el final de fichero, porque he probado también:

Código:
	while(!readfile.bad()){


char writebuffer;
readfile.read(&writebuffer,1);
outputfile.write(&writebuffer,1);

}

Y funciona, lo que pasa que no para, se vuelve loco y escribe el fichero una y otra vez hasta que lo cierras. Si pruebo con:

Código:
	while(!readfile.eof()){


char writebuffer;
readfile.read(&writebuffer,1);
outputfile.write(&writebuffer,1);

}

Me lee sólo parte del fichero, es decir, el fichero origen ocupa 28K y el de destino 30K, osea que para antes de llegar al final.

Prácticamente ahora sólo queda comprobar el final de fichero, se os ocurre algún método¿? (ya que con eof()) no lo conseguimos)

EDITO: Con este código pasa lo mismo que con el último ejemplo:
Código:
	while(!readfile.bad()){

long actpos=readfile.tellg();
if(actpos==readfilesize){
break;
}
char writebuffer;
readfile.read(&writebuffer,1);
outputfile.write(&writebuffer,1);

}
7  Programación / Programación C/C++ / Re: Error en tiempo de ejecución al hacer un stream con fwrite en: 15 Junio 2013, 19:13 pm
La función está bien, lo que hace es devolver el tamaño del fichero sin resetear el puntero del stream.

El principio del fichero es el siguiente:

Código:
MZ       ÿÿ  ¸       @                                   €   º ´	Í!¸LÍ!This program cannot be run in DOS mode.

$       PE  L š#²Q        à     >   4      ¾]       `    @                       à          @…                           d]  W    €  à.                   À      `                                                               H           .text   Ä=       >                    `.sdata  8   `      B              @  À.rsrc   à.   €   0   D              @  @.reloc      À      t              @  B                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ]      H     1  L,       P
8  Programación / Programación C/C++ / Re: Error en tiempo de ejecución al hacer un stream con fwrite en: 15 Junio 2013, 18:03 pm
Me temo que ya lo había probado  :( (Lo de readfile.eof)

9  Programación / Programación C/C++ / Error en tiempo de ejecución al hacer un stream con fwrite en: 15 Junio 2013, 15:40 pm
Muy buenas cracks, tengo un problemilla que me está frustrando bastante, os dejo el code para que veáis que falla, seguro que es una chorrada:


Código:
long tellFileSizeSTREAM(ifstream& FileToAnalize){
long startpoint=FileToAnalize.tellg();
long retorno=0;
FileToAnalize.seekg(0,ios_base::end);
retorno=FileToAnalize.tellg();
FileToAnalize.seekg(0,startpoint);
return retorno;
}


//A PARTIR DE AQUÍ ESTE CODE ESTÁ DENTRO DEL MAIN
ifstream readfile;
readfile.open(readpath.c_str(),ios::binary); //readpath es un string con la ruta
long readfilesize=tellFileSizeSTREAM(readfile);
while(readfile.good()){
char writebuffer;
readfile.read(&writebuffer,1);
outputfile.write(&writebuffer,1);
}

Lo extraño esque me da error en tiempo de ejecucción de violación de acceso a memoria, he probado a cambiar el código de mil maneras posibles pero no tengo ni idea de qué puede ser :-( A alguno os ha pasado esto?

Ah, y tengo que ir char a char porque quiero hacer una manipulación en ellos. A ver si alguno sabe lo que es. Gracas de antemano :silbar:
10  Programación / Programación C/C++ / Re: ALGUIEN PUEDE AYUDARME EN COMO SE HACE ESTE PROGRAMA, en Dev C++ en: 19 Septiembre 2012, 16:29 pm
No se hacen tareas, empieza por ti misma y pregunta dudas concretas.

Saludos.


Se va notando el principio de curso... jeje
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines