[C#] Creacion de un Server Builder con recursos

Iniciado por BigBear, Marzo 10, 2015, 02:10:15 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

[Titulo] : Creacion de un Server Builder con recursos
[Lenguaje] : C#
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del builder
0x03 : Creacion del stub
0x04 : Probando el programa
0x05 : Builder Tools

-- =================--------

0x01 : Introduccion

En este manual les voy a enseñar como hacer un Server Builder en C# con recursos , en el manual anterior les enseñe como hacerlo mediante EOF , una mejor forma de hacer un server builder es usando recursos.

Empecemos ...

0x02 : Creacion del builder

Para crear el server builder tenemos que crear un nuevo proyecto en Visual Studio de esta manera si usan la version 2010 :

"Archivo -> Nuevo -> Proyecto -> Elegimos Aplicacion de Windows Forms" y le damos en aceptar

Como en la siguiente imagen :



Ahora tenemos que crear dos edit y un boton con el texto "Make Server" como en la siguiente imagen :



Despues deben cambiar el titulo del formulario a "Builder" y cambiarle el nombre por defecto de los edits de la siguiente forma :

textBox1 -> ip
textBox2 -> port

Para empezar vamos al inicio del codigo del programa y agregamos el siguiente codigo para poder manejar recursos :

Código: csharp

using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;
using System.Resources;


Una vez hecho hacemos doble click en el boton y ponemos el siguiente codigo :

Código: csharp

private void button1_Click(object sender, EventArgs e)
{
string linea = "-ip-"+ip.Text+"-ip-"+"-port-"+port.Text+"-port-"; // Establecemos la variable "linea" como los datos de la IP y el puerto

System.Resources.ResourceWriter escribiendo = new System.Resources.ResourceWriter("configuration.resources"); // Empezamos a escribir el
// recurso "configuration"

escribiendo.AddResource("configuration",linea); // Agregamos el recurso "configuration" con los datos de la variable "linea"
escribiendo.Close(); // Guarda los recursos y se cierra

System.CodeDom.Compiler.CompilerParameters compilador = new System.CodeDom.Compiler.CompilerParameters(); // Iniciamos la instancia CompilerParameters

compilador.GenerateExecutable = true; // Aclaramos que queremos que genere un ejecutable
compilador.OutputAssembly = "stub.exe"; // Establecemos el nombre del ejecutable a generar
compilador.ReferencedAssemblies.Add("System.dll"); // Agregamos el ensamblado System
compilador.ReferencedAssemblies.Add("System.Windows.Forms.dll"); // Agregamos el ensamblado System.Windows.Forms
compilador.EmbeddedResources.Add("configuration.resources"); // Agregamos los recursos que se van a incluir en el ejecutable resultante
compilador.CompilerOptions += "/t:winexe"; // Establecemos los argumentos de la linea de comandos que usara el compilador

System.CodeDom.Compiler.CompilerResults final = new Microsoft.CSharp.CSharpCodeProvider().CompileAssemblyFromSource(compilador, Properties.Resources.stub);
           
// Compilamos el recurso

if (File.Exists("configuration.resources")) // Si existe el archivo "configuration.resources" ...
{
System.IO.File.Delete("configuration.resources"); // Lo borramos
}
MessageBox.Show("Done"); // Mostramos por pantalla un mensaje para decir que el stub esta listo
}


El codigo les deberia ver algo asi :



Con eso ya tendriamos hecho el builder.

0x03 : Creacion del stub

Para hacer el stub , tenemos que seguir en el mismo proyecto , entonces vamos a "Proyecto->Propiedades" y seleccionamos la pestaña de "Recursos" , les deberia aperecer esta ventana :



Ahora hacemos click en "Agregar recurso" y seleccionamos "Agregar nuevo archivo de texto" , entonces nos va a aparecer una nueva ventana y escriben "stub".

Como en la siguiente imagen :



Una vez completado veran que pueden escribir en el stub.txt , tienen que poner el siguiente codigo :

Código: csharp

using System;
using System.Text;
using System.Windows.Forms;
using System.Resources;
using System.Text.RegularExpressions;

namespace stub
{
    class Program
    {
        static void Main()
        {

            string ip = ""; // Declaramos la variable string "ip" que contendra la IP
            string port = ""; // Declaramos la variable string "port" que contendra el puerto

            ResourceManager leyendo_recurso = new ResourceManager("configuration", System.Reflection.Assembly.GetExecutingAssembly()); // Cargamos los datos
            // del recurso "configuration"

            string datos = leyendo_recurso.GetString("configuration"); // Leemos los datos del recurso "configuration"

            Match regex = Regex.Match(datos, "-ip-(.*?)-ip--port-(.*?)-port-", RegexOptions.IgnoreCase); // Usamos una expresion regular para buscar la IP
            // y el puerto
            if (regex.Success) // Si se encontro algo ...
            {
                ip = regex.Groups[1].Value; // Guardamos la IP encontrada en la variable "ip"
                port = regex.Groups[2].Value; // Guardamos el puerto encontrado en la variable "port"
            }

            MessageBox.Show("[+] IP : " + ip); // Mostramos la IP con un mensaje usando la variable "ip"
            MessageBox.Show("[+] Port : " + port); // Mostramos el puerto con un mensaje usando la variable "port"

        }
    }
}


Una imagen de como deberia quedar :



Con eso ya terminamos el stub.

0x04 : Probando el programa

Una vez terminado el programa podremos probarlo , entonces cargamos el builder y pongan los datos que quieran , le dan al boton "Make Server" y despues cargan el stub para mostrar los datos cargados desde el builder.

Les deberia que quedar algo asi :









0x05 : Builder Tools

Como regalo les dejo una clase en C# que hice para aplicar el metodo EOF de una forma mas facil y segura (datos encriptados con XOR).

El codigo viene con ejemplos de uso y tiene el siguiente codigo :

Código: csharp

// Class Name : Builder Tools
// Version : 0.1
// (C) Doddy Hackman 2015
//
// Examples :
//builder_tools tools = new builder_tools();
//tools.escribir_eof("stub.exe","hola mundo de ***** [ip]morite[ip][port]sdasd[port]","key");
//Console.Write(tools.leer_eof("stub.exe", "key"));
//

using System;
using System.Collections.Generic;
using System.Text;

using System.IO;
using System.Text.RegularExpressions;

namespace builder
{
    class builder_tools
    {
        public string xor_now(string linea, string key)
        {
            // Credits : Based on http://stackoverflow.com/questions/2532668/help-me-with-xor-encryption
            // Thanks to Daniel Earwicker
            var contenido = new StringBuilder();
            for (int i = 0; i < linea.Length; i++)
            {
                contenido.Append((char)((uint)linea[i] ^ (uint)key[i % key.Length]));
            }
            return contenido.ToString();
        }

        public bool escribir_eof(string archivo, string texto, string key)
        {
            string delimitador = "-0x646F646479206861636B6D616E-";

            FileStream abriendo = new FileStream(archivo, FileMode.Append);
            BinaryWriter seteando = new BinaryWriter(abriendo);
            seteando.Write(delimitador + xor_now(texto, key) + delimitador);
            seteando.Flush();
            seteando.Close();
            abriendo.Close();

            return true;
        }

        public string leer_eof(string archivo, string key)
        {
            StreamReader viendo = new StreamReader(archivo);

            string contenido = viendo.ReadToEnd();
            string rta = "";

            Match regex = Regex.Match(contenido, "-0x646F646479206861636B6D616E-(.*?)-0x646F646479206861636B6D616E-", RegexOptions.IgnoreCase);

            if (regex.Success)
            {
                rta = xor_now(regex.Groups[1].Value, key);
            }
            else
            {
                rta = "WTF!";
            }

            return rta;
        }
    }
}

// The End ?


Eso seria todo.

--========--
  The End ?
--========--

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login.

Version en VideoTutorial :