[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
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
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
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 cifrados con XOR).
El codigo viene con ejemplos de uso y tiene el siguiente codigo :
Código
// 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 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-"; seteando.Write(delimitador + xor_now(texto, key) + delimitador); seteando.Flush(); seteando.Close(); abriendo.Close(); return true; } public string leer_eof(string archivo, string key) { 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 ?
--========--
Version PDF.
Version en Video Tutorial :