Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - raul338

#2321
Si usas variables booleanas, puedes convertirlos a flags en un solobyte (7 campos booleanos = 1 Byte!)
Si podes usa ASCII (unicode tiene mas caracteres, pero ocupa 2 bytes por caracter; ASCII ocupa un byte por caracter)
Si usas numeros, trata de convertirlos a un byte o 2 (los integer ocupan 4 bytes, si vas a guardar la edad guardala en un solo byte, no creo que alguien tenga mas de 255 años :xD)

Y para texto, busca algun algoritmo de compresion
#2322
Obten el Hash del xml (y/o fecha de modificacion), si es el mismo lo actualizas, sino no :P
#2323
El mio funciona igual, solo cambia el CodeCompiler a VB, y todo lo demas es igual (no es tan dificil convertir C# A visual basic, solo hace falta saber un poquito de sintaxis)
#2324
Un ejemplo tambien usando las tecnicas que dije:

Compilacion personalizada en tiempo de ejecucion C#.net
#2325
Buen aporte Codelive

y aca uno mio, para los que no saben ASM (como yo :P) ni usar un editor hexadecimal :xD un compilador personalizado, con cambio de variables incluso (perfecto para troyanos, pero pueden hacerse otros usos, ABMs personalizados por ejemplo)

codigo del troyano simple:
No hice un troyano, hice el principio del bosquejo del troyano :P (es tarea de ustedes continuarlos, yo les doy el mapa, ustedes recorran el camino ;))

Código (csharp) [Seleccionar]

using System;
using System.Windows.Forms;
using System.Net;

namespace TroyanCompiler
{
   static class Program
   {
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       static void Main()
       {
           // Aca poner todo lo que puede hacer el troyano
           // Borre el form, ya que si es un troyano, el usuario no tiene que darse cuenta no? =P

           string sIP = "{IP}";
           IPAddress ip = new IPAddress(sIP);
           IPEndPoint endPoint = new IPEndPoint(ip, 600);

           MessageBox.Show("Aca deberia conectar a IP + " + ip.ToString());
       }
   }
}


Tendria la siguente salida


Ahora, el compilador, Un formulario con dos textbox (uno para IP y otro para la Salida del archivo) y un boton para generar (yo inclui un boton para el cuadro de dialogo, guardar)

Código (csharp) [Seleccionar]

/*****
* Generador de codigo personalizable, By Raul338
* Gracias a Mario Ropero, por su entrada en el blog, Este codigo esta basado en su codigo
* http://geeks.ms/blogs/mropero/default.aspx
****/

private void BtnGenerar_Click(object sender, EventArgs e)
{
   // Validamos la IP introducida
   bool isIP = Regex.IsMatch(txtIP.Text, @"^(?>(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?>25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");

   if (!isIP)
   {
       MessageBox.Show("Ponga una IP valida, porque sino el troyano no funcionara");
       return;
   }

   // Instanciamos un compilador
   CompilerParameters cp = new CompilerParameters();
   cp.ReferencedAssemblies.Add("system.dll");
   cp.ReferencedAssemblies.Add("system.windows.forms.dll");
   // Opciones de compilador
   cp.GenerateExecutable = true;
   cp.CompilerOptions = "/target:winexe";
   cp.IncludeDebugInformation = false;
   cp.GenerateInMemory = false;

   // Cargamos el codigo en un StringBuilder
   StringBuilder code = new StringBuilder();
   // TroyanCode.cs es el codigo anterior
   StreamReader sr = File.OpenText(Application.StartupPath + @"\TroyanCode.cs");
   string linea;

   while (!sr.EndOfStream) {
       linea = sr.ReadLine();
       // Buscamos los comodines a reemplazar
       if (Regex.IsMatch(linea, "\"{IP}\";$"))
           linea = Regex.Replace(linea, "{IP}", txtIP.Text, RegexOptions.None);
       
       code.Append(linea + System.Environment.NewLine);
   }

   // Compilamos
   CompilerResults cr = CodeDomProvider.CreateProvider("C#").CompileAssemblyFromSource(cp, code.ToString());
   if (cr.Errors.HasErrors) {
       // Hay errores, los mostramos
       StringBuilder error = new StringBuilder();
       error.Append("Error al compilar: ");
       foreach (CompilerError err in cr.Errors)
       {
           error.AppendFormat("{0}\n", err.ErrorText);
       }
       MessageBox.Show("Error al compilar: " + error.ToString());
       return;
   } else {
       // Copiamos de temporales al lugar deseado
       if (File.Exists(txtLugar.Text))
           File.Delete(txtLugar.Text);
       File.Copy(cr.PathToAssembly, txtLugar.Text);
       File.Delete(cr.PathToAssembly);
   }
}


Aca el codigo completo funcionando:

http://www.mediafire.com/download.php?wjmozjnnmwz



Espero que les sirva!!
#2326
 :D Hoola!

Venia preparando esto desde hace tiempo, pero siempre aparecian algun problema de "cuentas" y se desfiguraba todo jaja  :laugh:

En fin, Tuve que usar threads para una aplicacion que hice, y decidi hacerlo en consola (uff... para que  :xD)

En fin, el programa hacia lo que queria que haga, peeero...  necesitaba ejecutar "comandos" introducidos por el usuario, y a la vez el programa debia reportar algunos  datos al usuario. Como era de suponerse hacia un ReadLine y en otro thread usaba WriteLine cuando era necesario. Ahi surgio un problema, se cruzaba todo haciendo todo ilegible al volver a leer, les pongo un ejemplo grafico:

Escenario: Un servidor de juegos... Al estilo Half-Life  :xD


Log:
Nivel 1 iniciado
esperando respuesta....
_


si yo pongo un comando ("agregar bot 1") pero en medio de la escritura entra un jugador .... se reporta como "Nuevo jugador: -xDMan-", se pone justo apenas terminamos de escribir la letra en la que estabamos, se escribe el reporte y despues nosotros seguimos escribiendo. Queda horrible!!!

Empezamos a escribir el comando:

Log:
Nivel 1 iniciado
esperando respuesta....
agregar b_


Entra el usuario, interrumpiendo nuestro comando

Log:
Nivel 1 iniciado
esperando respuesta....
agregar bNuevo jugador: -xDMan-_


Si seguimos escribiendo (supongamos que no nos dimos cuenta que salio eso)

Log:
Nivel 1 iniciado
esperando respuesta....
agregar bNuevo jugador: -xDMan-ot 1_


y el ReadLine devuelve bien: agregar bot 1

pero cuando lees la consola directa, es total mente ilegible, todo mezclado  :¬¬


y aca idee los metodos necesarios para resolverlo  ;)

Son dos funciones que reemplazan a Console.WriteLine y Console.ReadLine

ReadLine: es muy similar al Console.ReadLine, pero tiene un buffer en el que se guarda el string escrito
WriteLine: lo que hace es "borrar" de la consola lo escrito y poner lo que se quiere introducir, y luego abajo poner exactamente lo que habiamos puesto (desde el buffer :P) y todo haciendo parecer que no paso nada.

Usando mis metodos ReadLine y WriteLine, quedaria asi

Empezamos a escribir el comando:

Log:
Nivel 1 iniciado
esperando respuesta....
agregar b_


Entra el usuario, interrumpiendo nuestro comando

Log:
Nivel 1 iniciado
esperando respuesta....
Nuevo jugador: -xDMan-
agregar b_


seguimos escribiendo como si nada hubiera pasado

Log:
Nivel 1 iniciado
esperando respuesta....
Nuevo jugador: -xDMan-
agregar bot 1_


y el ReadLine devuelve bien (como era de esperarse): agregar bot 1


Como les dije, es una consola al estilo quake (porque en quake se vio la primera consola asi, de ahi el nombre)


Sin mas, aca esta el codigo, A mas de uno le puede servir  ;-)
(no se necesita ninguna referencia, nada, esta todo listo para servir  :laugh:)


Código (csharp) [Seleccionar]

// Si uno hace un WriteLine mientras se espera un ReadLine pasa esto:
// "probando              // Si antes de que ponga la ultima comilla pongo un Console.WriteLine("Hola") queda asi
// "progandoHola
// "
//
// La siguentes funciones estan hechas para evitar eso
// By Raul338 (proximamente: raul338.com.ar)
static string buffer = "";
/// <summary>Escribe un texto sin "cortar" o interrumpir un Console.ReadLine()</summary>
/// <param name="Text">Texto a escribir</param>
static void WriteLine(string Text)
{
    // Guarda la ubicacion actual (la linea se le suma 1, porque es la que sigue)
    int lastLeftPos = Console.CursorLeft;
    int lastTopPos = Console.CursorTop +1;

    // Lineas de lo que se va a escribir y lo escrito a mano
    int lineas = ObtenerLineas(Text);
    int lineasEscritas = ObtenerLineas(buffer);

    // Esto equilibra algunas cuentas
    if (lastTopPos != 0)
        if (lineasEscritas < 1)
            lastTopPos -= 1;

    // Ponemos el cursor al principio de la linea que empezamos a escribir y borramos lo escrito
    Console.SetCursorPosition(0, lastTopPos - lineasEscritas);
    Console.Write("".PadLeft(buffer.Length)); // Aca vaciamos todo :P
    Console.SetCursorPosition(0, lastTopPos - lineasEscritas);

    // Escribimos el texto
    Console.WriteLine(Text);
   
    // Ponemos en el cursor en el nuevo lugar (lugarAnterior + las nuevas lineas)
    Console.SetCursorPosition(0, lastTopPos + lineas - lineasEscritas);

    // Ponemos lo que el usuario habia escrito anteriormente
    Console.Write(buffer);
}

/// <summary>Obtienes las lineas que ocupa el texto introducido en consola</summary>
/// <param name="input">Texto a contar las lineas</param>
/// <returns>Lineas que ocupa en consola</returns>
/// <!-- By Raul338 -->
static int ObtenerLineas(string input)
{
    int lineas = 0;
    // Separamos el texto en lineas
    System.Text.RegularExpressions.Match matchResult = System.Text.RegularExpressions.Regex.Match(input, @"[^\r\n]*(?:\r\n)?");
    while (matchResult.Success)
    {
        // Por alguna razon se incluyen capturas vacias o_O
        if (matchResult.Value != "")
        {
            // La expreision regular tambien cuenta los cierre de lineas, asi que los separamos
            int enter = matchResult.Value.IndexOf(System.Environment.NewLine);

            string final = matchResult.Value;
            if (enter >= 0)
                final = matchResult.Value.Substring(0, enter);

            // Hacemos la division, sera una linea, pero en consola no entra como tal y se dividen en lineas
            lineas += Convert.ToInt32(final.Length / Console.WindowWidth) + 1;
        }
        matchResult = matchResult.NextMatch();
    }
    return lineas;
}

/// <summary>ReadLine 2.0 para poder Escribir a la vez</summary>
/// <returns>El texto escrito</returns>
static string ReadLine()
{
    string result = "";
    // Lee cada tecla presionada
    ConsoleKeyInfo t = Console.ReadKey(false);
    while (t.Key != ConsoleKey.Enter)
    {
        // En caso de que borre, se quita el ultimo caracter
        if (t.Key == ConsoleKey.Backspace && buffer.Length > 0)
        {
            Console.Write(" ");
            Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
            buffer = buffer.Substring(0, buffer.Length - 1);
        }
        else
        {
            // Es un caracter cualquiera, se agrega al string
            buffer += t.KeyChar.ToString();
        }
        t = Console.ReadKey(false);
    }
    Console.WriteLine();
    // Se vacia el buffer y se devuelve lo escrito
    result = buffer;
    buffer = "";
    return result;
}



Y aca un pequeño ejemplo: Un thread con un bucle infinito que muestra numeros sucesivos en la pantalla, y ustedes pueden escribir lo que sea

Código (csharp) [Seleccionar]

static void Main(string[] args)
{
    // Empezamos el relleno
    Thread t = new Thread(Rellena);
    t.Start();

    string comando;
    do
    {
        // Al mismo tiempo que escribimos se separa lo que se va a mostrar de lo que escribimos
        comando = ReadLine();
        WriteLine(DateTime.Now.ToString("HH:mm:ss") + System.Environment.NewLine +" - " + comando);
    } while (comando != "salir");

    t.Abort();
}


// Iteracion infinita para rellenar la consola
static void Rellena()
{
    int i = 0;
    while (true) {
        WriteLine(i.ToString());
        if (i == int.MaxValue) i = 0;
        i++;
        Thread.Sleep(1000);
    }
}



Espero que lo prueben, y les guste  :)

Cualquier critica (constructiva) es recibida   ;)
#2327
(No tomen este mensaje como el mensaje 500 xD)

Simple, ten listo tus archivos cs o vb y ubicas el lugar "a modificar" luego haces como dijo D4N93R o sino, mejor usa las clases CodeDom y lo guardas a un archivo.

No es tan dificil :) solo lee un poco
#2328
PHP / Re: Ejemplo practico de ob_start()
4 Marzo 2010, 01:16 AM
No entiendo que tiene que ver esa funcion con XSS, o sea, no vas a poner un XSS directo en tu pagina, ya que eso lo que hace es imprimir en la salida, por lo que no convendria analizar los datos ahi
#2329
Te di el primer planteo simple que se me vino a la mente, un borrador natural. Vos fijate como cambiarlo para que sea 100% efectivo :¬¬

eres TU el que deberia hacer eso :¬¬
#2330
Son simples operaciones, luego del for haces una resta con el total de los dias :¬¬

Es cuestion de logica y matematica simple :)