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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: [1]
1  Programación / .NET (C#, VB.NET, ASP) / Introducción a Visual Studio LightSwitch en: 15 Agosto 2011, 06:12 am
Microsoft nuevamente saca un producto para facilitar el desarrollo de aplicaciones de negocios u otros, aunque ya pasó un poco de tiempo, pero no vi algún tema que mencione a VSLS les dejo una introducción de cómo crear aplicaciones que utilicen bases de datos de manera simple y rápida.

Primero descargamos:
http://download.microsoft.com/download/1/6/1/1612F542-752E-46C2-9E53-4E37BD3D1EF5/VSLS2011_ESN.iso

Luego de instalarlo creamos un nuevo proyecto en nuestro lenguaje favorito



Creamos una nueva tabla para la base de datos, que en mi caso utilizaré Nombre, Apellido y Edad, el Id se crea automáticamente.



Como verán se puede personalizar el código de manera simple:



Pero solo utilizaremos el diseñador para crear nuestra aplicación.
Abrimos el explorador de soluciones y agregamos una nueva pantalla, usaremos  Nuevos datos y Búsqueda de datos.





Iniciamos la depuración con F5 y vemos como se organizó las ventanas.
Como la configuración de la solución está en DEBUG podemos personalizar la pantalla en tiempo de ejecución.







Una vez que el proyecto quede organizado y  personalizado cambiamos la configuración de la solución a RELEASE y procedemos a publicarlo especificando las opciones de conexión a la base de datos, como en mi caso probare en mi PC no necesito la opción de crear un script para la instalación.



Para crear el instalador en una aplicación de escritorio hay que tener a mano los instaladores de los requisitos previos o especificar que se descarguen de internet.



En la carpeta RELEASE se crea el instalador y luego de ejecutarlo podemos acceder a nuestra aplicación:



Para comprobar los datos registrados en el servidor:





Cuando publicamos la aplicación para IIS (Web), debemos de activar Internet Information Services, luego ejecutar 
Código
  1. %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe –i
de acuerdo a la versión de Framework.
Y comprobamos en Panel de Control – Herramientas administrativas - Administrador de Internet Information Services (IIS)



Y vemos que nos da la opción de cambiar la versión de Net Framework a la 4.



Lo escrito es una pequeña parte de LightSwitch puesto que pueden personalizarse tanto diseño y código de manera muy simple para crear aplicaciones robustas e incluso para Windows Azure (nube) pero el objetivo de este tema es dar una pequeña introducción para su uso.
Saluos.
2  Programación / Ingeniería Inversa / Operaciones matemáticas básicas en vb6 - keygen DocCF (Software de Gestión) en: 18 Marzo 2011, 09:07 am
Operaciones matemáticas básicas en vb6
keygen DocCF - Software de Gestión Escolar

Materiales:   Olly Parcheado 5
Victima :        DocCF - Software de Gestión Escolar  versión 2.2



Luego de instalar e ingresar al registro del programa colocamos un BP en vbaStrcomp cuando estamos en el form de registro y podemos ver que la comparación se realiza con el resultado de algunas operaciones matemáticas tanto del número que ingresamos como del número generado por el programa  y no con los números mismos.



Puesto que son operaciones matemáticas podemos utilizar vbaR8Str para ver de dónde saca los valores de comparación, traceando un poco se puede ver que obtiene los valores de
Código:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Grupo CF Developer\DocCF
y en mi caso los que nos interesan son los siguientes:
Setting1 = 10838093996047972805767
Setting3 = 10061210012438047703422


Seguimos traceando y vemos que utiliza los dos primeros números de Setting3 para sumarles 3 y luego 1 con FADDP los resultados de cada operación podemos verlos en ST0,ST1,ST2,… en Registers FPU
 


Seguimos traceando y vemos que la suma de los 2 primeros números de setting3 (10) + 3 + 1 = 14 es utilizado para obtener la siguiente subcadena para leer 3 caracteres a partir de ese número que en mi caso seria 1006121001243 804 7703422 el cual se resta de 999



Código:
FSUBP
ST=804.00000000000028730
ST(1)=999.00000000000057460
--------------------------
195 (Resultado)
y el resultado es dividido entre 3:
Código:
FDIVP
195 / 3
---------
65       // resulta a primera parte de la cadena de comparación

Bueno ya no utilizare imágenes, solo mostrare las operaciones que se realiza en la cadena de setting3.
Luego se suma con FADDP
Código:
4 + 13
-----
17
el cual es utilizado para obtener la siguiente subcadena 1006121001243804 770 3422 luego se multiplica
Código:
FUMLP
3*3 (el multiplicador equivale al número de caracteres que tiene la subcadena, en otros casos puede ser 4)
-----
9
se resta 9 de la subcadena previamente convertida a entero:
Código:
FSUB RESTA
ST=9.0000000000000028730
ST(1)=770.00000000000028730
------------------------
761     //este número luego de convertirse a string se concatena a la primera parte de la cadena de comparación y quedaría  65761
Luego se realiza la suma
Código:
FADDP
13+4
----
17
3+17=20    //que se usa para obtener la ultima subcadena.
1006121001243804770 3422
Luego de pasarlo a entero este se realiza la resta
Código:
FSUBP
3422-5997
----------
2575   y el resultado se divide
FDIV DIVIDE
2575 / 5
--------
515     //obtenemos la ultima parte de la cadena de comparación 65761515
Ya tenemos las operaciones que se realiza a partir de setting3 y que forman la cadena de comparación.

Analizando Setting1
Luego de tracear un poco vemos que ingresa el valor de setting1 que es el número que necesitamos para validar el software en mi caso es Setting1 = 10838093996047972805767 utiliza los 2 primeros números, los pasa a entero, le suma 3 y 1 = 14
1083809399604 797 2805767
Código:
810-797  = 13   /7 = 1,85714285714286  //Esta es la primera parte de la cadena de comparación
Luego de unas sumas se obtiene la siguiente subcadena  1083809399604797 2805 767 se multiplica:
Código:
FUMLP  (4 equivale al número de caracteres que se tomo de la cadena original)
4*9=36    luego se resta:
FSUBP
2805-36 = 2769    //La segunda parte que se concatena a la cadena de comparación.
Luego de unas sumas se obtiene la última subcadena  10838093996047972805 767 la cual se resta:
Código:
FSUBP
4005-767 = 3238     /3 = 1079,33333333333

Y queda UNICODE "1,8571428571428627691079,33333333333" la cual es comparada como vimos al comienzo:
 


Ya sabemos cómo realiza las operaciones ahora solo queda revertirlas, simplemente dividimos la cadena de comparación que en mi caso es 65761515 tomo el primer número 6 5761515 y lo multiplico por 7 y lo resto a 810 con eso ya tengo para sustituir:
Código:
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:               1083809399604 768 2805767
Tomo los siguientes 4 números (6 5761 515)  y les sumo 36 quedara en 5797 y lo sustituyo
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:               1083809399604768 5797 767
Tomo los últimos 3 números (65761 515) multiplico por 3 y lo resto de 4005 dando como resultado 2460 cambiamos los últimos valores:
Valor que escribió el programa:  10838093996047972805767
Valor que se modificara:  10838093996047685797 2460
Y ya tenemos nuestra serie armada 108380939960476857972460 lista para probar, así que ya podemos realizar el keygen.





Hay una variable más dependiente de la fecha que hace variar el numero de caracteres que lee para la multiplicación y resta de la 2da parte de las operaciones, como este tutorial está hecho para los que les interesa la Ingeniería Inversa, no lo especifico porque al tracear verán a que me refiero y así evitamos que algunas personas obtengan el serial valido solo copiando el tutorial sin aprender nada.

Para probar el string (en mi caso 65761515) que el programa genera para la comparación hice un pequeño programa en c++ para demostrar  el análisis hecho.

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <sstream>
  4. #include <windows.h>
  5. int iValor(std::string cad);
  6. std::string sValor(int num);
  7. std::string leerValorREG_SZ(HKEY Registry, const std::string &sClave, const std::string &sValor);
  8. char *cRetorno(const std::string &sSource);
  9. int main()
  10. {
  11. std::string sClaveReg ="Software\\VB and VBA Program Settings\\Grupo CF Developer\\DocCF";
  12. std::string sValorReg ="Setting3";
  13. std::string sInfoRegistro = leerValorREG_SZ(HKEY_CURRENT_USER,sClaveReg,sValorReg);
  14. std::string sResult = "";
  15. std::string sNumeroBuscado = "";
  16. // Asignamos a un entero los primeros 2 numeros
  17. int iInicio = iValor(sInfoRegistro.substr(0,2).c_str())+3;
  18. int iResult = 0;
  19. //Asignamos a un string 3 numeros a partir de iInicio y convertimos en un entero
  20. sResult = sInfoRegistro.substr(iInicio,3);
  21. iResult = (999 - iValor(sResult))/3;
  22.  
  23. //añadimos el valor de la 1ra operacion a el string que contendra el numero buscado
  24. sNumeroBuscado.append(sValor(iResult));
  25.  
  26. //procesamos la siguiente subcadena, asignamos a un string, luego a un entero y realizamos la 2da operacion
  27. //añadimos el valor de la 2da operacion a el string que contendra el numero buscado
  28. iInicio = iInicio + 3;
  29. sResult = sInfoRegistro.substr(iInicio,3);
  30. iResult = iValor(sResult)-9;
  31. sNumeroBuscado.append(sValor(iResult));
  32.  
  33. //procesamos la ultima subcadena, asignamos a un string, luego a un entero y realizamos la 3era operacion
  34. //añadimos el valor de la 3ra operacion a el string que contendra el numero buscado
  35. iInicio = iInicio + 3;
  36. sResult = sInfoRegistro.substr(iInicio,4);
  37. iResult = (5997 - iValor(sResult))/5;
  38. sNumeroBuscado.append(sValor(iResult));
  39.  
  40. //Imprimimos el numero buscado el que debera compararse con el resultado del setting1
  41. std::cout << sNumeroBuscado << std::endl;
  42. std::cin.get();
  43. return EXIT_SUCCESS;
  44. }
  45. int iValor(std::string cad)
  46. {
  47. int temp = atoi(cad.c_str());
  48. return temp;
  49. }
  50. std::string sValor(int num)
  51. {
  52. std::string sTemp;
  53. std::stringstream ssTemp;
  54. ssTemp << num;
  55. sTemp = ssTemp.str();
  56. return sTemp;
  57. }
  58. std::string leerValorREG_SZ(HKEY Registry, const std::string &sClave, const std::string &sValor)
  59. {
  60. unsigned char infoValor [1024];
  61. char infocadena [1024];
  62. std::string sClaveLeida="";
  63. HKEY hKey;
  64. LONG lStatus;
  65.    DWORD dwType;
  66.    DWORD dwSize;
  67.    dwType=REG_SZ;
  68.    dwSize=1023;
  69. int i=0;
  70. lStatus = RegOpenKeyEx(Registry,cRetorno(sClave),0,KEY_READ,&hKey);
  71.    if (lStatus == ERROR_SUCCESS)
  72.    {
  73.         lStatus = RegQueryValueEx(hKey,cRetorno(sValor), 0,&dwType, (LPBYTE)&infoValor, &dwSize);
  74.         if (lStatus == ERROR_SUCCESS)
  75.         {  
  76. for(i=0;infoValor[i]!=0 && infoValor[i]!=204;i++)
  77. {
  78.  infocadena[i]=(char)infoValor[i];
  79. }
  80. infocadena [i]='\0';
  81. sClaveLeida.assign(infocadena);
  82. RegCloseKey(hKey);
  83. return sClaveLeida;
  84.         }  
  85.      }
  86.     RegCloseKey(hKey);
  87.     return "No se puede obtener el valor";
  88. }
  89. char *cRetorno(const std::string &sSource)
  90. {
  91. int iTotal = strlen(sSource.c_str());
  92. char *temp = new char[iTotal+1];
  93. strncpy_s(temp,iTotal+1, sSource.c_str(),iTotal+1);
  94. temp[iTotal]='\0';
  95. return temp;
  96. }

Para que funcione en las propiedades del proyecto debe cambiarse Juego de caracteres = Utilizar juego de caracteres multibyte.
Y bueno ya es tarde por aqui, asi que si se me paso algo o si hay alguna duda favor avisar  ;D
Saluos  :P

PD: Favor de no enviarme pedidos del Keygen por MP o en este tema  :-\ puesto que lo visto ahora es solo de caracter educativo para los que practican la Ingeneria Inversa y no para personas particulares que buscan activar este programa  :-X .
3  Programación / Programación C/C++ / MySql Browser C++ y Qt en: 9 Marzo 2011, 07:29 am
Bueno por si a alguien le sirve dejo el source de un programita que hice para navegar en las bases de datos de algun servidor con MySql, puesto que ya existe mas de uno para windows, pero no encontre uno sencillo para Linux entonces me decidi a crearlo, mas que todo su uso esta destinado cuando se obtiene algun usuario y password para una BD o si se logra crear alguno por inyeccion SQL.
Todavia no estan implementados los threads para su uso, esto porque al menos en slackware no se nota el proceso de conexion y listado, pero en Windows si se nota un poco,

El code esta un poco desordenado y falta pulir algunas cosas, mas que todo respecto a las clases que utiliza, pero lo dejo por si alguien quiere mejorarlo o modificarlo.

Para windows se necesita compilar el plugin de mysql para que cargue el driver de conexion, el modo de hacerlo se lo encuentra con google.

Enlace de decarga del proyecto:
http://www.4shared.com/file/MxfRUC9d/MySql2tar.html

Unas capturas:





Saluos.
4  Programación / Ingeniería Inversa / Crackeando Eyecopia 2.0.7 - 1.4.6.0 en: 13 Febrero 2011, 10:58 am
Un amigo me mostro el trial de Eyecopia 2.0.7 que descargo en estos dias y queria activarlo, asi que le di una mano y les muestro como lo hice.

Herramientas:
- ILDASM
- Simple Assembly Explorer

Victima: Eyecopia v 2.0.7 - v 1.4.6.0 (Video Monitoring Software)

Al abrir el soft victima vemos los forms de registro y notificación de trial:




Ambos tienen "Register" como texto, asi que utilizaremos esa palabra para buscar la funcion de registro.

Primero vemos que esta programado en .NET usando PEiD-0.95, luego comprobamos con ILDASM que no tiene protección alguna. Ejecutamos el Simple Assembly Explorer y abrimos el ejecutable:



No hay código que nos interese, asi que buscamos las referencias que tiene:



Vemos Enjoin.common y Eyecopia.core, para evitar estar buscando uno a uno el codigo en Simple Assembly Explorer, desensamblamos directamente cada .dll
y abrimos el archivo .il resultante con el block de notas u otro editor de texto, para no perder el tiempo podemos crear un .bat con el siguiente code:

Código
  1. @echo off
  2. cd "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin"
  3. ildasm.exe /source "C:\Program Files (x86)\Eyecopia\Eyecopia.Core.dll" /output:"C:\Users\Kode\Desktop\crack\Eyecopia.Core.il"

Asi desensamblamos en este ejemplo a Eyecopia.Core.dll y direccionamos el archivo de salida al escritorio en una carpeta llamada "crack", como estoy Win7 64 bits, no use variables de entorno %PROGRAMFILES% puesto que necesito trabajar con las dos carpetas de archivos de programa, en otros win es mejor usar las variables de entorno para hacer portable el code del .bat.

Ya tenemos el archivo .il, abierto con el notepad asi que probamos buscar una palabra como "register" puesto que es el texto que contiene el boton de registro, analizando un poco vemos que existe un metodo get_Isregistered() que utiliza los
valores de retorno de get_LicensedDllExists() y de IsRegistered(), vemos que ambas se encuentran en la ruta Enjoin.Eyecopia.CameraManager:



Asi que volvemos al Simple Assembly Explorer y buscamos estas funciones, una vez que las encontramos vemos que se deben cumplir ambos valores de retorno para que pase como Registrado:




Asi que cambiamos directamente toda la función por una que siempre devuelva true, utilizamos el siguiente code:

Código
  1. IL_0000:  nop
  2. IL_0001:  ldc.i4.1
  3. IL_0002:  stloc.0
  4. IL_0003:  br.s       IL_0005
  5. IL_0005:  ldloc.0
  6. IL_0006:  ret

Vamos borrando y reemplazando cada linea hasta que nuestra funcion quede completa y funcional:



Luego pulsamos el boton Save para guardar los cambios, en mi caso con el Win que uso y el UAC activado, y puesto que no inicie Simple Assembly Explorer como administrador no me permite reemplazar la dll original, asi que lo guardo en otra ruta y luego la reemplazo manualmente.



Con eso basta para que las versiones de Eyecopia 2.0.7 y 1.4.6.0 queden activadas, no se puede usar la misma dll (Eyecopia.core) para ambas versiones, hay que modificar la dll de la version que vayamos a utilizar.



Ahora vemos que ya no nos sale el letrero de activación, ademas de que ya no nos muestra el boton de "registro!", asi que vamos al boton About y vemos que los datos estan como Unregistered:



Asi que corregimos ese detalle usando un archivo .reg, con el siguiente code:

En caso de WinXP

Código:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Enjoin\Eyecopia\1.0\Registration]
"Full Name"="43H4FH44H45H4CH49H56H45H"
"Email Address"="micuenta@elhacker.net"
"License Key"="Mi licencia propia :)"

para Win7 64 bits

Código:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Enjoin\Eyecopia\1.0\Registration]
"Full Name"="43H4FH44H45H4CH49H56H45H"
"Email Address"="micuenta@elhacker.net"
"License Key"="Mi licencia propia :)"

y con eso ya tenemos nuestros datos guardados en este software:



Usando este método tb se puede cambiar completamente el idioma editando los strings que hay en esta .dll y otros detalles como bordes, colores, fuente y más cosas...

Y asi termino mi pequeño tutorial  :P

Saluos.
5  Programación / .NET (C#, VB.NET, ASP) / Introducción al crackeo manual de aplicaciones .NET en: 7 Septiembre 2010, 08:48 am
Puesto que hasta ahora no vi este tema en el foro (y si es que se hizo no lo vi), mostrare a continuación como modificar prácticamente todo lo que se nos antoje de una aplicación .NET.

En el siguiente ejemplo luego de crear una aplicación .NET



con el sgte code:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Management;
  9.  
  10. namespace Crack_Me
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.  
  19.        private void button1_Click(object sender, EventArgs e)
  20.        {
  21.            if (textBox1.Text.ToUpper() == "KODELIVE") MessageBox.Show("Clave Correcta", "Clave Correcta", MessageBoxButtons.OK, MessageBoxIcon.Information);
  22.            else MessageBox.Show("Clave Incorrecta", "Vuelva a Intentarlo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  23.        }
  24.  
  25.        private void button2_Click(object sender, EventArgs e)
  26.        {
  27.            using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Processor"))
  28.            {
  29.                using (ManagementObjectCollection manColl = searcher.Get())
  30.                {
  31.                    string sProcesador = "";
  32.                    foreach (ManagementObject obj in manColl)
  33.                    {
  34.                        sProcesador = (string)obj["ProcessorID"];
  35.                    }
  36.                    if (textBox2.Text.Trim() == psMD5(sProcesador.Trim() + "xComplicar"))
  37.                    {
  38.                        Form2 f2 = new Form2();
  39.                        f2.ShowDialog();
  40.                    }
  41.                    else MessageBox.Show("Clave Incorrecta", "Vuelva a Intentarlo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  42.  
  43.                }                
  44.            }
  45.        }
  46.        private string psMD5(string sProc)
  47.        {
  48.            System.Security.Cryptography.MD5CryptoServiceProvider cryMD5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
  49.            byte[] bProc = System.Text.Encoding.ASCII.GetBytes(sProc);
  50.            bProc = cryMD5.ComputeHash(bProc);
  51.            string sMD5 = "";
  52.            for (int i = 0; i < bProc.Length; i++)
  53.                sMD5 += bProc[i].ToString("x4").ToLower();
  54.            return sMD5;
  55.        }
  56.  
  57.        private void Form1_Load(object sender, EventArgs e)
  58.        {
  59.            this.Icon = Properties.Resources.rIcono;
  60.        }
  61.  
  62.    }
  63. }
  64.  

La cual en el button1 compara una cadena con el contenido del textbox1 para indicar si la clave es correcta o no.
En el button2 obtenemos el ID del procesador y ciframos utilizando  MD5CryptoServiceProvider, luego comparamos el contenido del textbox2 con el resultado del cifrado si son iguales abrirá el form2 caso contrario mostrará un mensaje de error.

Ahora necesitamos las siguientes herramientas:

ilasm.exe
http://msdn.microsoft.com/en-us/library/496e4ekx%28VS.80%29.aspx

ildasm.exe
http://msdn.microsoft.com/es-es/library/f7dy01k1%28VS.80%29.aspx

para facilitarnos las cosas creamos un par de archivos .bat (las rutas están de acuerdo a win XP probar modificaciones en Win7 o similar) con el siguiente contenido:

Desensamblador.bat
Código
  1. @echo off
  2. cd "%PROGRAMFILES%\Microsoft Visual Studio 8\SDK\v2.0\Bin\"
  3. ildasm.exe /source "%HOMEPATH%\Escritorio\Crack Me.exe" /output:"%HOMEPATH%\Escritorio\prueba\Crack Me.il"
  4. ildasm.exe /source "%HOMEPATH%\Escritorio\Crack Me.exe"

Utilizando ildasm.exe desensamblamos el Crack Me.exe (ubicado en el escritorio) direccionado a una carpeta en el escritorio con el nombre "prueba", luego abrimos el Crack Me.exe con ildasm.exe para ver su estructura.



Haciendo doble click sobre el button1_Click podemos ver las cadenas que indican cuando tiene la clave correcta y cuando no la tiene.



Antes de ellas podemos ver la comparación que realiza para indicar si es la clave correcta, tb podemos ver la cadena que compara en este caso "KODELIVE".
Entramos en la carpeta prueba y abrimos con el block de notas "Crack Me.il" (nombre que pusimos en el Desensamblador.bat como archivo de salida) para facilitar las cosas copiamos la cadena "KODELIVE" o "Clave Correcta" o "bool [mscorlib]System.String::op_Equality(string" para utilizarla en el buscador del notepad (Ctrl + B) y modificamos las líneas que queramos.

En la línea:
Código
  1. IL_0010:  ldstr      "KODELIVE"

la cambiamos por:

Código
  1. IL_0010:  ldstr      "CRACKEADO"

así el nuevo password que compara será "CRACKEADO", ya no será "KODELIVE".

Si queremos que acepte cualquier password, en la línea:

Código
  1. IL_0015:  call       bool [mscorlib]System.String::op_Equality(string,

cambiamos a:

Código
  1. IL_0015:  call       bool [mscorlib]System.String::op_Inequality(string,

así cualquier contenido que tenga o no tenga el textbox1 nos dará siempre "Clave Correcta" excepto si es la clave que anteriormente era correcta ("KODELIVE" o "CRACKEADO") es decir en lugar de comparar si son iguales compara si son diferentes.



Ahora necesitamos guardar los cambios hechos en "Crack Me.il" en un nuevo ejecutable, para ello usamos:

Ensamblador.bat
Código
  1. @echo off
  2. cd %windir%\Microsoft.NET\Framework\v2.0.50727\
  3. ilasm.exe /exe "%HOMEPATH%\Escritorio\prueba\Crack Me.il"

Ahora obtenemos un nuevo ejecutable con las modificaciones hechas que se guarda en la carpeta prueba con el nombre Crack Me.exe.



Ahora veamos la segunda parte (button2), la cual compara el ID del procesador cifrado con MD5 con el contenido del textbox2, borramos el contenido de la carpeta prueba (en el escritorio) y repetimos los pasos con el Desensamblador.bat, en este caso hacemos doble click en button2.



Localizamos la comparación en el ildasm.exe



Y luego la buscamos en "Crack Me.il", cambiamos la linea:

Código
  1. IL_007d:  call       bool [mscorlib]System.String::op_Equality(string,

por:

Código
  1. IL_007d:  call       bool [mscorlib]System.String::op_Inequality(string,

y el resultado es el mismo que en el button1, volvemos a ensamblarlo con Ensamblador.bat y obtenemos el nuevo ejecutable modificado (en la carpeta prueba).

Ahora ambos botones funcionan con o sin password que no sea el original.
Si necesitamos saber cómo se genera el password o la clave basta con ver las líneas antes del mensaje de "Clave incorrecta" y podemos realizar un pequeño keygen para la aplicación "victima".

Ahora supongamos que el primer formulario solo es de validación para luego entrar al 2do, podemos hacer que entre directamente al 2do formulario saltándonos el primero definitivamente, del sgte modo:

Volvemos a utilizar Desensamblador.bat y localizamos:



es aquí donde se define que formulario carga al inicio (Program.cs) localizamos esta línea:

Código
  1. IL_000b:  newobj     instance void Crack_Me.Form1::.ctor()

y luego la buscamos en "Crack Me.il" para reemplazarla con:

Código
  1. IL_000b:  newobj     instance void Crack_Me.Form2::.ctor()

Utilizamos nuevamente Ensamblador.bat y el resultado obvio es que carga directamente el formulario2 (Form2) y ya no carga el form1 para la validación del password.

Los nombres de Form1, Form2 obviamente cambian según la aplicación que abramos, tan solo es buscar la organización, nombres y métodos que utiliza.

El cambiar algunos de los recursos que utiliza puede hacerse modificando el *.res de la aplicación.

Asi nos evitamos estar buscando cracks o adquiriendo aplicaciones como Dis# que viendo  cómo funciona supongo que debe basarse en estas 2 herramientas.

Obtenemos un mayor aprendizaje de la plataforma .NET y mejoras en cuanto al nivel de protección.

Quería mostrar esto puesto que lo utilicé para obtener el algoritmo de validación para facturas de cierto país, aunque el mismo utilizaba Salamander .NET obfuscator no fue difícil obtener dicho algoritmo y ...

Bueno, lo que muestro es la parte sencilla, la parte interesante es automatizar todo este trabajo para modificar triales y demás basados en .NET en cuestión de segundos (eso porque ya tengo comprador para dicha aplicación), pero comparto el inicio del proyecto por si alguien quiere realizarlo por su cuenta.

Adjunto el proyecto y los archivos de ejemplo (descomprimir en el escritorio para un funcionamiento directo).

Descarga:
http://www.4shared.com/file/dHWAGETI/CrackNET.html
6  Programación / .NET (C#, VB.NET, ASP) / Crear Ejecutables y Modificar Variables en C#.NET en: 8 Marzo 2010, 07:14 am
Primero necesitamos tener un ejecutable creado, en este caso para el ejemplo usare uno  hecho en ASM y ensamblado con MASM32

Código
  1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4. Ventana proto :DWORD,:DWORD,:DWORD,:DWORD
  5. include \masm32\include\windows.inc
  6. include \masm32\include\user32.inc
  7. include \masm32\include\kernel32.inc
  8. includelib \masm32\lib\user32.lib
  9. includelib \masm32\lib\kernel32.lib
  10.  
  11. .data
  12. ClassName db "cVentana",0
  13. ;Declaramos la variable a cambiar
  14. Variable db "esperando",0
  15. cTexto db "edit",0
  16.  
  17. .data?
  18. hInstance HINSTANCE ?
  19. CommandLine LPSTR ?
  20. hwndEdit HWND ?
  21.  
  22. .const
  23. IDedit equ 1
  24.  
  25. .code
  26. start:
  27. invoke GetModuleHandle, NULL
  28.        mov    hInstance,eax
  29. invoke GetCommandLine
  30. invoke Ventana, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
  31. invoke ExitProcess,eax
  32. Ventana proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
  33. LOCAL wc:WNDCLASSEX
  34. LOCAL msg:MSG
  35. LOCAL hwnd:HWND
  36. mov   wc.cbSize,SIZEOF WNDCLASSEX
  37. mov   wc.style, CS_HREDRAW or CS_VREDRAW
  38. mov   wc.lpfnWndProc, OFFSET WndProc
  39. mov   wc.cbClsExtra,NULL
  40. mov   wc.cbWndExtra,NULL
  41. push  hInst
  42. pop   wc.hInstance
  43. mov   wc.hbrBackground,COLOR_BTNFACE+1
  44. mov   wc.lpszClassName,OFFSET ClassName
  45. invoke LoadIcon,NULL,IDI_QUESTION
  46. mov   wc.hIcon,eax
  47. mov   wc.hIconSm,eax
  48. invoke LoadCursor,NULL,IDC_HELP
  49. mov   wc.hCursor,eax
  50. invoke RegisterClassEx, addr wc
  51. INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR Variable,\
  52.           WS_SYSMENU,600,\
  53.           600,150,100,NULL,NULL,\
  54.           hInst,NULL
  55. mov   hwnd,eax
  56. INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
  57. INVOKE UpdateWindow, hwnd
  58. .WHILE TRUE
  59.                INVOKE GetMessage, ADDR msg,NULL,0,0
  60.                .BREAK .IF (!eax)
  61.                INVOKE TranslateMessage, ADDR msg
  62.                INVOKE DispatchMessage, ADDR msg
  63. .ENDW
  64. mov     eax,msg.wParam
  65. ret
  66. Ventana endp
  67. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  68. .IF uMsg==WM_DESTROY
  69. invoke PostQuitMessage,NULL
  70. .ELSEIF uMsg==WM_CREATE
  71. invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR cTexto,NULL,\
  72.                        WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or\
  73.                        ES_AUTOHSCROLL,\
  74.                        20,15,100,25,hWnd,IDedit,hInstance,NULL
  75. mov  hwndEdit,eax
  76. invoke SetWindowText,hwndEdit,ADDR Variable
  77. invoke SetFocus, hwndEdit
  78. .ELSE
  79. invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  80. ret
  81. .ENDIF
  82. xor    eax,eax
  83. ret
  84. WndProc endp
  85. end start
  86.  

"Variable" será sustituida en el programa hecho en c#.NET
Ahora necesitamos saber en que posición se encuentra la variable en el ejecutable para ello utilizamos un editor hexadecimal:


y vemos que está entre 2057 y 2065.

Realizamos el programa:


Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO;
  9.  
  10. namespace recursos
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.        private void butExtraer_Click(object sender, EventArgs e)
  19.        {
  20.            try
  21.            {
  22.                SFguardar.Filter = "Archivo Ejecutables|*.exe";
  23.                SFguardar.Title = "Guardar archivo ejecutable nuevo";
  24.                SFguardar.ShowDialog();
  25.                if (SFguardar.FileName != "")
  26.                {
  27.                    int contador = 0;
  28.                    int iLetra = 0;
  29.                    int iTexto = 0;
  30.                    FileStream stream = new FileStream(SFguardar.FileName, FileMode.Create, FileAccess.Write);
  31.                    BinaryWriter writer = new BinaryWriter(stream);
  32.                    iTexto = txtVariable.Text.Length;
  33.                    foreach (int i in Properties.Resources.prueba)
  34.                    {
  35.                        if (contador > 2056 && contador < 2066)
  36.                        {
  37.                            if (iLetra < iTexto)
  38.                            {
  39.                                writer.Write(Convert.ToByte(txtVariable.Text[iLetra]));
  40.                                iLetra++;
  41.                            }
  42.                            else writer.Write(Convert.ToByte(0));
  43.                        }
  44.                        else writer.Write(Convert.ToByte(i));
  45.                        contador++;
  46.                    }
  47.                    writer.Close();
  48.                    stream.Close();
  49.                }
  50.            }
  51.            catch (Exception er)
  52.            {
  53.                MessageBox.Show(er.Message);
  54.            }
  55.        }
  56.  
  57.        private void txtVariable_TextChanged(object sender, EventArgs e)
  58.        {
  59.            butExtraer.Enabled = true;
  60.        }
  61.        private void txtVariable_KeyPress(object sender, KeyPressEventArgs e)
  62.        {
  63.            if (Convert.ToInt32(e.KeyChar) == 13) butExtraer_Click(null, null);
  64.        }
  65.  
  66.    }
  67. }
  68.  

El código se encargará de leer uno a uno los elementos del array representado por el archivo de recursos que en este caso  es el ejecutable mencionado, al llegar a la posición 2057 empezara a escribir el contenido del textbox en lugar de los datos originales y una vez que termina continua escribiendo el resto del contenido original, como resultado tenemos:


Así tb, si no utilizamos todos los caracteres que tiene la variable el programa los reemplazará con valores nulos así podremos reemplazar la variable total o parcialmente.

Tb puede hacerse de otro modo, si hacemos un programa que lea el contenido de un  ejecutable y lo escriba en un *.txt, este lo utilizaremos para declarar un array y seguiremos los mismos pasos que utilizamos cuando era un archivo de recurso.

Este seria el resultado guardado en un *.txt de prueba.exe, el cual utilizaremos para declarar un array para escribir el ejecutable con la variable modificada.

Código:
77,90,144,0,3,0,0,0,4,0,0,0,255,255,0,0,184,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0,0,14,31,186,14,0,180,9,205,33,184,1,76,205,33,84,104,105,115,32,112,114,111,103,114,97,109,32,99,97,110,110,111,116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32,109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0,56,25,93,41,124,120,51,122,124,120,51,122,124,120,51,122,242,103,32,122,105,120,51,122,128,88,33,122,125,120,51,122,82,105,99,104,124,120,51,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,69,0,0,76,1,3,0,156,54,147,75,0,0,0,0,0,0,0,0,224,0,15,1,11,1,5,12,0,2,0,0,0,4,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,32,0,0,0,0,64,0,0,16,0,0,0,2,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,64,0,0,0,4,0,0,0,0,0,0,2,0,0,0,0,0,16,0,0,16,0,0,0,0,16,0,0,16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,72,32,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,116,101,120,116,0,0,0,234,1,0,0,0,16,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,96,46,114,100,97,116,97,0,0,240,1,0,0,0,32,0,0,0,2,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,64,46,100,97,116,97,0,0,0,36,0,0,0,0,48,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,0,232,221,1,0,0,163,24,48,64,0,232,205,1,0,0,106,10,255,53,28,48,64,0,106,0,255,53,24,48,64,0,232,6,0,0,0,80,232,172,1,0,0,85,139,236,131,196,176,199,69,208,48,0,0,0,199,69,212,3,0,0,0,199,69,216,9,17,64,0,199,69,220,0,0,0,0,199,69,224,0,0,0,0,255,117,8,143,69,228,199,69,240,16,0,0,0,199,69,248,0,48,64,0,104,2,127,0,0,106,0,232,51,1,0,0,137,69,232,137,69,252,104,139,127,0,0,106,0,232,27,1,0,0,137,69,236,141,69,208,80,232,33,1,0,0,106,0,255,117,8,106,0,106,0,106,100,104,150,0,0,0,104,88,2,0,0,104,88,2,0,0,104,0,0,8,0,104,9,48,64,0,104,0,48,64,0,104,0,2,0,0,232,196,0,0,0,137,69,176,106,1,255,117,176,232,243,0,0,0,255,117,176,232,247,0,0,0,106,0,106,0,106,0,141,69,180,80,232,178,0,0,0,11,192,116,20,141,69,180,80,232,213,0,0,0,141,69,180,80,232,150,0,0,0,235,217,139,69,188,201,194,16,0,85,139,236,131,125,12,2,117,9,106,0,232,149,0,0,0,235,104,131,125,12,1,117,77,106,0,255,53,24,48,64,0,106,1,255,117,8,106,25,106,100,106,15,106,20,104,128,0,128,80,106,0,104,19,48,64,0,104,0,2,0,0,232,62,0,0,0,163,32,48,64,0,104,9,48,64,0,255,53,32,48,64,0,232,95,0,0,0,255,53,32,48,64,0,232,78,0,0,0,235,21,255,117,20,255,117,16,255,117,12,255,117,8,232,17,0,0,0,201,194,16,0,51,192,201,194,16,0,204,255,37,64,32,64,0,255,37,56,32,64,0,255,37,52,32,64,0,255,37,32,32,64,0,255,37,16,32,64,0,255,37,20,32,64,0,255,37,24,32,64,0,255,37,28,32,64,0,255,37,60,32,64,0,255,37,36,32,64,0,255,37,40,32,64,0,255,37,44,32,64,0,255,37,48,32,64,0,255,37,4,32,64,0,255,37,0,32,64,0,255,37,8,32,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,33,0,0,174,33,0,0,206,33,0,0,0,0,0,0,18,33,0,0,32,33,0,0,44,33,0,0,62,33,0,0,4,33,0,0,94,33,0,0,112,33,0,0,126,33,0,0,146,33,0,0,240,32,0,0,222,32,0,0,82,33,0,0,204,32,0,0,0,0,0,0,148,32,0,0,0,0,0,0,0,0,0,0,162,33,0,0,16,32,0,0,132,32,0,0,0,0,0,0,0,0,0,0,226,33,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,188,33,0,0,174,33,0,0,206,33,0,0,0,0,0,0,18,33,0,0,32,33,0,0,44,33,0,0,62,33,0,0,4,33,0,0,94,33,0,0,112,33,0,0,126,33,0,0,146,33,0,0,240,32,0,0,222,32,0,0,82,33,0,0,204,32,0,0,0,0,0,0,86,0,67,114,101,97,116,101,87,105,110,100,111,119,69,120,65,0,131,0,68,101,102,87,105,110,100,111,119,80,114,111,99,65,0,0,147,0,68,105,115,112,97,116,99,104,77,101,115,115,97,103,101,65,0,0,34,1,71,101,116,77,101,115,115,97,103,101,65,0,148,1,76,111,97,100,67,117,114,115,111,114,65,0,152,1,76,111,97,100,73,99,111,110,65,0,213,1,80,111,115,116,81,117,105,116,77,101,115,115,97,103,101,0,225,1,82,101,103,105,115,116,101,114,67,108,97,115,115,69,120,65,0,0,22,2,83,101,116,70,111,99,117,115,0,0,61,2,83,101,116,87,105,110,100,111,119,84,101,120,116,65,0,0,72,2,83,104,111,119,87,105,110,100,111,119,0,0,94,2,84,114,97,110,115,108,97,116,101,77,101,115,115,97,103,101,0,0,106,2,85,112,100,97,116,101,87,105,110,100,111,119,0,0,117,115,101,114,51,50,46,100,108,108,0,0,155,0,69,120,105,116,80,114,111,99,101,115,115,0,230,0,71,101,116,67,111,109,109,97,110,100,76,105,110,101,65,0,52,1,71,101,116,77,111,100,117,108,101,72,97,110,100,108,101,65,0,0,107,101,114,110,101,108,51,50,46,100,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,86,101,110,116,97,110,97,0,101,115,112,101,114,97,110,100,111,0,101,100,105,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

Resultado utilizado en el programa:

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.IO;
  9.  
  10. namespace leerExe
  11. {
  12.    public partial class Form1 : Form
  13.    {
  14.        public Form1()
  15.        {
  16.            InitializeComponent();
  17.        }
  18.        private void butLeer_Click(object sender, EventArgs e)
  19.        {
  20.            FDabrirArchivo.Filter = "Archivo ejecutable|*.exe";
  21.            FDabrirArchivo.Title = "Abrir archivo ejecutable";
  22.  
  23.            if (FDabrirArchivo.ShowDialog() == DialogResult.OK)
  24.            {
  25.                Array bArchivo = File.ReadAllBytes(FDabrirArchivo.FileName);
  26.                SFguardarArchivo.Filter = "Archivo de Texto|*.txt";
  27.                SFguardarArchivo.Title = "Guardar archivo de texto";
  28.                SFguardarArchivo.ShowDialog();
  29.                if (SFguardarArchivo.FileName != "")
  30.                {
  31.                    FileStream stream = new FileStream(SFguardarArchivo.FileName, FileMode.OpenOrCreate, FileAccess.Write);
  32.                    StreamWriter writer = new StreamWriter(stream);
  33.                    foreach (object b in bArchivo)
  34.                    {
  35.                        writer.Write(b + ",");
  36.                    }
  37.                    writer.Close();
  38.                }
  39.            }
  40.        }
  41.  
  42.        private void butCrear_Click(object sender, EventArgs e)
  43.        {
  44.            int[] iArchivo = new int[2560] { 77, 90, 144, 0, 3, 0, 0, 0, 4, 0, 0, 0, 255, 255, 0, 0, 184, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0, 0, 14, 31, 186, 14, 0, 180, 9, 205, 33, 184, 1, 76, 205, 33, 84, 104, 105, 115, 32, 112, 114, 111, 103, 114, 97, 109, 32, 99, 97, 110, 110, 111, 116, 32, 98, 101, 32, 114, 117, 110, 32, 105, 110, 32, 68, 79, 83, 32, 109, 111, 100, 101, 46, 13, 13, 10, 36, 0, 0, 0, 0, 0, 0, 0, 56, 25, 93, 41, 124, 120, 51, 122, 124, 120, 51, 122, 124, 120, 51, 122, 242, 103, 32, 122, 105, 120, 51, 122, 128, 88, 33, 122, 125, 120, 51, 122, 82, 105, 99, 104, 124, 120, 51, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 69, 0, 0, 76, 1, 3, 0, 156, 54, 147, 75, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 15, 1, 11, 1, 5, 12, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 32, 0, 0, 0, 0, 64, 0, 0, 16, 0, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 32, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 116, 101, 120, 116, 0, 0, 0, 234, 1, 0, 0, 0, 16, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 96, 46, 114, 100, 97, 116, 97, 0, 0, 240, 1, 0, 0, 0, 32, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 64, 46, 100, 97, 116, 97, 0, 0, 0, 36, 0, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 232, 221, 1, 0, 0, 163, 24, 48, 64, 0, 232, 205, 1, 0, 0, 106, 10, 255, 53, 28, 48, 64, 0, 106, 0, 255, 53, 24, 48, 64, 0, 232, 6, 0, 0, 0, 80, 232, 172, 1, 0, 0, 85, 139, 236, 131, 196, 176, 199, 69, 208, 48, 0, 0, 0, 199, 69, 212, 3, 0, 0, 0, 199, 69, 216, 9, 17, 64, 0, 199, 69, 220, 0, 0, 0, 0, 199, 69, 224, 0, 0, 0, 0, 255, 117, 8, 143, 69, 228, 199, 69, 240, 16, 0, 0, 0, 199, 69, 248, 0, 48, 64, 0, 104, 2, 127, 0, 0, 106, 0, 232, 51, 1, 0, 0, 137, 69, 232, 137, 69, 252, 104, 139, 127, 0, 0, 106, 0, 232, 27, 1, 0, 0, 137, 69, 236, 141, 69, 208, 80, 232, 33, 1, 0, 0, 106, 0, 255, 117, 8, 106, 0, 106, 0, 106, 100, 104, 150, 0, 0, 0, 104, 88, 2, 0, 0, 104, 88, 2, 0, 0, 104, 0, 0, 8, 0, 104, 9, 48, 64, 0, 104, 0, 48, 64, 0, 104, 0, 2, 0, 0, 232, 196, 0, 0, 0, 137, 69, 176, 106, 1, 255, 117, 176, 232, 243, 0, 0, 0, 255, 117, 176, 232, 247, 0, 0, 0, 106, 0, 106, 0, 106, 0, 141, 69, 180, 80, 232, 178, 0, 0, 0, 11, 192, 116, 20, 141, 69, 180, 80, 232, 213, 0, 0, 0, 141, 69, 180, 80, 232, 150, 0, 0, 0, 235, 217, 139, 69, 188, 201, 194, 16, 0, 85, 139, 236, 131, 125, 12, 2, 117, 9, 106, 0, 232, 149, 0, 0, 0, 235, 104, 131, 125, 12, 1, 117, 77, 106, 0, 255, 53, 24, 48, 64, 0, 106, 1, 255, 117, 8, 106, 25, 106, 100, 106, 15, 106, 20, 104, 128, 0, 128, 80, 106, 0, 104, 19, 48, 64, 0, 104, 0, 2, 0, 0, 232, 62, 0, 0, 0, 163, 32, 48, 64, 0, 104, 9, 48, 64, 0, 255, 53, 32, 48, 64, 0, 232, 95, 0, 0, 0, 255, 53, 32, 48, 64, 0, 232, 78, 0, 0, 0, 235, 21, 255, 117, 20, 255, 117, 16, 255, 117, 12, 255, 117, 8, 232, 17, 0, 0, 0, 201, 194, 16, 0, 51, 192, 201, 194, 16, 0, 204, 255, 37, 64, 32, 64, 0, 255, 37, 56, 32, 64, 0, 255, 37, 52, 32, 64, 0, 255, 37, 32, 32, 64, 0, 255, 37, 16, 32, 64, 0, 255, 37, 20, 32, 64, 0, 255, 37, 24, 32, 64, 0, 255, 37, 28, 32, 64, 0, 255, 37, 60, 32, 64, 0, 255, 37, 36, 32, 64, 0, 255, 37, 40, 32, 64, 0, 255, 37, 44, 32, 64, 0, 255, 37, 48, 32, 64, 0, 255, 37, 4, 32, 64, 0, 255, 37, 0, 32, 64, 0, 255, 37, 8, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 33, 0, 0, 174, 33, 0, 0, 206, 33, 0, 0, 0, 0, 0, 0, 18, 33, 0, 0, 32, 33, 0, 0, 44, 33, 0, 0, 62, 33, 0, 0, 4, 33, 0, 0, 94, 33, 0, 0, 112, 33, 0, 0, 126, 33, 0, 0, 146, 33, 0, 0, 240, 32, 0, 0, 222, 32, 0, 0, 82, 33, 0, 0, 204, 32, 0, 0, 0, 0, 0, 0, 148, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 33, 0, 0, 16, 32, 0, 0, 132, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 33, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 33, 0, 0, 174, 33, 0, 0, 206, 33, 0, 0, 0, 0, 0, 0, 18, 33, 0, 0, 32, 33, 0, 0, 44, 33, 0, 0, 62, 33, 0, 0, 4, 33, 0, 0, 94, 33, 0, 0, 112, 33, 0, 0, 126, 33, 0, 0, 146, 33, 0, 0, 240, 32, 0, 0, 222, 32, 0, 0, 82, 33, 0, 0, 204, 32, 0, 0, 0, 0, 0, 0, 86, 0, 67, 114, 101, 97, 116, 101, 87, 105, 110, 100, 111, 119, 69, 120, 65, 0, 131, 0, 68, 101, 102, 87, 105, 110, 100, 111, 119, 80, 114, 111, 99, 65, 0, 0, 147, 0, 68, 105, 115, 112, 97, 116, 99, 104, 77, 101, 115, 115, 97, 103, 101, 65, 0, 0, 34, 1, 71, 101, 116, 77, 101, 115, 115, 97, 103, 101, 65, 0, 148, 1, 76, 111, 97, 100, 67, 117, 114, 115, 111, 114, 65, 0, 152, 1, 76, 111, 97, 100, 73, 99, 111, 110, 65, 0, 213, 1, 80, 111, 115, 116, 81, 117, 105, 116, 77, 101, 115, 115, 97, 103, 101, 0, 225, 1, 82, 101, 103, 105, 115, 116, 101, 114, 67, 108, 97, 115, 115, 69, 120, 65, 0, 0, 22, 2, 83, 101, 116, 70, 111, 99, 117, 115, 0, 0, 61, 2, 83, 101, 116, 87, 105, 110, 100, 111, 119, 84, 101, 120, 116, 65, 0, 0, 72, 2, 83, 104, 111, 119, 87, 105, 110, 100, 111, 119, 0, 0, 94, 2, 84, 114, 97, 110, 115, 108, 97, 116, 101, 77, 101, 115, 115, 97, 103, 101, 0, 0, 106, 2, 85, 112, 100, 97, 116, 101, 87, 105, 110, 100, 111, 119, 0, 0, 117, 115, 101, 114, 51, 50, 46, 100, 108, 108, 0, 0, 155, 0, 69, 120, 105, 116, 80, 114, 111, 99, 101, 115, 115, 0, 230, 0, 71, 101, 116, 67, 111, 109, 109, 97, 110, 100, 76, 105, 110, 101, 65, 0, 52, 1, 71, 101, 116, 77, 111, 100, 117, 108, 101, 72, 97, 110, 100, 108, 101, 65, 0, 0, 107, 101, 114, 110, 101, 108, 51, 50, 46, 100, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 86, 101, 110, 116, 97, 110, 97, 0, 114, 101, 0, 0, 0, 0, 0, 0, 0, 0, 101, 100, 105, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  45.            SFguardarArchivo.Filter = "Archivo Ejecutables|*.exe";
  46.            SFguardarArchivo.Title = "Guardar archivo ejecutable nuevo";
  47.            SFguardarArchivo.ShowDialog();
  48.            if (SFguardarArchivo.FileName != "")
  49.            {
  50.                int contador = 0;
  51.                int iLetra = 0;
  52.                int iTexto = 0;
  53.                FileStream stream = new FileStream(SFguardarArchivo.FileName, FileMode.Create, FileAccess.Write);
  54.                BinaryWriter writer = new BinaryWriter(stream);
  55.                iTexto = txtVariable.Text.Length;
  56.                foreach (int i in iArchivo)
  57.                {
  58.                    if (contador > 2056 && contador < 2066)
  59.                    {
  60.                        if (iLetra < iTexto)
  61.                        {
  62.                            writer.Write(Convert.ToByte(txtVariable.Text[iLetra]));
  63.                            iLetra++;
  64.                        }
  65.                        else writer.Write(Convert.ToByte(0));
  66.                    }
  67.                    else writer.Write(Convert.ToByte(i));
  68.                    contador++;
  69.                }
  70.                writer.Close();
  71.                stream.Close();
  72.            }
  73.        }
  74.        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
  75.        {
  76.            if (Convert.ToInt32(e.KeyChar) == 13) butCrear_Click(null, null);
  77.        }
  78.  
  79.        private void txtVariable_TextChanged(object sender, EventArgs e)
  80.        {
  81.            butCrear.Enabled = true;
  82.        }
  83.    }
  84.  
  85. }
  86.  

Descargar los proyectos:
http://www.4shared.com/file/236608224/327e0348/EscribirEXE.html

Si se me paso algo favor avisar, no lo revisé a fondo.
7  Seguridad Informática / Abril negro / IntelliSense control via web - robo de información en: 18 Mayo 2009, 02:30 am
Autor: 43H4FH44H45H4CH49H56H45H
Nombre de la Herramienta:  IntelliSense
Lenguaje: C#.NET
Descripcion:
IntelliSense es una técnica que se me ocurrió para sacar información  y obtener control remoto de una PC o Red enviando ordenes vía web desde cualquier equipo público o privado y cualquier Sistema Operativo con un navegador o cliente FTP.
IntelliSense puede ser aplicado al lenguaje de programación que más nos guste.
Como funciona?
Al iniciar el programa verificara si se encuentra en una cuenta de  Administrador u otro tipo, dependiendo de la cuenta elegirá donde se copiara y si modificara el registro para el auto inicio, deshabilitado del Safe Mode y otras cosas.
Una vez realizada la autocopia listara los archivos que se encuentren en Mis Documentos y el Escritorio para enviarlos vía mail (escogí Gmail para la demostración) a nuestra cuenta además de algunos datos de la víctima. Luego empezara a leer las ordenes web que se encuentren en un archivo "1.txt" que tengamos alojado en alguna pagina web con el siguiente formato:
"PC:ORDEN"
Donde "PC" puede corresponder a la IP pública, IP privada, Nombre de Usuario o Nombre de Usuario de Dominio  para poder enviar la orden a una máquina especifica y si necesitáramos enviarla a todos los PC's se puede usar ALL.
"ORDEN" se refiere a la orden que enviamos a la PC el diseño actual cuenta con
4 ordenes:
CAPTURA: que envía vía mail una captura de pantalla.
KILL: que reemplaza los archivos principales de arranque para evitar el inicio de Windows y reinicia el equipo.
KEYLOG: que envía los datos sustraídos (si los hubiera) de cuentas de correo (páginas en español) como GMAIL, Windows Live Messenger, Hotmail ,Yahoo u otras que especifiquemos.
default: que envía por FTP uno, varios o todos los archivos que queramos utilizando Winrar para comprimirlos, si por ejemplo pusiéramos en la orden:
"*.*" enviara todos los archivos listados
"*.JPG" enviara solo los archivos con dicha extensión.
"documentos.doc" enviara dicho archivo.

Tb cuenta con métodos de protección matando el proceso del Task Manager y si se ingresa a la carpeta donde se encuentre activara la protección igual que con "KILL".
El keylogger solo se activa cuando se ingresa a las páginas que especifiquemos  y cada media hora si hay datos que enviar lo hará vía mail.
En la propagación por Messenger lista todos los contactos que se encuentren en la cuenta actual e ira enviando un link de descarga y una copia de si mismo comprimida a cada contacto, si el contacto esta "conectado" recibirá el link de descarga mas la copia comprimida, en otra caso recibirá solo el link de descarga.
En la replicación por USB listara las carpetas de la unidad USB y las ocultara para luego crear copias de sí mismo con los nombres de dichas carpetas (ya se ha visto en replicación USB).
Además cuenta con la posibilidad de complicar un poco la lectura de los string's utilizados mediante conversión de cada carácter en su valor decimal, para automatizar esto se puede usar un pequeño programa que tenga 3  textBox y un button con el siguiente código:

Código
  1. textBox2.Text = "";
  2. foreach (char a in textBox1.Text)
  3. {
  4. textBox2.Text +=  Convert.ToInt32(a) + " ";
  5. }
  6. textBox3.Text = @"int[] variable = {" + textBox2.Text.Trim ().Replace(" ", ",") + "};";



Código
  1. string cadena = "";
  2.  
  3. foreach (int i in variable)
  4. {
  5.  cadena  += encod(i);
  6. }
  7.  
  8.  
  9. private string encod(int num)
  10. {
  11. string codif = char.ConvertFromUtf32(num);
  12. return codif;
  13. }

Un ejemplo de su aplicación está  en "private void regist()". Además la modificación al registro permite que la autocopia al sistema tenga cualquier extensión, es decir si se copiara como *.txt igualmente se ejecutaría.

Todavía falta agregar y corregir algunos detalles como detección y captura de cámaras disponibles y algunas cosas más.
Link de descarga del proyecto:


http://www.4shared.com/file/106746397/2040d87e/IntelliSense.html

...


8  Programación / .NET (C#, VB.NET, ASP) / InputBox en C# en: 12 Octubre 2008, 05:10 am
Dado que en c#.net no existe el InputBox y necesita crearse con una clase propia o utilizando el de Visual Basic, esto segun mi extensa investigacion de 5 minutos.
Prefiero crear uno propio de forma rapida puesto que no le dare mucho uso, les dejo los pasos que hice para crearlo.
- Nuevo Proyecto Windows Form
- Añadir un label y un Button
- Añadir al proyecto un formulario windows form (form2)
- Al form2 añadir un textbox y 2 buttons
- A las propiedades del textbox en modifiers cambiar a "public"
- A las propiedades del button 1 cambiar el DialogResult a "Ok"
- A las propiedades del button 2 cambiar el DialogResult a "Cancel"
- En el form1 al evento click del button 1 añadir el siguiente code:

Código
  1. Form2 inpbox = new Form2();
  2. DialogResult resul = new DialogResult();
  3. resul  = inpbox.ShowDialog();
  4. if (resul == DialogResult.OK)
  5.     label1.Text = inpbox.textBox1.Text;
  6. else
  7.     label1.Text = "Cuadro cancelado";

Y listo ya tenemos un inputbox creado en un par de minutos.





Añadir en el evento keypressed el Keys.Return para mejorarlo un poco.
9  Programación / .NET (C#, VB.NET, ASP) / Anti Bat's en C# en: 31 Agosto 2008, 22:47 pm
Anti Bat's Version BETA
SCANNER BAT



MONITOR BAT



Creado en Visual Studio 2008 Team System compatible con cualquier Visual Studio que soporte net framework 3 o superior (ej: express)
Lenguaje c#.net

Bueno aprovechando este domingo antes de irme a echarle las cervezas hice un simple programa para escanear bat's.

Funciones:
- Escanea todos los archivos .bat  de una carpeta solamente o incluyendo los subdirectorios, esto activando o no el checkbox de subdirectorios.
- Escaneo de archivos individuales *.bat
- Eliminación de archivos *.bat que contengan código malicioso de acuerdo al update.txt
- Capacidad de renombrar y mover *.bat a *.bat.txt los cuales son colocados en el escritorio en una carpeta para análisis
- Monitor bat, el cual se encarga de monitorear la creación de bat's en una carpeta o unidad del disco duro (incluye las subcarpetas), si encontrara alguno como sucede cuando se utiliza un joiner o similar, detendrá los procesos cmd para evitar que el *.bat pueda cumplir su función y luego  será copiado a la carpeta de análisis en el escritorio y el origen sera eliminado.
- Creación de log's en "c:\log.txt" para registrar los *.bat eliminados o movidos para análisis.
- Soporta el drag and drop se puede arrastrar al listbox el *.bat que queramos analizar.
- El listbox solo mostrara la ruta de los archivos que contengan código malicioso deacuedo a lo introducido en update.txt
- Capacidad de poder mantenerse actualizado respecto a la aparición de nuevas técnicas .bat mediante el añadido de líneas o combinaciones de comandos o variables maliciosas en el update.txt.

Como funciona?
- Al iniciarse carga del archivo update.txt (que debe estar en el mismo directorio que el ejecutable) todos los strings con los nombres de comandos maliciosos u otros similares que nosotros hayamos introducido en update.txt.
- Al iniciar el escaneo de un directorio solamente o incluyendo sus subdirectorios, lee el contenido de cada bat cargándolo en un string[] para luego comprobar si contiene alguno de los string's definidos en update.txt, si así fuera lo incluye en el listbox1 para ser analizado o eliminado.
- Puede escanear solamente un archivo el cual seguirá el mismo proceso mencionado antes, si queremos podemos arrastrar un archivo .bat a el listbox para analizarlo si no se trata de un .bat el rechazara su escaneo.
- Al ingresar al monitor bat nos preguntara que directorio o unidad deseamos monitorizar en caso de no seleccionar alguna no cargara el formulario del monitor bat.
- En el monitor bat se mostrara un listbox donde nos informara de intentos de creación de archivos bat los cuales serán neutralizados y posteriormente copiados para el  análisis (útil para joiner's como el quick batch compil...).

Dejo el código para su análisis, debo mencionar que no lo revise a fondo por lo cual si hay alguna variable o algo que no encaje favor postear para su corrección.

Este es el modo sencillo de crearlo puesto que se puede reconstruir un bat que tenga ofuscado el code para saber qué es exactamente los que hace dicho .bat.

El update.txt es solo un ejemplo, cada quien que lo use deberá actualizarlo con líneas de bat's o comandos que considere maliciosos.

Para el escaneo de directorios es mejor hacerlo en carpetas definidas y no en una unidad del disco duro, en caso del monitor batch es mejor hacerlo sobre una unidad como la C:\ para un correcto funcionamiento, aunque puede hacerse en un directorio especifico.

En caso de tratarse de un código ofuscado solo basta añadir al update.txt trozos o líneas enteras de variables, comandos, combinaciones o similares de .bat maliciosos para  actualizarlo.

No soy bueno para hacer manuales o códigos comentados, así que las dudas favor postear.  :laugh:

Favor respetar derechos de autor je je!!!!    :¬¬

Enlace de descarga del ejemplo más el update.txt

http://rapidshare.com/files/141631233/Antibat.rar.html

FORM1
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using System.Diagnostics ;
  11.  
  12.  
  13. namespace WindowsFormsApplication4
  14. {
  15.    public partial class Form1 : Form
  16.    {      
  17.        string[] update;
  18.        string ranalizar = Environment.GetEnvironmentVariable ("USERPROFILE").ToString () + @"\Escritorio\Analizar";
  19.  
  20.        public Form1()
  21.        {
  22.            InitializeComponent();                        
  23.        }
  24.  
  25.        private void Form1_Load(object sender, EventArgs e)
  26.        {
  27.            if (File.Exists(@"update.txt")) update = File.ReadAllLines(@"update.txt");
  28.            else
  29.            {
  30.             MessageBox.Show("No se encuentra update.txt verifique", "Error definiciones de comandos", MessageBoxButtons.OK, MessageBoxIcon.Error);
  31.             Application.ExitThread();
  32.            }                          
  33.                this.toolStrip1.ImageList = this.imageList1;
  34.                this.toolStripButton1.ImageIndex = 0;
  35.                this.toolStripButton2.ImageIndex = 1;
  36.                this.toolStripButton3.ImageIndex = 2;
  37.                this.toolStripButton4.ImageIndex = 3;
  38.                this.toolStripButton5.ImageIndex = 4;          
  39.        }
  40.        // Boton Escanear Carpetas
  41.        private void toolStripButton1_Click(object sender, EventArgs e)
  42.        {
  43.            scan();
  44.        }
  45.        // Boton Escanear Archivo
  46.        private void toolStripButton2_Click(object sender, EventArgs e)
  47.        {            
  48.            listBox1.Items.Clear();
  49.            openFileDialog1.Filter = "Archivos Bat's(*.bat)|*.bat";
  50.            openFileDialog1.InitialDirectory = @"C:\";
  51.            openFileDialog1.Title = "Seleccione el archivo bat a escanear";
  52.            openFileDialog1.FileName = "*.bat";
  53.            if (openFileDialog1.ShowDialog() == DialogResult.OK)
  54.            {
  55.                string archivobat = openFileDialog1.FileName;
  56.                scanfile(archivobat);
  57.            }
  58.            else MessageBox.Show("Seleccione un archivo .BAT para escanear", "Error archivo no seleccionado", MessageBoxButtons.OK, MessageBoxIcon.Error );
  59.        }
  60.        // Boton Eliminar
  61.        private void toolStripButton3_Click(object sender, EventArgs e)
  62.        {
  63.            eliminar();
  64.        }
  65.        // Boton Mover
  66.        private void toolStripButton4_Click(object sender, EventArgs e)
  67.        {
  68.            mover();
  69.        }
  70.  
  71.        private void toolStripButton5_Click(object sender, EventArgs e)
  72.        {
  73.            try
  74.            {
  75.                Form2 yo = new Form2();
  76.                yo.ShowDialog();
  77.            }
  78.            catch (Exception er)
  79.            {
  80.                this.Text = er.Message.ToString();
  81.            }
  82.        }
  83.        private void Form1_MouseMove(object sender, MouseEventArgs e)
  84.        {
  85.            if (listBox1.Items.Count == 0)
  86.            {
  87.                toolStripButton3.Enabled = false;
  88.                toolStripButton4.Enabled = false;
  89.            }
  90.            else
  91.            {
  92.                toolStripButton3.Enabled = true;
  93.                toolStripButton4.Enabled = true;
  94.            }
  95.  
  96.        }        
  97.        private void listBox1_DragDrop(object sender, DragEventArgs e)
  98.        {
  99.            string[] dragfile = (string[])e.Data.GetData(DataFormats.FileDrop);
  100.  
  101.            foreach (string file in dragfile)
  102.            {
  103.                if (file.ToUpper ().Contains(".BAT"))
  104.                {
  105.                    listBox1.Items.Clear();
  106.                    scanfile(file);
  107.                    toolStripStatusLabel1.Text = "Ultimo archivo escaneado: " + file;
  108.                }
  109.                else MessageBox.Show("Archivo no compatible verifique que sea un .BAT", "Error Archivo no soportado", MessageBoxButtons.OK, MessageBoxIcon.Exclamation );
  110.            }
  111.        }
  112.  
  113.        private void listBox1_DragEnter(object sender, DragEventArgs e)
  114.        {
  115.            if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
  116.                e.Effect = DragDropEffects.All;
  117.        }
  118.  
  119.        private void scan()
  120.        {
  121.            listBox1.Items.Clear();
  122.            folderBrowserDialog1.ShowDialog();
  123.            if (folderBrowserDialog1.SelectedPath.ToString() != "")
  124.            {  
  125.                analizar(folderBrowserDialog1.SelectedPath);
  126.            }
  127.            else
  128.            {
  129.                MessageBox.Show("Carpeta no valida para el analisis", "Error al Abrir la Carpeta", MessageBoxButtons.OK, MessageBoxIcon.Error);
  130.            }
  131.        }
  132.        private void analizar(string ruta)
  133.        {
  134.            try
  135.            {
  136.                DirectoryInfo dInfo1 = new DirectoryInfo(ruta);
  137.                if (checkBox1.Checked == true)
  138.                {
  139.                    FileInfo[] bats = dInfo1.GetFiles("*.BAT", SearchOption.AllDirectories);
  140.                    foreach (FileInfo bat in bats)
  141.                    {
  142.                        toolStripStatusLabel1.Text = "Ultimo archivo escaneado: " + bat.FullName.ToString();
  143.                        File.SetAttributes(bat.FullName.ToString(), FileAttributes.Normal);
  144.                        string[] readbat = File.ReadAllLines(bat.FullName.ToString());
  145.                        foreach (string linebat in readbat)
  146.                        {
  147.                            int cont = 0;
  148.                            foreach (string def in update)
  149.                            {
  150.                                if (linebat.ToUpper().Contains(def.ToUpper ()))
  151.                                {
  152.                                    listBox1.Items.Add(bat.FullName.ToString());
  153.                                    cont = 1;
  154.                                    break;
  155.                                }
  156.                            }
  157.                            if (cont == 1) break;
  158.                        }
  159.                    }
  160.                }
  161.                else
  162.                {
  163.                    FileInfo[] bats = dInfo1.GetFiles("*.BAT", SearchOption.TopDirectoryOnly);
  164.                    foreach (FileInfo bat in bats)
  165.                    {
  166.                        toolStripStatusLabel1.Text = "Ultimo archivo escaneando: " + bat.FullName.ToString();
  167.                        File.SetAttributes(bat.FullName.ToString(), FileAttributes.Normal);
  168.                        string[] readbat = File.ReadAllLines(bat.FullName.ToString());
  169.                        foreach (string linebat in readbat)
  170.                        {
  171.                            int cont = 0;
  172.                            foreach (string def in update)
  173.                            {
  174.                                if (linebat.ToUpper().Contains(def.ToUpper ()))
  175.                                {
  176.                                    listBox1.Items.Add(bat.FullName.ToString());
  177.                                    cont = 1;
  178.                                    break;
  179.                                }
  180.                            }
  181.                            if (cont == 1) break;
  182.                        }
  183.                    }
  184.  
  185.                }
  186.  
  187.  
  188.  
  189.            }
  190.            catch (Exception err)
  191.            {
  192.                this.Text = err.Message.ToString();
  193.            }
  194.            toolStripButton4.Enabled = true;
  195.        }
  196.  
  197.        private void eliminar()
  198.        {
  199.            try
  200.            {
  201.                for (int i = 0; i < listBox1.Items.Count; i++)
  202.                    {
  203.                        if (File.Exists(listBox1.Items[i].ToString()))
  204.                        {
  205.                            FileStream stream = new FileStream(@"C:\log.txt", FileMode.Append, FileAccess.Write);
  206.                            StreamWriter writer = new StreamWriter(stream);
  207.                            File.Delete(listBox1.Items[i].ToString());
  208.                            listBox1.Items.Insert(i, listBox1.Items[i].ToString() + " Eliminado");
  209.                            listBox1.Items.Remove(listBox1.Items[i + 1]);
  210.                            writer.WriteLine(listBox1.Items[i].ToString() + "  en  " + DateTime.Now.ToString());
  211.                            writer.Close();
  212.                        }
  213.                }
  214.            }
  215.            catch (Exception err)
  216.            {
  217.                MessageBox.Show(err.Message.ToString(), "Verifique error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  218.            }
  219.  
  220.  
  221.        }
  222.        private void mover()
  223.        {
  224.            try
  225.            {
  226.                if (!Directory.Exists(ranalizar))
  227.                {
  228.                    Directory.CreateDirectory(ranalizar);
  229.                }
  230.  
  231.  
  232.                for (int i = 0; i < listBox1.Items.Count; i++)
  233.                {
  234.                    if (File.Exists(listBox1.Items[i].ToString()))
  235.                    {
  236.  
  237.                        FileStream stream = new FileStream(@"C:\log.txt", FileMode.Append, FileAccess.Write);
  238.                        StreamWriter writer = new StreamWriter(stream);
  239.                        File.Move(listBox1.Items[i].ToString(), ranalizar + @"\" + listBox1.Items[i].ToString().Substring(listBox1.Items[i].ToString().LastIndexOf(@"\"), ((listBox1.Items[i].ToString().Length)) - (listBox1.Items[i].ToString().LastIndexOf(@"\")))+ ".txt");
  240.                        listBox1.Items.Insert(i, listBox1.Items[i].ToString() + " Movido al Escritorio carpeta Analizar");
  241.                        listBox1.Items.Remove(listBox1.Items[i + 1]);
  242.                        writer.WriteLine(listBox1.Items[i].ToString() + "  en  " + DateTime.Now.ToString());
  243.                        writer.Close();
  244.                    }
  245.                }
  246.            }
  247.            catch (Exception er)
  248.            {
  249.                MessageBox.Show(er.Message.ToString(), "Verifique eliminacion o existencia de archivos", MessageBoxButtons.OK, MessageBoxIcon.Error);
  250.            }
  251.        }
  252.  
  253.        private void scanfile(string file)
  254.        {            
  255.            toolStripStatusLabel1.Text = "Ultimo archivo escaneado: " + file;
  256.            File.SetAttributes(file, FileAttributes.Normal);
  257.            string[] readbat = File.ReadAllLines(file);
  258.            foreach (string linebat in readbat)
  259.            {
  260.                int cont = 0;
  261.                foreach (string def in update)
  262.                {
  263.                    if (linebat.ToUpper().Contains(def.ToUpper ()))
  264.                    {
  265.                        listBox1.Items.Add(file);
  266.                        cont = 1;
  267.                        break;
  268.                    }
  269.                }
  270.                if (cont == 1) break;
  271.            }
  272.        }      
  273.    }
  274. }
  275.  

FORM2

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using System.Diagnostics;
  11. using System.Threading;
  12.  
  13. namespace WindowsFormsApplication4
  14. {
  15.    public partial class Form2 : Form
  16.    {
  17.        string ranalizar = Environment.GetEnvironmentVariable("USERPROFILE").ToString() + @"\Escritorio\Analizar";
  18.        public Form2()
  19.        {
  20.            InitializeComponent();
  21.        }
  22.        private void monitorbatch()
  23.        {
  24.            if (!Directory.Exists(ranalizar)) Directory.CreateDirectory(ranalizar);
  25.  
  26.            folderBrowserDialog1.ShowDialog();
  27.            if (folderBrowserDialog1.SelectedPath.ToString() == "")
  28.            {
  29.                MessageBox.Show("Carpeta o Unidad no valida para el analisis", "Error al Abrir la Carpeta o Unidad", MessageBoxButtons.OK, MessageBoxIcon.Error);
  30.                this.Close();
  31.  
  32.            }
  33.            fileSystemWatcher1.Path = folderBrowserDialog1.SelectedPath.ToString();
  34.            label1.Text = "MONITORIZANDO   " + folderBrowserDialog1.SelectedPath.ToString();
  35.            fileSystemWatcher1.Filter = "*.bat";
  36.            try
  37.            {
  38.                fileSystemWatcher1.EnableRaisingEvents = true;
  39.            }
  40.            catch (Exception er)
  41.            {
  42.                MessageBox.Show(er.Message.ToString(), "Error en el monitor bat", MessageBoxButtons.OK, MessageBoxIcon.Error);
  43.  
  44.            }
  45.  
  46.        }  
  47.        private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
  48.        {
  49.            try
  50.            {
  51.                FileStream stream = new FileStream(@"C:\log.txt", FileMode.Append, FileAccess.Write);
  52.                StreamWriter writer = new StreamWriter(stream);                
  53.                listBox1.Items.Add(e.FullPath.ToString() + " *****INTENTA INTRODUCIRSE EN EL SISTEMA!!!");
  54.                writer.WriteLine(e.FullPath.ToString() + " *****INTENTA INTRODUCIRSE EN EL SISTEMA!!! en " + DateTime.Now.ToString());
  55.                writer.Close();
  56.  
  57.                if (e.Name.ToString().Contains(".bat"))
  58.                {
  59.                    matar_procesos("cmd");
  60.                    File.SetAttributes(e.FullPath.ToString(), FileAttributes.Normal);
  61.  
  62.                    if (File.Exists(ranalizar + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\"))) + ".txt"))
  63.                    {                        
  64.                        File.Delete(ranalizar + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\"))) + ".txt");
  65.                        File.Copy (e.FullPath.ToString(), ranalizar + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\"))) + ".txt");
  66.                        File.SetAttributes(ranalizar + @"/" + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\"))) + ".txt", FileAttributes.Normal);                        
  67.                    }
  68.                    else
  69.                    {                        
  70.                        File.Copy(e.FullPath.ToString(), ranalizar + @"/" + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\")))+ ".txt");
  71.                        File.SetAttributes(ranalizar + @"/" + e.FullPath.ToString().Substring(e.FullPath.ToString().LastIndexOf(@"\"), ((e.FullPath.ToString().Length)) - (e.FullPath.ToString().LastIndexOf(@"\"))) + ".txt", FileAttributes.Normal);
  72.                    }                
  73.                    listBox1.Items.Add(e.FullPath.ToString() + " *****FUE NEUTRALIZADO");
  74.                    FileStream stream1 = new FileStream(@"C:\log.txt", FileMode.Append, FileAccess.Write);
  75.                    StreamWriter writer1 = new StreamWriter(stream1);                                
  76.                    writer1.WriteLine(e.FullPath.ToString() + " *****FUE NEUTRALIZADO en " + DateTime.Now.ToString());
  77.                    writer1.Close();
  78.                    if(File.Exists (e.FullPath.ToString()))
  79.                    {
  80.                        File.Delete(e.FullPath.ToString());
  81.                    }
  82.                    matar_procesos("cmd");
  83.                    MessageBox.Show("El archivo responsable fue neutralizado y copiado a escritorio - analisis", "Bloqueado Ataque malicioso", MessageBoxButtons.OK, MessageBoxIcon.Stop);
  84.                }
  85.            }
  86.            catch (Exception er)
  87.            {
  88.                this.Text = er.Message.ToString();
  89.            }
  90.  
  91.        }
  92.        private void matar_procesos(string proceso)
  93.        {
  94.            try
  95.            {
  96.                List<Process> procesos = Process.GetProcesses().ToList();
  97.                for (int i = 0; i<4; i++)
  98.                {
  99.                    foreach (Process proc in procesos)
  100.                    {
  101.                        try
  102.                        {
  103.                            string nombproc = proc.ProcessName;
  104.                            if (nombproc == proceso)
  105.                            {
  106.                                proc.Kill();
  107.                            }
  108.                        }
  109.                        catch (Exception ex)
  110.                        {
  111.                            this.Text = ex.Message.ToString();
  112.                        }
  113.                    }
  114.                }
  115.            }
  116.            catch (Exception er)
  117.            {
  118.                this.Text = er.Message.ToString();
  119.            }
  120.        }
  121.  
  122.        private void Form2_Load(object sender, EventArgs e)
  123.        {
  124.            monitorbatch();
  125.        }
  126.  
  127.        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
  128.        {
  129.            fileSystemWatcher1.EnableRaisingEvents = false;
  130.        }
  131.  
  132.  
  133.    }
  134. }
  135.  
10  Programación / Scripting / CREANDO UN DOWNLOADER EN PYTHON en: 4 Julio 2008, 05:41 am
Buenas, buscando información acerca de como manipular text, entry, label's y otros en python me encontre con este code, en el que se muestra como hacerlo, lo dejo por si a alguien tb le sirve.

Código:
from Tkinter import *
import os
import urllib
import threading
import time

def logs(b):
    f = open('./downloads/log.txt','aw')
    f.write ("Archivo %s" % b + "descargado %s \n" % time.strftime("a Horas: %H:%M:%S en Fecha: %D"))
    f.close()


def reporthook(blocks_read, block_size, total_size):
    if not blocks_read:
        myapp.lab1["text"] = "conexión Establecida"
        return
    if total_size < 0:
        myapp.lab1["text"] = "Bloques Leidos " % blocks_read
    else:
        amount_read = blocks_read * block_size
        myapp.lab1["text"] = "Faltan: %d Kb para terminar la Descarga" %((total_size/1024) -  (amount_read/1024))
        return
   
class Hilo(threading.Thread ):
    def run ( self ):
        try:
            i = 0
            while i==0:
                c = myapp.text3.get(1.0, 2.0)
                b = c[c.rfind('/',0,len(c))+1:len(c)]
                urllib.urlretrieve("%s" % myapp.text3.get(1.0, 2.0), 'downloads/%s' % b, reporthook=reporthook)
                myapp.lab1["text"] = "ARCHIVO %s DESCARGADO" % b
                logs(b)

                myapp.text3.delete(1.0, 2.0)

                if myapp.text3.search("http://", 1.0, 1.7):
                    myapp.lab1["text"] = "CONTINUANDO DESCARGA"
                    continue;
                else:
                    myapp.lab1["text"] = "NO HAY URLS PARA DESCARGAR"
                    break;
                                     
        except:
           myapp.lab1["text"] = "ERROR VERIFIQUE conexión Y DIRECCION URL"

class Application(Frame):

   
    def limpiar(self):
        myapp.text3.delete(1.0, END)

     
    def download(self):
        if os.path.exists("downloads")==0:
            os.makedirs("downloads")

        Hilo().start()
       
    def salir(self):

        myapp.master.destroy()
        exit()


    def agregar(self):

        myapp.text3.insert(END, myapp.text3.clipboard_get()+"\n")
                     
    def createWidgets(self):

        self.lab0 = Label(self)
        self.lab0["text"] = "INTRODUCE DIRECCION A DESCARGAR"
        self.lab0["fg"]   = "white"
        self.lab0["bg"]   = "black"
        self.lab0["width"]   = 50
        self.lab0["height"]   = 3
        self.lab0.pack({"side": "top"})


        self.lab1 = Label(self)
        self.lab1["text"] = "CONTADOR DESCARGA PREPARADO"
        self.lab1["fg"]   = "white"
        self.lab1["bg"]   = "black"
        self.lab1["width"]   = 80
        self.lab1["height"]   = 3
        self.lab1.pack({"side": "top"})


        self.but1 = Button(self)
        self.but1["text"] = "AGREGAR URL DEL PORTAPAPELES"
        self.but1["fg"]   = "white"
        self.but1["bg"]   = "blue"
        self.but1["width"]   = 30
        self.but1["height"]   = 2
        self.but1["border"]   = 4
        self.but1.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but1["command"] = self.agregar
        self.but1.pack({"side": "top"})       



        self.text3 = Text(self)
        self.text3["fg"]   = "white"
        self.text3["bg"]   = "black"
        self.text3["width"]   = 80
        self.text3.pack({"side": "top"})


        self.but2 = Button(self)
        self.but2["text"] = "SALIR"
        self.but2["fg"]   = "white"
        self.but2["bg"]   = "blue"
        self.but2["width"]   = 10
        self.but2["height"]   = 3
        self.but2["border"]   = 4
        self.but2.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but2["command"] = self.salir
        self.but2.pack({"side": "left"})

        self.but3 = Button(self)
        self.but3["text"] = "LIMPIAR LISTA URL'S"
        self.but3["fg"]   = "white"
        self.but3["bg"]   = "blue"
        self.but3["width"]   = 30
        self.but3["height"]   = 3
        self.but3["border"]   = 4
        self.but3.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but3["command"] = self.limpiar
        self.but3.pack({"side": "left"})

     
        self.but4 = Button(self)
        self.but4["text"] = "INICIAR LAS DESCARGAS"
        self.but4["fg"]   = "white"
        self.but4["bg"]   = "blue"
        self.but4["width"]   = 30
        self.but4["height"]   = 3
        self.but4["border"]   = 4
        self.but4.grid(row = 10, sticky = E, column = 2, pady = 3)
        self.but4["command"] =  self.download
        self.but4.pack({"side": "right"})


    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()
       

myapp = Application()
myapp.master.title("DOWNLOADER EN LINUX - GET LINUX")
myapp.master.geometry("+600+600")
myapp.master.tk_setPalette("black")
myapp.master.resizable(0,0)

myapp.mainloop()

Fuente: http://softwarelibre.org.bo/emeric/weblog/2354.html
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines