El ensamblador .NET orientado a objetos
By: Date: agosto 19, 2006 Categories: Programación

La parte que realmente no me gusta del .NET es su facilidad para hacerle
ingeniería inversa, el ensamblador de .NET es tan apegado a su código fuente C# 
que leerlo en ensamblador es prácticamente igual a leerlo en C#.

Seguramente y sin ninguna dificultad se podría escribir herramientas que
desensamblen programas .NET y que entreguen el código fuente en C# o VS.NET y no
seria difícil, de hecho pondré los códigos en C#, BOO y Visual Basic del
ensamblador del MSGBOX, Ahora solo faltaría una herramienta que convierta el
código binario (EXE) a lenguajes fuentes .NET Existen para convertir de C# a BOO
y VB, pero aun no encuentro uno que obtenga el código fuente desde su binario.

Código en ensamblador de un MSGBOX

.assembly msgbox
{
}

.namespace msgbox
{
.class public auto ansi beforefieldinit mensaje
extends [mscorlib]System.Object
{

.method public hidebysig specialname rtspecialname
instance default void .ctor () cil managed
{

.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void object::.ctor()
IL_0006: ldstr "Hola programadores de Solo Codigo"
IL_000b: ldstr "Ventana de Mensajes"
IL_0010: ldc.i4.0
IL_0011: call valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult
class

[System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string,
valuetype

[System.Windows.Forms]System.Windows.Forms.MessageBoxButtons)
IL_0016: pop
IL_0017: ret
}

.method private static hidebysig
default void Main (string[] args) cil managed
{

.entrypoint

.maxstack 8
IL_0000: newobj instance void class msgbox.mensaje::.ctor()
IL_0005: pop
IL_0006: ret
}

}
}

Una imagen del programa para ver como se compila, yo use los compiladores de
Mono.NET en Windows

Ahora el código en C#

using System.Windows.Forms;
using System;

namespace msgbox
{

public class mensaje
{
public mensaje()
{
MessageBox.Show ("Hola programadores de Solo Codigo","Ventana de Mensajes",
MessageBoxButtons.OK);
}
static void Main (String[] args)
{
mensaje mensaje = new mensaje();
}

}
}

El mismo programa en BOO

namespace msgbox

import System.Windows.Forms
import System

public class mensaje:

public def constructor():
MessageBox.Show(‘Hola programadores de Solo Codigo’, ‘Ventana de Mensajes’,
MessageBoxButtons.OK)

private static def Main(args as (string)):
mensaje = mensaje()

mensaje.Main(argv)

y por que no, en Visual Basic. NET

Imports System.Windows.Forms
Imports System
Namespace msgbox
Public Class mensaje
Public Sub New()
MessageBox.Show("Hola programadores de Solo Codigo", "Ventana de Mensajes",
MessageBoxButtons.OK)
End Sub
Private Shared Sub Main(ByVal args As String())
Dim mensaje As New mensaje()
End Sub
End Class
End Namespace

Es increible la silimitud que tienen todos los lenguajes .NET, aunque no debe
ser para sorprenderse pues al final de cuentas hasta su ensamblador es orientado
a objetos y la programación orientada a objetos siempre es muy similar sin
importar la sintaxis del lenguaje que la emplea.

2 thoughts on “El ensamblador .NET orientado a objetos

  1. Mozilla Firefox 1.5.0.6 Windows Server 2003

    Ya existe:
    http://www.aisto.com/roeder/dotnet/

    Bajate alguno de los plugins para sacar el codigo fuente.
    Por otro lado, se supone que pasarlo al IL o MSIL en el caso de MS .Net permite que exista una independencia de la plataforma (los assemblies de 32bits corren en 64bits y todo eso), pero aun asi tambien es posible compilarlos con el NGEN que en si genera el codigo nativo para el equipo a donde va dirigido (VS 2005 trae crosscompiler para pocket pc y 64bits).

    Tambien (VS 2003-2005) traen una aplicacion para obfuscar el codigo dentro de la misma suite para asi saltar el inconveniente de poder facilmente hacerle ingenieria inversa a tu codigo, es mas, como Buena practica, te recomiendan ofuscar el codigo que sea lanzado como releases y manejar normalmente solo el codigo en su etapa de desarrollo.

  2. Internet Explorer 6.0 Windows XP

    Baje el reflector, es increible la exactitud de la recuperacion del codigo fuente. De hecho va mas lejos de lo que esperaba. incluso entrega codigo delphi por si C# no era suficiente =)

Responder a Dark Zen Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *