|
Mostrar Temas
|
Páginas: 1 2 [3]
|
21
|
Foros Generales / Foro Libre / Alguien Juega al CounterStrike
|
en: 1 Agosto 2010, 06:09 am
|
Bueno el titulo lo dice todo... algunas veces estoy un tanto aburrido pero no encuentro muchas personas con las cuales pasar un rato de diversion y quisiera saber cuales miembros de la comunidad aun lo juegan.
|
|
|
23
|
Programación / Programación C/C++ / [Taller] Signals y Slots en Qt.
|
en: 15 Julio 2010, 03:12 am
|
Los Signals y Slots son los mecanismos de comunicación utilizados para comunicar objetos que heredan de Q_OBJECT. Q_OBJECT es la base de todos los objetos de Qt. Los Slot son simplemente funciones, que se quiere decir con esto, que pueden ser llamadas por el objeto según el estandar de C++ precediendo el nombre del metodo del nombre de la funcion seguida de un punto(.) o precediendola de una flecha(->). Las señales podrian interpretarse como los valores de retorno que se enviaran al metodo que esta conectado a esta señal. Se declaran como si fueran metodos pero sin procedimientos. Se envian colocando primero la macro “emit” posteriormente la señal rellenando sus argumentos con los valores que se desean emitir. Los Signals y Slots se conectan utilizando la API de Qt llamada connect(), la cual lleva la siguiente forma: connect(const Qobject* sender, const char* signal, const Qobject* reciever, const char* slot); Hay ciertas caracteristicas con las que cuenta la comunicación entre los signals y los slots, entre estas estan: - Son type-safe, esto quiere decir que la signal debe encajar con el slot.
- Los objetos emiten señales, pero no se preocupan de que estos sean recibidos por un slot.
- Se pueden conectar multiples signals a un solo slot.
- Se pueden conectar un signal a multiples slots.
- Se puede conectar un signal con otro signal.
- Para conectarse un signal con un slot estos deben tener el mismo numero de parametros y el mismo tipo de parametros en el orden correcto.
- Existe una simple excepcion, si un signal contiene mas parametros que un slot y ambos se conectan, se obviaran los parametros sobrantes en el signal.
No existe mejor forma para hechar un vistazo que viendo un codigo de ejemplo que demuestre lo antes explicado. //Ejemplo.h #ifndef EJEMPLO_H #define EJEMPLO_H #include <QtGui> class QSpinBox; class QSlider; class QLabel; class QVBoxLayout; class QHBoxLayout; class Ejemplo : public QWidget { Q_OBJECT signals: void setRGB(int,int,int); private slots: void getRGB(int,int,int); void setRed(int); void setGreen(int); void setBlue(int); void setAlpha(int); private: short int red, green, blue, alpha; QSpinBox *SpinRed, *SpinGreen, *SpinBlue; QSlider *SliderRed, *SliderGreen, *SliderBlue; QLabel *LabelRed, *LabelBlue, *LabelGreen; QVBoxLayout *LeftVertical, *MiddleRightVertical, *MiddleLeftVertical; QHBoxLayout *MainHorizontal; public: Ejemplo(QWidget *parent = 0); }; #endif // EJEMPLO_H
//Ejemplo.cpp #include "ejemplo.h" Ejemplo::Ejemplo(QWidget *parent) : QWidget(parent) { //Construimos los Slider que utilizaremos. this->SliderBlue = new QSlider(Qt::Vertical,0); this->SliderBlue->setMinimum(0); this->SliderBlue->setMaximum(255); this->SliderRed = new QSlider(Qt::Vertical,0); this->SliderRed->setMinimum(0); this->SliderRed->setMaximum(255); this->SliderGreen = new QSlider(Qt::Vertical,0); this->SliderGreen->setMinimum(0); this->SliderGreen->setMaximum(255); //Construimos los SpinBox que utilizaremos. this->SpinRed = new QSpinBox; this->SpinRed->setMinimum(0); this->SpinRed->setMaximum(255); this->SpinBlue = new QSpinBox; this->SpinBlue->setMinimum(0); this->SpinBlue->setMaximum(255); this->SpinGreen = new QSpinBox; this->SpinGreen->setMinimum(0); this->SpinGreen->setMaximum(255); //Construimos los Labels. this->LabelBlue = new QLabel("Azul"); this->LabelGreen = new QLabel("Verde"); this->LabelRed = new QLabel("Rojo"); //Construimos los Layout para Organizar. this->LeftVertical = new QVBoxLayout; this->MiddleLeftVertical = new QVBoxLayout; this->MiddleRightVertical = new QVBoxLayout; this->MainHorizontal = new QHBoxLayout; //Vamos agregando los Objetos a los Layout. this->LeftVertical->addWidget(this->LabelRed); this->LeftVertical->addWidget(this->SpinRed); this->LeftVertical->addWidget(this->SliderRed); this->MiddleLeftVertical->addWidget(this->LabelGreen); this->MiddleLeftVertical->addWidget(this->SpinGreen); this->MiddleLeftVertical->addWidget(this->SliderGreen); this->MiddleRightVertical->addWidget(this->LabelBlue); this->MiddleRightVertical->addWidget(this->SpinBlue); this->MiddleRightVertical->addWidget(this->SliderBlue); this->MainHorizontal->addLayout(this->LeftVertical); this->MainHorizontal->addLayout(this->MiddleLeftVertical); this->MainHorizontal->addLayout(this->MiddleRightVertical); this->setLayout(this->MainHorizontal); this->setWindowTitle("Cambia el Fondo(Codigo de Ejemplo)"); this->MainHorizontal->addStretch(); this->setFixedHeight(this->sizeHint().height()); this->red = 0; this->blue = 0; this->green = 0; this->alpha = 0; //Realizamos las conexiones que necesitaremos. connect(this->SpinRed,SIGNAL(valueChanged(int)),this->SliderRed,SLOT(setValue(int))); connect(this->SpinGreen,SIGNAL(valueChanged(int)),this->SliderGreen,SLOT(setValue(int))); connect(this->SpinBlue,SIGNAL(valueChanged(int)),this->SliderBlue,SLOT(setValue(int))); connect(this->SliderRed,SIGNAL(valueChanged(int)),this->SpinRed,SLOT(setValue(int))); connect(this->SliderGreen,SIGNAL(valueChanged(int)),this->SpinGreen,SLOT(setValue(int))); connect(this->SliderBlue,SIGNAL(valueChanged(int)),this->SpinBlue,SLOT(setValue(int))); connect(this->SliderRed,SIGNAL(valueChanged(int)),this,SLOT(setRed(int))); connect(this->SliderGreen,SIGNAL(valueChanged(int)),this,SLOT(setGreen(int))); connect(this->SliderBlue,SIGNAL(valueChanged(int)),this,SLOT(setBlue(int))); connect(this,SIGNAL(setRGB(int,int,int)),this,SLOT(getRGB(int,int,int))); emit setRGB(this->red,this->green,this->blue); //Enviamos una señal para cambiar el color. } void Ejemplo::setAlpha(int change) { this->alpha = change; emit setRGB(this->red,this->green,this->blue); //Enviamos una señal para cambiar el color. } void Ejemplo::setRed(int change) { this->red = change; emit setRGB(this->red,this->green,this->blue); //Enviamos una señal para cambiar el color. } void Ejemplo::setGreen(int change) { this->green = change; emit setRGB(this->red,this->green,this->blue); //Enviamos una señal para cambiar el color. } void Ejemplo::setBlue(int change) { this->blue = change; emit setRGB(this->red,this->green,this->blue); //Enviamos una señal para cambiar el color. } void Ejemplo::getRGB(int red, int green, int blue) { QColor *Background = new QColor(red,green,blue,255); QPalette *Paleta = new QPalette; Paleta->setColor(QPalette::Background,Background->convertTo(QColor::Rgb)); this->setPalette(*Paleta); }
//main.cpp #include <QtGui/QApplication> #include "ejemplo.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Ejemplo w; w.show(); return a.exec(); }
|
|
|
25
|
Foros Generales / Foro Libre / IRC de elhacker.net
|
en: 19 Mayo 2010, 14:57 pm
|
Tanto tiempo un grupo de usuarios solicitando un chat... dan el chat y ahora nadie entra, que sucede? parece como si fueran las fantasias de algunos que al obtenerlas ya pierden interes. Siempre somos los mismos. ESPERAMOS A LOS USUARIOS QUE SOLICITABAN EL CHAT OFICIAL.
|
|
|
26
|
Foros Generales / Foro Libre / Piropea a Bianc4
|
en: 15 Mayo 2010, 00:03 am
|
Bianc4, la nueva integrante de la comunidad... moderadora de nuestro Chat en IRC te queremos dedicar los mejores piropos...
Dejen Sus Piropos a Bianc4:
bianc4 quisiera hacerte un BufferOverflow para meterte mi exploit.
|
|
|
27
|
Seguridad Informática / Análisis y Diseño de Malware / [Taller] Introduccion al Diseño de Rutinas de Encriptacion
|
en: 4 Noviembre 2009, 08:51 am
|
[Taller] Introduccion al Diseño de Rutinas de Encriptacion
Contenido
1. Introducción 1.1 Concepto de Encriptacion
2. Tipos de Encriptacion. 2.1 Encriptacion Por Sustitucion. 2.2 Encriptacion por Llaves Corredizas 2.3 Encriptacion por Llaves Largas 2.4 Encriptacion por Transposicion
3. Despedida
1. Introduccion
En este taller sobre diseño de rutinas de encriptacion bajo Assembler debido a su simplicidad para ser añadidos a proyectos en C/C++ y Delphi. Para seguir el taller no se necesitara mas que conocimientos basicos sobre Assembler.
Tambien es recomendado el conocimiento basico del formato PE, especificamente los flag de la sección, debido a que seran necesario para la desencriptacion en memoria del codigo del programa.
De cada Tipo de encriptacion dare 2 ejemplos (a menos que crea que no es necesario), uno sencillo para que se familiaricen con el metodo y otro metodo un poco mas complejo para que capten una idea del uso que se podria dar.
1.1 Concepto de Encriptacion
La encriptacion no es mas que el metodo utilizado para volver ilegible una sección de codigo que consideremos importante. La encriptacion debe de ser lo mas robusta posible complicando asi el analisis de dicha rutina.
2. Tipos de Encriptacion
Se podria decir que existen miles de rutinas de encriptacion pero la gran mayoria se basa en la combinacion de 2 o mas de los principales tipos de encriptacion. por ejemplo la mezcla una encriptacion simple con una encriptacion de transposicion podria ser robusta. Todo depende de las ganas de creacion del programador y el empeño que este quiera añadir a la rutina diseñada.
Los tipos de encriptacion que voy a tratar en este taller son:
- Encriptacion por Sustitucion (Substitution Encryption).
- Encriptacion por Llaves Corredizas (Sliding Key Encryption).
- Encriptacion por llaves largas (Long Key Encryption).
- Encriptacion por Transposicion (Transposition Encryption).
2.1-Encriptacion por Sustitucion. Se podria decir que es uno de los metodos mas utilizados para encriptacion, A cada byte se agregar, reducir, rotar, etc. para la creacion de un nuevo caracter que sera el sustituto del caracter anterior. Para descifrar dicha encriptacion tan solo es necesario la realizacion de las operaciones de encriptacion pero con el orden inverso, por ejemplo si rotaste a la derecha un X numero de bits para descifrar debes rotar a la izquierda igual numero de bits.
La operacion mas utilizada para este tipo de encriptacion es el metodo XOR, debido a que la misma rutina de encriptacion funciona para la desencriptacion.
Codigo Ejemplo1:
mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar) mov bx,0F432h ; Pasamos la llave a bx encrypt_routine: ; Inicio de la rutina de encriptacion lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI xor ax,bx ; XOR a AX con respecto a BX stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI loop encrypt_routine
En este ejemplo pasado al ser utilizado el Metodo XOR puede ser utilizado tanto para encriptacion como para desencriptacion.Esto que parece una ventaja para el programador es una desventaja para la encriptacion que este esta realizando en su codigo.
Codigo Ejemplo2(Encriptacion): Quedara de parte del usuario que lee el taller deducir que hace el codigo (Tomenlo como ejercicio mental xD)mov ecx,(fin_codigovir - ini_codigovir)/2 mov esi,ini_codigovir mov edi,esi mov bx,0F432h encrypt_routine: lodsw rol al,bh add al,bl ror ah,bl add ah,bh xor ax,bx stosw loop encrypt_routine
Codigo Ejemplo2(Desencriptacion):Lo mismo de la rutina de encriptacion (Ejercicio Mental xD) mov ecx,(fin_codigovir - ini_codigovir)/2 mov esi,ini_codigovir mov edi,esi mov bx,0F432h decrypt_routine: lodsw ror al,bh sub al,bl rol ah,bl sub ah,bh xor ax,bx stosw loop encrypt_routine
2.2 Encriptacion por Llaves CorredizasEn el tipo de encriptacion de llave corrediza, en la encriptacion de cada byte la llave experimenta un cambio en su valor. Es una especie de encriptacion simple que dentro de su rutina realiza cambios a la llave de encriptacion.Codigo Ejemplo1: mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar) mov bx,0F432h ; Pasamos la llave a bx encrypt_routine: ; Inicio de la rutina de encriptacion lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI xor ax,bx ; XOR a AX con respecto a BX stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI dec bx ; Modificamos el valor de la llave almacenada en bx loop encrypt_routine
Al igual que en el ejemplo pasado al ser utilizado el Metodo XOR puede ser utilizado tanto para encriptacion como para desencriptacion.
Codigo Ejemplo2(Encriptacion):Otra vez lo mismo (Ejercicio Mental xD)mov ecx,(fin_codigovir - ini_codigovir)/2 mov esi,ini_codigovir mov edi,esi mov bx,0F432h encrypt_routine: lodsw rol al,bh add al,bl ror ah,bl add ah,bh xor ax,bx rol bx,bl dec bx not bx stosw loop encrypt_routine
Codigo Ejemplo2(Desencriptacion):Me canse de Escribir... a partir de ahora solo pondre (Ejercicio Mental xD)mov ecx,(fin_codigovir - ini_codigovir)/2 mov esi,ini_codigovir mov edi,esi mov bx,0F432h decrypt_routine: lodsw ror al,bh sub al,bl rol ah,bl sub ah,bh xor ax,bx rol bx,bl dec bx not bx stosw loop encrypt_routine
2.3-Encriptacion por Llaves LargasEn este metodo se toma una sección de datos o codigo mayor al tamaño de un registro para realizar una llave, dicho tamaño estara definido por el programador, por lo tanto la llave puede medir desde 4 bytes hasta donde crea necesario el programador de la rutina de encriptacion.Codigo Ejemplo1: mov ecx,(fin_codigovir - ini_codigovir)/2 ; Tomamos el numero de words de longitud del codigo a cifrar mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar) mov ebx,offset ini_llave ; Movemos a ebx la direccion del inicio de la llave mov dx,fin_llave-ini_llave ; Movemos a dx el tamaño de la llave encrypt_routine: ; Inicio de la rutina de encriptacion lodsw ; Movemos a AX el vamor de [ESI] y sumamos 2 a ESI xor ax,bx ; XOR a AX con respecto a BX add bx,2 ; Nos movemos 1 word dentro de la llave (2bytes) cmp bx,dx ; Comparamos si bx y dx son iguales jne cont: ; Si no son iguales continuamos la rutina mov ebx,offset ini_llave; Si son iguales llegamos al final de la llave, por lo tanto debemos volver al inicio cont: stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI loop encrypt_routine
Este tipo de encriptacion no necesita la explicacion de un codigo con un cierto mayor grado de complejidad debido a que simplemente el registro va tomando valores de una llave de gran longitud y la rutina de encriptacion solo esta realizando una encriptacion simple con diferentes valores como llave.2.4-Encriptacion por TransposicionEste metodo invierte cada par de Word en la sección de codigo que queremos cifrar, es un metodo muy debil, se podria decir que el mas debil de todos pero combinado con otro de los metodos es un serio dolor de cabeza para quien trate de desencriptarlo manualmente.Codigo Ejemplo1: mov ecx,(fin_codigovir - ini_codigovir)/2 -;Tomamos el numero de words de longitud del codigo a cifrar mov esi,ini_codigovir ; Pasamos a ESI el principio del codigo a cifrar mov edi,esi ; Copiamos en EDI el valor de ESI (principio de codigo a cifrar) encrypt_routine: lodsw ; Movemos a AX el valor de [ESI] y sumamos 2 a ESI mov bx,ax ; Guardamos en BX el valor de AX lodsw ; Movemos a AX el valor de [ESI] y sumamos 2 a ESI stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI mov ax,bx ; Recuperamos el valor que guardamos previamente en BX y lo retornamos a AX stosw ; Movemos a [EDI] el valor de AX y sumamos 2 a EDI loop encrypt_routine
Como ven no es una rutina de otro mundo y muy debil trabajando sola, debido a que no hace una sustitucion de bytes y con solo alterar el orden de los bytes de word en word ya esta descifrado. Al igual que en el metodo XOR esta rutina puede cifrar o descifrar sin necesidad de modificacion alguna.3. Despedida Bueno eso es todo, cualquier toda en lo que concierne al tema pueden dejar sus preguntas en el foro o contactarme via MSN/E-mail que con gusto le respondere las preguntas que tengan. Todo tipo de criticas son aceptadas (Contructivas, Destructivas, Exageradas, Ignorantes, etc.).
Espero que esto sirva de ayuda para aquellos que se motiven en hacer o diseñar sus propias rutinas de encriptacion.
|
|
|
|
|
|
|