elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: 1 2 3 [4] 5 6 7 8
31  Foros Generales / Foro Libre / Common Sence 2010 - Professional Version! en: 17 Agosto 2010, 19:16 pm

32  Foros Generales / Foro Libre / [Evento] I Jornada de Tecnología e informática: Cruzando Límites. en: 17 Agosto 2010, 18:24 pm
Les dejo este evento que estoy promocionando (No gano nada de dinero por esto, simplemente son varios amigos que están siempre en estas comunidades en Venezuela):

Un evento de tecnología en donde participarán ponentes especialistas en las áreas correspondientes! Aprende y actualízate!



Hora:   Octubre 2 · 8:00am - 5:30pm
Lugar:  Auditorio UJAP. San Diego, Edo. Carabobo, Venezuela

Enlace al evento en Facebook: http://www.facebook.com/event.php?eid=148824025144375#!/event.php?eid=148824025144375

Pueden comunicarse conmigo para más info, si quieren ir, pueden postear acá y de esa forma cuadrar para que vayan juntos, yo por motivos mayores no puedo asistir..

Saludos!

Fuente: http://www.andreujuan.com/2010/08/i-jornada-de-tecnologia-e-informatica.html
33  Programación / .NET (C#, VB.NET, ASP) / Visual Studio Express 2010 - Descargas e Info en: 11 Agosto 2010, 16:27 pm
Para que esté más organizada la descarga de Visual Studio Express, he creado este post para mantener los enlaces actualizados.

En caso de una nueva versión, se modificará el título con su respectiva descripción.

Versiones Express 2010: Nota: las descargas pueden ser en casi cualquier idioma, si lo quieren en español, selecciónenlo en el combobox antes de descargar.

Aplicaciones Web:
     Visual Web Developer 2010: desarrollo web, en C# y VB.Net

Aplicaciones Windows: Desarrollar aplicaciones Windows, Consola y Librerías. Los lenguajes vienen en paquetes separados:
     - Visual Studio 2010 Express: Visual Basic .Net
     - Visual Studio 2010 Express: C#
     - Visual Studio 2010 Express: Visual C++

Aplicaciones Móviles:
     Desarrolla tus aplicaciones silverlight o XNA para Windows Phone 7 utilizando Visual Studio 2010 Express for Windows Phone 7

Base de Datos:
     Sql Server 2008 R2 Express: Completamente gratis, 10 GB database storage, exactamente el mismo motor que la versión paga, compatible con SQL Azure Database service.

Descargar Todos en una imágen de disco (iso)
     Visual Studio 2010 Express - Todos

No existe ninguna restricción al usar las versiones Express. El software que desarrolles es totalmente propio, y Microsoft no tiene nada que ver con el. Cualquier duda al respecto puedes escribirla en este mismo post.

Las versiones Express piden registro, es totalmente gratis y te da un número de licencia.



Otra Opcion para Estudiantes:
Si son estudiantes pueden bajar de forma gratuita y legal la versión profesional de Visual Studio 2010 (y algunos otros programas como SQL Server 2008), sólo necesitan que su escuela (Universidad o preparatoria) esté en la lista y un correo electrónico de los que dan las escuelas.

Hay que ir a www.dreamspark.com, entrar con su Windows Live ID, elegir su país y buscar su escuela en la lista que aparece.

Se supone que es la versión completa, apenas la estoy bajando son 2.2 GB, cuando termine de descargar y lo instale les cuento más.

Saludos.

Enlaces Externos:
   Página oficial de las versiones Express
   Wikipedia: Microsoft Visual Studio Express

Saludos
34  Programación / .NET (C#, VB.NET, ASP) / Marshal - Interactuando entre managed y unmanaged memory. (C++ CLI) en: 4 Agosto 2010, 21:49 pm
Marshal - Interactuando entre managed y unmanaged memory.

Antes de comenzar con el tema tenemos que tener en cuenta que toda aplicación en .Net se ejecuta bajo una porción de memoria administrada por el CLR y no interactúa directamente con la memoria nativa. (Para conocer más, puedes revisar este post: Conceptos de la arquitectura .NET Framework escrito por Mace Windu.)  :)

Ahora que conocemos cómo funciona el framework, podemos entender qué es Marshal. Marshal es una clase que está en el namespace System.Runtime.InteropServices, que casi nadie habla de él y que no muchos han visto, y lo que hace es mediar entre ambos entornos. Imaginen un bar de lujo (Managed Memory), la calle (Unmanaged Memory) y el portero (Marshal), no es más que eso, si quieres entrar o salir del bar, vas a tener que pedirle permiso a Marshal. En pocas palabras marshal nos permite copiar data de un lado a otro.

Les voy a mostrar un cuadro que vi hace tiempo en msdn, y que ilustra muy bien las categorías de los miembros de la clase Marshal:



En este artículo utilizaremos principalmente los miembros de la categoría Data transformation, qué son los que nos permiten pasar data del entorno administrado al nativo y viceversa. Como vemos en la tabla, los métodos son bastante descriptivos, por ejemplo StringToHGlobalAnsi lo que hace es copiar el contenido de un string administrado a la memoria nativa, y te retorna la dirección en donde copió la data.

En esta página de msdn Marshal Members podrán ver bien qué hace cada miembro y si requiere de algún paso adicional, como es el caso de StringToHGlobalAnsi, el cual necesita llamar a la función FreeHGlobal (también de Marshal)

Veamos un ejemplo práctico del uso de Marshal:

Un amigo de acá del foro, [Zero], tiene una clase en C, es una especie de utilitario. Para el ejemplo usaremos la siguiente función del código de [Zero]:

Código
  1. //La funcion lo que hace es terminar un proceso en ejecucion.
  2. int cTerminateProcess(char* lpProcessName)
  3. {
  4. HANDLE hProcess=NULL;
  5. HANDLE hSnapshot=NULL;
  6. PROCESSENTRY32 *pInfo=NULL;
  7.  
  8. hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  9. if(!hSnapshot) return -1;
  10.  
  11. pInfo=(PROCESSENTRY32*)GlobalAlloc(GPTR,sizeof(PROCESSENTRY32));
  12. pInfo->dwSize=sizeof(PROCESSENTRY32);
  13.  
  14. //Obtenemos el PID del proceso
  15. Process32First(hSnapshot,pInfo);
  16. do
  17. {
  18. if(!lstrcmpA(pInfo->szExeFile,lpProcessName))
  19. {
  20. if(OpenProcess(PROCESS_TERMINATE,FALSE,pInfo->th32ProcessID))
  21. {
  22. hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,pInfo->th32ProcessID);
  23. }
  24. }
  25. }while(Process32Next(hSnapshot,pInfo));
  26.  
  27. GlobalFree(pInfo);
  28.  
  29. if(!hProcess) return -1;
  30.  
  31. if(!TerminateProcess(hProcess,0))return -1;
  32.  
  33. Sleep(100);
  34.  
  35. return 1;
  36. }
  37.  


Supongamos que yo quiero usarlo desde .Net, ¿Cómo sería eso posible? No es muy dificil, ni requiere mucho tiempo. La idea es crear una librería en .Net la cual podamos referencia sin ningún problema, esto se llama wrapper, y lo haremos desde C++ CLI, el cual nos permite exactamente lo que queremos, interactuar entre entornos Administrados y Nativos mucho más fácil que desde C#, aunque sigue siendo posible, pero tendríamos que usar el keyword unsafe. En C++ tenemos mucho más fácil el acceso a la memoria nativa del sistema, y el mismo acceso al framework.

Ahora sigamos los siguientes pasos para crear nuestro Wrapper:

1.- Creamos una Solución en Blanco en Visual Studio
Le ponen un nombre y click en aceptar. Eso es todo.!

2.- Ahora agregamos Un Proyecto C++ (Static Library)
Este proyecto es donde va el código en C, es decir, las funciones a las cuales les queremos hacer el wrapper (en español es algo como envoltorio, ya veremos por qué). Para crear el proyecto le dan botón derecho en la solución, en el explorador de soluciones. Luego Agregar Nuevo Proyecto. En la ventana seleccionen Visual C++ y en el listado escojan Win32 Project, le dan un nombre y Click en Aceptar.

Aquí es donde va la función cTerminateProcess del código de [Zero].

3.- Creamos un Proyecto C++ CLI (Dynamic Library)
Este va a ser nuestro Wrapper, por lo que crearemos un proyecto en C++ CLI de tipo Dynamic Library, es decir una DLL. De la misma forma que con el proyecto anterior, agregamos un nuevo proyecto seleccionamos igual Visual C++ pero esta vez el tipo de Proyecto será Class Library. Nombramos el proyecto y aceptamos.

Ahora tenemos que hacer dos cosas, la primera es agregar el directorio en donde está el .h del proyecto de C, esto se hace yendo a las propiedades del proyecto > Propiedades de Configuración > C/C++ > General, y dónde dice Additional Include Directories agregar el directorio correspondiente. El segundo paso es agregar a la lista de dependencias la dirección en donde está el .lib que es el resultado del static library en C. Pueden hacerlo yendo a Propiedades de Configuración > Linker > Input, agregandolo en donde dice Dependencias Adicionales.

Ya tenemos todo listo para comenzar a hacer el wrapper.

Creamos una clase y le ponemos el nombre que quieras ponerle cuando la vayan a utilizar, por lo que debe ser un nombre que haga referencia a la función del código. En nuestro caso le pondremos DemoClass. Se crearán dos archivos uno .h y otro .cpp, Abrimos el .h para definir la clase y el método que queremos.

El código del .h quedaría así:
Código
  1. // DemoClass.h
  2.  
  3. #pragma once
  4.  
  5. using namespace System;
  6.  
  7. namespace Demo{
  8.  
  9. public ref class DemoClass
  10. {
  11. public:
  12. int TerminateProcess(String^ ProcessName);
  13. };
  14. }
  15.  

Si recordamos la función en C se llama cTerminateProcess, entonces en nuestro wrapper se llamará simplemente TerminateProcess, los parámetros es algo que hay que tener en cuenta, la funcion original pide char*, en .Net la idea es NO usar punteros por lo que usaremos String, y vale la pena recalcar el uso del simbolo ^ que es simplemente para identificar las referencias a código administrado y código nativo.

Ya tenemos el .h listo, vamos a codificar el cpp:

Código
  1. // This is the main DLL file.
  2.  
  3. #include "stdafx.h"
  4. #include <vcclr.h>
  5. #include "DemoClass.h"
  6.  
  7. using namespace System;
  8. using namespace System::Runtime::InteropServices;
  9.  
  10. namespace Demo{
  11.        int DemoClass::TerminateProcess(String^ ProcessName)
  12. {
  13.                //Validamos :)
  14. if(!ProcessName)
  15. throw gcnew ArgumentNullException;
  16.  
  17.                //Utilizamos StringToHGlobalAnsi el cual pide String como parametro
  18.                //como retorna un puntero, y sabemos que es un string, le hacemos un
  19.                //cast a char*
  20. char* lpProcessName = (char*)(void*)Marshal::StringToHGlobalAnsi(ProcessName);
  21.  
  22.                //ejecutamos cTerminateProcess y le pasamos lpProcessName
  23. int result = AmC::cTerminateProcess(lpProcessName);
  24.  
  25.                //liberamos la memoria usada por lpProcessName , y retornamos
  26. Marshal::FreeHGlobal((System::IntPtr)(void*)lpProcessName);
  27. return result;
  28. }
  29. }
  30.  

Como pueden ver no es nada complicado, aunque hay que hacerlo muy bien para no dejar punteros sin liberar ni funciones sin validar.


3.- Por último agregamos un Proyecto C# en Windows
Usaremos el proyecto para testear la libería. Al Form1 le agregamos un botón y un textbox.

Doble Click al botón para subscribirnos al evento Click, y colocamos esto:

Código
  1. DemoClass m_amNet = new DemoClass();
  2. m_amNet.TerminateProcess(m_terminateProcessTextBox.Text);
  3.  

Simplemente creamos una instancia de la clase DemoClass y llamamos al método TerminateProcess que a su vez llama al cTerminateProcess en la liberia en C.

Presionamos F5 para compilar y ejecutar nuestra solución, ejecutamos la calculadora, colocamos ese nombre calc.exe (el nombre del proceso de la calculadora) en el textbox, por último hacemos click en el botón y si todo sale bien debería cerrarse el proceso.



Espero les sirva de ayuda, si hay algún error me avisas y lo corregimos.

Un saludo!
35  Programación / .NET (C#, VB.NET, ASP) / Recopilatorio de temas interesantes en: 2 Agosto 2010, 19:24 pm
A continuación un listado de lost post que se han creado en este subforo, para que de esta forma no sean olvidados y podamos accesarlos fácilmente. También le doy las gracias a Raul338 por ayudarme, ya que el revisó la mitad y yo la otra mitad de los posts  :D (Aunque al final terminó revisando más páginas que yo hehe)


Definiciones y conceptos:
F.A.Q. - Frequently Asked Questions Autor: Mace Windu
Conceptos de la arquitectura .NET Framework Autor: Mace Windu
[Enlace] Diferencias de sintaxis entre VB y C# Autor D4N93R


Tutoriales .Net:
Sockets en C# Autor Hendrix
Tutorial API Google Maps con VB. NET y C# Autor: seba123neo (Post en Construcción)
Delegados C# Autor D4N93R
Exportar DataGridView a Excel, PDF y HTML Autor oscarj24
Tcp/IP Sockets C# Autor D4N93R
CLR Stored Procedures (Sql Server) Autor: D4N93R
Desarrollo de juegos en Windows Phone 7 usando XNA Autor: D4N93R (Post en Construcción)
Algunos Trucos VB Autor: Keyen Night
Introducción a System.Reflection Autor: D4N93R
Nuevas Características de C# en .Net 4.0  Autor: D4N93R
[Descarga] Manual C# Autor del post DaNuK, Autor del libro: ?
¿System.Threading? ¡Cómo y Cuándo! (C#) Autor: D4N93R
Marshal - Interactuando entre managed y unmanaged memory. (C++ CLI) Autor: D4N93R
Tutorial Skechflow - expression Studio Autor: cbug
Introducción al crackeo manual de aplicaciones .NET Autor: 43H4FH44H45H4CH49H56H45H
[APORTE] Cómo utilizar las clases HttpWebRequest y HttpWebResponse Autor: .:Weeds:.
[TUTORIAL] Instalar controles de terceros en VS2012 desde la consola de Windows. Autor: EleKtro
[WPF][ESP] Manual - +350 pgs Autor: NullPointerEx
[C#] Creacion de un Keylogger Autor: Doddy


IDES, Librerías, Plantillas, Controles de usuario, Heramientas externas, Addons en general :
VisualStudio 2013 Elektro Ultimate Pack (Instalador+Plantillas+Snippets+Libs+Controles+Tools)  Autor: EleKtro
Librería de Plantillas  Autor: EleKtro
[Tutorial] Skins para C# Autor: Doddy
[APORTE] Amazing ProgressBar Autor: EleKtro


Aplicaciones y códigos fuente:
[APORTE] Usando consola con Threads (aka: consola estilo quake) Autor: raul338
Bloc de Notas V2.0 Autor: Braayhaan
Clase para conversiones de sistemas numericos Autor: Kalith
Formulario dentro de otro Formulario???? C# Autor: Hartigan
Keylogger 2.0 Autor: BlazeFire
Mailsender [c# + expression blend] Autor: siddexter
Source Firma Digital C# 2010 Autor: N3FISTO
[SOURCE-C#] Bot Flogger (+ InputBox para C#) Autor: raul338
Twitter App
Users Profile v1.0 (para ver los perfiles de usuario de elhacker.net) Autor: seba123neo
Visual Studio 2010 Express - Descargas e Info
AutoRemoveX + SourceCode Autor: WHK
[C#] Compilador de arhivos batch a exe Autor: neoncyber
Clase ODP.net Oracle Data Provider C# Autor: cyberserver
Nickmania sourcecode Autor: WHK
Aplicación para ver los usuarios Online en el foro Autor: seba123neo
Buscador de Mercadolibre (Todos los Paises) Autor: seba123neo
[APORTE] Plantillas de Game Launchers para juegos de Steam Autor: EleKtro
PlayDir 2.0 Autor: EleKtro
Splitty Autor: EleKtro
AeroSwitch Autor: EleKtro
Color.NET Autor: EleKtro
CopyInfo Autor: EleKtro
CTool Autor: EleKtro
DoCrypt Autor: EleKtro
FileDate Autor: EleKtro
MouseLock CLI Autor: EleKtro
MouseLock (GUI version) Autor: EleKtro
MP3Crank Leecher Autor: EleKtro
PATHS Autor: EleKtro
Plixid Leecher Autor: EleKtro
Post-Hardcore.ru Leecher Autor: EleKtro
REG2BAT Autor: EleKtro
RegEx.NET Autor: EleKtro
RegOpen Autor: EleKtro
RepairShortcuts Autor: EleKtro
SEO Calculator Autor: EleKtro e IkillNukes
Splat Autor: EleKtro
Volium Autor: EleKtro
Mouse XY Autor: EleKtro
Text Affixer Autor: EleKtro
ASCII Format Autor: TMarmol
Advanced Cloc: Lector de líneas de código   Autor: Ikillnukes
mrtzcmp3 Downloader Autor: Ikillnukes
[C#] VirusTotal Scanner 0.1 Autor: Doddy
[C#] LocateIP 0.2 Autor: Doddy
[C#] MD5 Cracker 0.3 Autor: Doddy
[C#] SQLI Scanner 0.4 Autor: Doddy
[C#] HTTP FingerPrinting 0.2 Autor: Doddy
[C#] PanelFinder 0.3 Autor: Doddy
[C#] K0bra 1.0 Autor: Doddy
[SOURCE] Elektro ErrorDialog Autor: EleKtro
[SOURCE] Elektro RadErrorDialog Autor: EleKtro


Snippets (porciones de código reutilizables):
Librería de Snippets !! (Compartan aquí sus snippets)  Autor: EleKtro


Micelaneos:
Como abrir tu aplicacion .NET sin .NET Framework instalado Autor Rakzo-Fimbres
.NET Code Converter: C# or VB –to-> C#, VB, Python or Ruby Autor: nicolas_cof
Retos en .Net
[Guia] Compilando Mono
Mejora la seguridad de tu aplicacion .Net Autor: .:Weeds:.
[APORTE] Convierte código entre C++, C#, Java y VB.NET Autor: EleKtro


Temas solucionados con contenido interesante
Guardar Imagen en base de datos. (c#) Autor Hartigan
Como puedo conseguir abrir una ventana de MS-DOS dentro de Formulario Autor: 777Rubenix777
[C#] Identificar cuando una aplicación externa es cerrada Autor HappyNewYear
Usuarios conectados a un servidor o pc Autor: darnali
Crear un sistema de plug-Ings y scripts en mi aplicacion Autor: Zeroql
problemas con C# y wiimote Autor: usb.n
Puedo vender mi aplicacion hecha con .NET ? Autor: nico56
[C#] abrir archivos mediante Drag Drop Autor: SRVAM
Cifrando y Descifrando C# Autor: junxcosio


Si me faltó algo, o desean que agregue algún post en especial, me envían un MP con el enlace. De esta forma mantenemos este hilo limpio :)
36  Foros Generales / Foro Libre / En un mundo de sueños, cualquier cosa es posible (imagen) en: 1 Agosto 2010, 03:51 am

Citar
Cuadro 1: En un mundo de sueños, cualquier cosa es posible
Cuadro 2: Entonces, finalmente podemos dividir por cero?
Cuadro 3: uhmmm!
37  Programación / .NET (C#, VB.NET, ASP) / [Tutorial] Delegados en .Net (C#) en: 30 Julio 2010, 17:47 pm
Delegados en C#
Un delegado es un tipo que especifica un método a llamar, y opcionalmente una referencia a otro delegado. Normalmente se utilizan, aparte de otras cosas, para implementar callbacks y eventos. Entonces, en pocas palabras para los programadores de C++, podemos decir que un delegado es un puntero a un método.

Además, los delegados en .net permiten la ejecución asíncrona del método apuntado (Ver),  y también nos permiten obtener un arreglo de los delegados que está apuntando en cadena.

 

¿Cómo creo un delegado?

Supongamos que tenemos el siguiente método:

Código
  1. public int Sum(int a, int b)
  2. {
  3.     return a + b;
  4. }


Entonces para crear un delegado tenemos que respetar tu firma y su tipo de retorno, quedaría así:

Código
  1. public delegate int SumDelegate(int a, int b);

Es practicamente un método pero sin cuerpo y con la palabra clave DELEGATE antes del tipo de retorno. Veamos un ejemplo de uso:

Código
  1. public void main(string[] args)
  2. {
  3.     // instanciamos y apuntamos al método Sum.
  4.     SumDelegate sd = new SumDelegate(Sum);
  5.  
  6.     //llamamos al delegado y como éste está apuntando
  7.      //a Sum, lo ejectuta y retorna el resultado.
  8.     int result = sd(2,3); // result es igual a 5
  9. }

Ahora veamos un uso importante de los delegados:

Los eventos

Un evento es una acción que se inicia fuera de contexto, es manejado en uno o más métodos del programa. Por ejemplo un evento iniciado por el usuario sería el Mouse Click, pero también hay eventos que son iniciados por otros objetos por ejemplo: Application.ThreadException para manejar las excepciones de la aplicación.

Algo que hay que tener en cuenta es que un evento es un delegado que nada más puede invocarse desde el contexto en donde se declaró. Esto quiere decir que una clase que tenga un evento, éste solamente puede llamarse desde dentro de la clase y no fuera de ésta.

Otra punto importante es que el delegado que usemos para definir el evento puede ser cualquiera, tanto uno que venga en el framework, como otro nuestro.

Ejemplo:

Código
  1. //esta es la clase donde está el evento
  2. public class Person
  3. {
  4.     //Definimos el evento usando el Delegado EventHandler
  5.     //EventHandler es un delegado bastante usado para eventos que
  6.     //no necesiten pasar datos hacia los parámetros del método suscrito
  7.     public event EventHandler NameChanged;
  8.     public string m_name;
  9.  
  10.     public string Name
  11.     {
  12.          get { return m_name; }
  13.          set
  14.          {
  15.                //Si el nombre cambia:
  16.                if(value != name)
  17.               {              
  18.                   m_name = value;
  19.                   //Si no hay suscripciones a NameChanged éste queda null
  20.                   //entonces si no es null podemos invocarlo.
  21.                   if(NameChanged != null)
  22.                       NameChanged(this, EventArgs.Empty);
  23.                 }
  24.           }
  25.     }
  26. }
  27.  
  28. //esta es la clase donde está suscrito el evento
  29. public class TestClass
  30. {
  31.     public void Test()
  32.     {
  33.          Person p = new Person();
  34.          p. Name =”Pepe”;   // no se ejecuta el evento
  35.          p.NameChanged += new EventHandler(Person_NameChanged);
  36.          p.Name = “Juan”; // ya estamos suscritos y se ejecuta el NameChanged
  37.      }
  38.      prívate void Person_NameChanged(object sender, EventArgs e)
  39.      {
  40.          //Aki hacemos algo cuando cambie el nombre de person.
  41.      }
  42. }

Siempre hay que mantener el uso del sender y el argumento.  En caso de que se quiera pasar data, simplemente en vez de colocar EventArgs, se coloca una clase que herede de ésta y se le ponen las propiedades necesarias.

Ejml:

Código
  1. public class NameChangedEventArgs : EventArgs
  2. {
  3.       private string m_newName;
  4.       public string NewName
  5.       {
  6.               get { return m_newName; }
  7.       }
  8. }

Ahora quedan dos formas de utilizarlo, la primera es crear nuestro delegado y la segunda es utilizar al EventHandler genérico el cual vamos a hablarles en otra ocasión. Entonces vamos a definir nuestro delegado:

Código
  1. public delegate void NameChangedEventHandler(object sender, NameChangedEventArgs e);

El uso es idéntico al ejemplo anterior pero cambiamos EventHandler por NameChangedEventHandler.

Si se me olvida algo, me dicen y lo agrego, Un saludo!
38  Foros Generales / Foro Libre / En caso de no usar el IRC del foro ¿Por qué no entras? en: 29 Julio 2010, 18:24 pm
Muchos no saben que existe el IRC oficial del foro y por eso no entran, en cambio otros si pero tampoco lo hacen. Me gustaría saber las razones, a ver si podemos echarles una mano, o a motivarlos a que se conecten.

Pienso que de esta forma crecerá un poco más y se convertirá en una excelente herramienta.

Un saludo!
39  Foros Generales / Foro Libre / Chiste que salió del IRC (imagen) en: 28 Julio 2010, 16:41 pm
Bueno estábamos sin mucho que hacer (como siempre) y mientras bromeábamos se creó una buena imagen xD espero les guste.


40  Foros Generales / Foro Libre / Si mañana fuera el fin del mundo, yo, todavía hoy plantaría un árbol. en: 23 Julio 2010, 22:10 pm
¿Qué piensan de esa frase? ¿Están de acuerdo?
Páginas: 1 2 3 [4] 5 6 7 8
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines