[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 :
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 : 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 :
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 :
// 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 ?
--========--
[Enlace externo eliminado para invitados].
Version en VideoTutorial :
[Enlace externo eliminado para invitados]