SET 39 Call For Papers

¿Eres un hacker? Si deseas pasar a formar parte de la historia del hacking hispano, colabora con la próxima edición de SET 39 enviándonos un artículo. No esperes más, esta es tu oportunidad de demostrar lo que sabes. Ayúdanos a construir una revista de hackers para hackers. SET Staff

SET 13

56316 visitas

Fuentes Extract

      2068

Autor: SET Staff
-[ 0x12 ]--------------------------------------------------------------------
-[ SET-EXT ]-----------------------------------------------------------------
-[ by SET Staff ]-----------------------------------------------------SET-13-

Aqui teneis la primera version de la utilidad para extraer los fuentes de
la ezine. Es una modificacion del extract incluido en Phrack.

Yo lo he probado, y funciona. Si teneis algun problema o preferis algun
lenguaje, teneis dos opciones: esperar a SET 14, o usar las versiones
que aparecen en el ultimo numero de Phrack, el 52.


<++> utils/set-ext.c
/*  set-ext.c by Falken para SET
 *
 *  SET - Saqueadores Edicion Tecnica, 1998
 *
 *  Extrae fragmentos especialmente marcados en una estructura jerarquica de
 *  directorios. Usar para extrare los fuentes incluidos en algunos de los
 *  articulos de SET. Compatible con el programa 'extract.c' aparecido en
 *  Phrack 50.
 *
 *  UNIX: gcc -o set-ext set-ext.c
 *  DOS/Windows: Cualquier compilador de C
 *
 *  SET-EXT <fichero>
 *
 */


#include <stdio.h>
#include <string.h>

void extraer (char *nombre)
{
char *c = "<++> ", *f = "<-->", b[256], *bp;
FILE *e, *s = NULL;
int l, n, i = 0;

l = strlen(c);
n = strlen(f);

	if ( !(e = fopen (nombre, "r"))) {
		printf ("No se pudo abrir %s.\n", nombre);
		return;
	}
	while (fgets (b, 256, e)) {
		if (!strncmp (b, c, l)) {
			b [strlen (b) - 1] = '\0';
			if ((bp = strchr (b + l + 1, '/')))
				while (bp) {
					*bp = '\0';
					mkdir (b + l, 0700);
					*bp = '/';
					bp = strchr (bp + 1, '/');
				}
				if ((s = fopen (b + l, "w")))
					printf  ("- Extrayendo %s\n", b + l);
				else {
					printf  ("No se puede extraer '%s'\n", b + l);
					return;
				}
		}
		else
			if (!strncmp (b, f, n)) {
				if (s) fclose (s);
				else {
					printf ("Error cerrando fichero.\n");
					return;
				}
			}
			else if (s) {
				fputs (b, s);
				i++;
			}
	}
	if (!i) printf  ("No se encontraron etiquetas de extraccion.\n");
	fclose (e);
}

int main (int argc, char **argv)
{
int indice = 0;
char *name;

	printf ("SET Split by Falken\n");
	printf ("SET - Saqueadores Edicion Tecnica, 1998\n");
	printf ("---------------------------------------\n\n");
	if (argc < 2) {
		printf ("Deja en blanco para salir\n\n");
		do {
			*name = NULL;
			printf ("Fichero a escanear: ");
			gets (name);
			if (*name)
				extraer (name);
		} while (*name);
	}
	else if (argc >= 2)
		for (indice = 2; indice <= argc; indice++)
			extraer (argv [indice - 1]);
	return (0);
}
<-->