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

#1
Buenas gente, còmo va?. Estuve investigando bastante el tema, de crear un fake ap, con el mismo nombre, mac etc, hacer que el cliente se deslogueè, o que un cliente nuevo intente loguearse a este fake ap, y que el fake ap guarde el password que se le ingreso. De esta manera podriamos obtener el pass sin usar fuerza bruta ni wps.
He visto varios articulos, pero lo que terminan haciendo es redirigir al usuario a una pàgina que le pedirà el password y luego se guarda por sql.
No es esto lo que busco, yo quiero que el pass llegue a mi fake ap, al autenticar el wpa, y lo guarde. Parecerìa que esto no està desarrollado por algùn motivo.
Alguien que sepa a que se debe o si existe un desarrollo de este tipo, que me tire un centro, saludos.

#2
Gracias brujo por sacarme de esta duda!.

Un abrazo!
#3
Cita de: neveldine en  5 Mayo 2012, 01:48 AM
Si lo necesitas siempre puedes hacer una compilación condicional


#ifdef WIN32
system("cls");
#else
system("clear");
#endif


Neveldine, eso lo podés usar dentro del main o una función, o va en la cabecera?.

saludos.
#4
Cita de: flony en  9 Mayo 2012, 03:49 AM
Rodrigosolari no dudo de tu buena fe....y ganas de ayudar pero en esta parte del code
arrayn= new int[n];
segun tengo entendido
cita de tutorial cconclase creo que falta el delete

Flony, en ningún momento se usa memoria dinámica, para eso hay que llamar a malloc y ahí si se usa la función free.

saludos.
#5
El ejercicio está muy bueno, yo te diría que te olvides de la lista enlazada y lo plantees primero. Igual, sabé que un prisionero apunta al de al lado y así sucesivamente, cada vez que matás a uno, el de la izquiera pasa a apuntar al siguiente luego del muerto, (el más próximo que queda vivo a la derecha). Al muerto le das un free para liberar la memoria que tenía con malloc.  El último prisionero apunta al primero. Plantealo en papel tranquilo, no es muy dificil.

Una vez que tenés bién la estructura de datos, de los prisioneros apuntandosé, tenés que hacer la función que mate al prisionero. De ahí en más empezas a buscar el algoritmo para no matar al amigo. Sabés listas?, si no sabés mandame un mp con tu e-mail que te puedo enviar las primitivas de listas y unos tutoriales. Saludos.
#6
La pregunta está en el asunto, por lo que veo parece que no, pero como en el mundo del hacking todo es posible.

saludos.
#7
Estuve buscando como hacer una remote shell por todos lados, encontré codigos inclusive acá en el foro, pero ninguno me convencía, por que más que buscar algo funcional buscaba algo que me sirviese para aprender. Buscando y buscando encontré este código en una web, que compila de una, al principio no lo entendí pero recurriendo a la msdn pude entenderlo. Es bastante simple y acá lo dejo comentador por mí, la parte de winsock no la comento por que la doy por sabida, cualquier duda de winsock me dicen.
Los comentarios son medios pedorros pero es lo que pude deducir viendo la documentación, no tengo experiencia en apis de windows, estoy aprendiendo así que paciencia.


/**********************************************************
* I take no responsibility for what you or others might do
* with this knowledge.
***********************************************************/
#pragma comment(lib,"ws2_32.lib")
#include <Winsock2.h>


int main( int argc, char ** argv )
{
    WSADATA WSAData;
    SOCKADDR_IN sin;
    SOCKET sock;
    WSAStartup( MAKEWORD( 2, 0 ), &WSAData );


    sock = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, 0, 0, 0 );
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl( INADDR_ANY );
    sin.sin_port = htons( ( u_short )8023 );


    bind( sock, ( SOCKADDR * )&sin, sizeof( SOCKADDR_IN ) );
    listen( sock, SOMAXCONN );


    while( true )
   {
        SOCKET tmp = accept( sock, 0, 0 );
        STARTUPINFO si = { 0 }; //declara la estructura "si" del tipo startupinfo, que será pasada a la funcion createprocess.
        PROCESS_INFORMATION pi = { 0 }; //declara la estructura "pi" del tipo process_information que será pasada a la funcion createprocess
        char buff[ 2010 ]; //declara el buffer donde getenviroment variable va a guardar la ruta del cmd.


        si.cb = sizeof( si ); // no se
        si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; // no se
        si.wShowWindow = SW_HIDE; // le dice que no muestre la ventana.
        si.hStdOutput = ( HANDLE )tmp; // redirige la salida a tmp, lo castea como handle, tmp es el socket creado con wsasocket, (no con socket, ojo)
        si.hStdError = ( HANDLE )tmp; // redirige la salida de errores al socket
        si.hStdInput = ( HANDLE )tmp; //le indica que el inputo vendrá del socket.


        GetEnvironmentVariable( "COMSPEC", buff, 2000 ); //COMSPEC es la variable de entorno que trae la ruta del cmd.


        CreateProcess( buff, 0, 0, 0, true, CREATE_NEW_CONSOLE, 0, 0, &si, &pi );
        // en buff le dice que abra el cmd, el true es para que herede, no se que, pero es para eso, CREATE_NEW_CONSOLE es la indicacion que hay que
        //enviarles, al final le pasa los dos punteros a la estructura, el puntero &si para que sepa como iniciar, y el &pi para que guarde la data
        // del proceso (como inició, etc)


        CloseHandle( pi.hProcess ); //cierra los dos handle, lo tengo que ver bien, y cierra el socket.
        CloseHandle( pi.hThread );
        closesocket( tmp );
    }
    return( 0 );
}




Acá dejo el comentario del tipo que lo posteó en su blog: Actually these are 43 lines counting the blank lines.
Writing €œsimple telnet server” is a simple task. All you have to do is to spawn the OS shell and redirect its input and output through a socket to the telnet client. Nowadays telnet clients are even smart enough not to need telnet control character when they are unneeded. Anyway occasionally you may see junk characters on the console screen. These are telnet control characters that are not handled by our €œsimple telnet server”. Of course there is some/lot code you have to write around the real telnet core, that I have skipped. Like checking user/pass credentials, running the shell within the user context, handling telnet control characters etc.

So here comes the 20-line simple telnet server. It has no user check nor error handling. It listens on port 8023 and will spawn the default windows shell expanding ( GetEnvironmentVariable ) the "%COMSPEC%" environment variable. One thing that makes it simpler is that it directly assigns the client socket for stdin/stdout/stderr of the spawned shell. Note that we need to create the socket through the WSASocket function ( and not socket ) so that we could use the socket as handle.

If you play a bit with the program you will find that it can not handle applications like 'edit.com' and it will hang on command waiting for ctrl + c to terminate, such as 'more'.
It is due to the following facts:
1 - 'edit.com' writes 'directly' to the video memory ( using functions like WriteConsole ) So the output is not sent to the console output handle but directly displayed in the console screen buffer. And our simple server does not export the console screen buffer.
2 - the 'more' command terminates on ctrl + c, but in windows console world ctrl + c is not a character, but it is a signal/event. The CTRL_C_EVENT is generated by the system when the keys ctrl + c are pressed in a console window and the event is sent to the console process. If the event is not handled by custom ctrl handler( installed through SetConsoleCtrlHandler ) the console process is closed by its default ctrl handler. Using our redirected input we actually send the ctrl + c character (0x03) to the stdio handle, and the system does not generate CTRL_C_EVENT.

y dejo el link: http://www.kpym.com/blog/2005/12/src-simple-telnet-server-in-20-lines-c.html


El tipo aclara que el programa tiene algunos problemas para abrir el edit, o para manejar un ctrl+c, si alguno de los grosos del foro sabe como resolverlo y mejorar el código, bienvenido sea.

Un abrazo para todos.
#8
Ok, gracias.

Ya probé modificando el operator =, pero no dió resultado.

ya veremos.

ahora me voy a rendir el parcial

saludos.
#9
Gracias por las respuestas, pero no tal vez expresé mal la pregunta:

Simple:

Así el código compila y funciona y tira un warning.

Yo se que está mal, se por qué esta mal y lo quiero hacer bién.

Yo no quiero modificar el this, yo quiero dar un resultado independiente.
Es decir que no voy a modificar al objeto llamador.

Racional& operator + ( Racional& r)
Racional aux;

return aux; (ese aux es un objeto no una referencia) por eso me putea el compilador.

Entonces la forma correcta es:

Racional operator + (Racional& r)
//codigo..codigo
return aux;

De esta forma el compildor no tira los warnings, pero me putea cuando desde el main hago r5= r6 + r7.

Se entiende?


#10
Buenas, tengo un problema de concepto que no logro resolver de ninguna manera.

Doy un ejemplo rápido y abajo dejo el codigo completo de la clase racional que no es más que una clase para manejar números racionales.


En la sobrecarga de *,+, y - me encuentro que yo quiero devolver un valor que dentro de la función declaré como aux:

Racional& operator * ( Racional& r)
        {
               Racional aux;
               int deno,nume;
               deno= this->den * r.den;
               nume= this->num * r.num;
               aux.set_racional (nume,deno);              
               return aux;
       }

El programa funciona pero el compilador tira un warning:
[Warning] reference to local variable `aux' returned

Y es lógico por que estoy pasando la dirección de memoria de un valor que desaparece con la función.
Pero funciona.
El tema es que si yo saco el &, para que la función en lugar de devolver una referencia devuelva la cosa en si misma:

Racional operator * ( Racional& r)
        {
               Racional aux;
               int deno,nume;
               deno= this->den * r.den;
               nume= this->num * r.num;
               aux.set_racional (nume,deno);              
               return aux;
       }


Esto también funciona, no tira el warning, pero tira el siguiente error al querer compilar:

no match for 'operator=' in 'r3 = racional::operator*(Racional&)(((Racional&)(&r2)))'

Este error lo tira en la siguiente línea:
 r3 = r1 * r2;

Dejo el código completo funcionando, pero tirando los warnings.
Estoy laburando en dev++.
Alguien me dice si es que tengo que sobrecargar el operador = de alguna forma, o que tengo que hacer. Ya estuve buscando bastante en google y llegué a la conclusión de que el código está mal al pasar la referencia de un objeto que es una variable local, y quiero ver como solucionarlo.

saludos.



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

class Racional
{
   private:
       int num;
       int den;
   public:
       Racional (void):num(1),den(1){}
       Racional (int a, int b) {this->set_racional(a,b);}
       Racional (Racional& r){this->set_racional(r.num,r.den);}
       ~Racional () {};
       
       Racional& operator = ( Racional& r)
       {
           this->set_racional(r.num,r.den);
           return *this;
       }
       
       friend ostream& operator << (ostream& sal, Racional& r)
       {
           sal<<r.num<<"/"<<r.den<<" ";
           return sal;
       }
       
       float get_real()
       {
           return (float)num/(float)den;
       }
       
       void set_racional (int n, int d)
       {int i,;
           for ( i=12; i>0; i--)
           if (n%i==0 && d%i==0) {n=n/i;d=d/i;}
           if (d<0 && n<0) { d=d*(-1);n=n*(-1);};
           this->num=n;
           this->den=d;
       }
           
       /*
       Racional& operator + ( Racional& r)
       {
           int deno,nume;
           Racional aux;
           deno=this->den*r.den;
           nume= (   (deno/this->den) * this->num +  (deno/r.den)* r.num );
           aux.set_racional (nume,deno);
           return aux;
       }*/
       
       friend Racional& operator + (Racional& r, Racional& t)
       {
           int deno,nume;
           Racional aux;
           deno=t.den*r.den;
           nume= (   (deno/t.den) * t.num +  (deno/r.den)* r.num );
           aux.set_racional (nume,deno);
           return aux;
       }
           
           
           
       
       Racional& operator++ ()
       {
           int deno,nume;
           deno=this->den;
           nume=this->num+deno;
           this->set_racional (nume,deno);
           return *this;
       }
             
       int operator!= ( Racional& r)
       {
           return ( this->den!=r.den || this->num!=r.num);
       }
       
       Racional& operator - ( Racional& r)
       {
           int deno,nume;
           Racional aux;
           deno=this->den*r.den;
           nume= (   (deno/this->den) * this->num -  (deno/r.den)* r.num );
           aux.set_racional (nume,deno);
           return aux;
        }
        Racional& operator * ( Racional& r)
        {
               Racional aux;
               int deno,nume;
               deno= this->den * r.den;
               nume= this->num * r.num;
               aux.set_racional (nume,deno);              
               return aux;
       }
       
       Racional& operator + (int a)
       {
           Racional aux;
           int deno,nume;
           deno=this->den;
           nume=this->num + (a * deno);
           aux.set_racional (nume,deno);
           return aux;  
       }
friend       Racional& operator + (int a,Racional& r)
       {
           Racional aux;
           int deno,nume;
           deno=r.den;
           nume=r.num + (a * deno);
           aux.set_racional (nume,deno);
           return aux;  
       }
};

int main()
{
  Racional r1(1,1), r2(3,11), r3, r4 ,r5, r6;// r7(r1 + r2);
  r3 = r1 * r2;
  r4 = r3 + 5;
  r5 = 8 + r1;
  r1= r2 - r3;
  r6 = (r3 + r5);
  r4 = r3 + r5;
 
  cout << r1 << r2 << r3 << r4 << r5 <<endl;
  if (r5 != r6)
     cout << "Son distintos" << endl;
  getchar();
  return 0;
}