Una duda sobre un programa con "Codigo fuente"

Iniciado por zalazar16, 15 Julio 2017, 15:43 PM

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

zalazar16

Amigos del foro, os planto una duda, tengo un sistema hecho en .net pero perdí el código original y el creador ya no da soporte...

él me pasó un supuesto "Código Fuente"  :huh: pero al abrirlo con Visual S. me lanza muchos errores y me parece más bien que la persona trató de desamblar el exe con un programa llamese reflector, ilspy no sé... Si pudieran hacer algo para visualizar aunque sea el form sin código solo la parte de diseñador se los agradecería mucho  ;-).

aqui les dejo un enlace con el "CF", la base de access que usa y el exe normal.

https://www.mediafire.com/?hd559ux28nlup5t
https://www.mediafire.com/?stwc47c8zu8f4do

karmany

Hola.
He echado un vistazo un poco por encima al exe y sacar aunque sea el formulario no es sencillo. Esto es porque he usado varios programas (por ejemplo ILspy) y de ellos se obtiene un archivo .resources.
Este archivo resources, según recuerdo, es una especie de archivo compilado de los recursos .resx que están en XML, así que si tienes Visual Basic instalado puedes, desde la línea de comandos hacer lo siguiente (la ruta es posible que no sea exactamente igual):

Código (dos) [Seleccionar]
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.

...

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin>resgen.exe /compile archivo.resources,archivo.resx
Leer en 911 recursos de "archivo.resources"
Escribiendo el archivo de recursos...  Listo.


Y ahí obtendrás el archivo, archivo.resx. Si analizas el mismo, desde un editor cualquiera, verás que no aparecen la posición ni el tamaño tanto del formulario como de otros controles. He intentado importarlo en un nuevo proyecto C#, pero arroja muchos errores, tantos como recursos hay...
Me gustaría analizarlo más pero no tengo tiempo... posiblemente algún .NET resourcer más potente como NET Reflector... a ver si alguno/a puede analizarlo...

Respecto al código fuente, hay que reconocer que por ejemplo ILSpy te resuelve gran parte del mismo:
Código (vbnet) [Seleccionar]
Private Sub RESULTADOS()
Me.GroupBox8.set_Visible(True)
Me.DateTimePicker5.set_Visible(True)
Me.ListBox9.get_Items().Clear()
Dim dateTimePicker As DateTimePicker = Me.DateTimePicker5
Dim text As String = dateTimePicker.ToString()
Me.fec1 = Strings.Mid(text, 44, 11)
Me.fec1 = Strings.Trim(Me.fec1)
Me.VFE1 = "  "
Me.VFE2 = "  "
Me.VFE3 = "    "
Dim text2 As String = Me.fec1
Me.VFE1 = Strings.Mid(text2, 1, 2)
Me.VFE2 = Strings.Mid(text2, 4, 2)
Me.VFE3 = Strings.Mid(text2, 7, 4)
Me.vfecha = DateType.FromString(String.Concat(New String() { Me.VFE1, "/", Me.VFE2, "/", Me.VFE3 }))
Me.ListBox9.set_Visible(True)
Me.Button12.set_Visible(True)
Me.Button13.set_Visible(True)
Dim oleDbConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BD2.mdb")
Dim text3 As String = "select serial,caja,jugada,premio,pagado from premios where fecha=@vfecha order by cod"
Dim oleDbCommand As OleDbCommand = New OleDbCommand(text3, oleDbConnection)
oleDbCommand.set_CommandType(1)
oleDbCommand.get_Parameters().Add("@vfecha", Me.vfecha)
oleDbConnection.Open()
Dim oleDbDataReader As OleDbDataReader = oleDbCommand.ExecuteReader()
Me.ListBox9.get_Items().Add("CAJA NUMERO:   TODAS                                  ")
Me.ListBox9.get_Items().Add("DESDE:                                                ")
Me.ListBox9.get_Items().Add("HASTA:                                                ")
Me.ListBox9.get_Items().Add("Serial           Cj Jugada           Premio  P  ")
Me.ListBox9.get_Items().Add("======================================================")
While oleDbDataReader.Read()
Dim text4 As String = oleDbDataReader.get_Item(0).ToString()
Dim text5 As String = oleDbDataReader.get_Item(1).ToString()
Dim text6 As String = oleDbDataReader.get_Item(2).ToString()
Dim text7 As String = oleDbDataReader.get_Item(3).ToString()
Dim text8 As String = oleDbDataReader.get_Item(4).ToString()
If Conversion.Val(text7) > 0.0 Then
Me.ListBox9.get_Items().Add(String.Concat(New String() { text4, "  ", text5, " ", text6, "  ", vbTab, "  ", text7, "  ", text8 }))
End If
End While
oleDbConnection.Close()
oleDbDataReader.Close()
End Sub

Eleкtro

#2
Madre del amor hermoso, vaya un código, en el peor sentido posible... ¡qué código!. En el form1.vb hay +18.000 lineas de código, cualquier modificación de 1 solo caracter me tarda 1 minuto en aplicarse xD (en un disco SSD).

La hipótesis de que este código lo hayan generado mediante una herramienta que analice las instrucciones IL y mediante Reflection y tal represente el código en el lenguaje VB.NET, a mi no me convence demasiado, por que yo veo bastantes incongluencias las cuales considero que ese tipo de herramientas no generarían de forma intencionada, sin ir más lejos el echo de asignar un valor entero y otro hexadecimal en los argumentos de un constructor: point = New Point(280, &H98), pero bueno, quizás me equivoco.
En mi opinión, cabe la posibilidad de que simplemente hayan usado cualquier herramienta de automatización de traducción de C# a VB.NET para convertir el proyecto original escrito en C#, a VB.NET, y de ahí tantos errores de compilación, un completo desorden de estructurización del código, la completa ausencia de la clausula Handles, y otras cosas varias...

En el código fuente que has compartido, el tamaño y posición de los controles se estaba especificando mediante una variable llamada "point", y otra "size", esta última entraba en conflicto con la propiedad Form.Size. Las referencias de los controles, así como la asociación de eventos de los controles, estaban definidos mediante propiedades, lo cual es muy típico de ver en conversores de código C# a VB.NET.

En fin, he corregido todos los errores de compilación (no eran muchos), he reconstruido la parte del diseñador de Forms, y las asociaciones de eventos de los controles. Los warnings en el código fuente que has compartido, los cuales eran cerca de 850 los he ignorado todos, muchos de ellos se deben a estar utilizando miembros considerados obsoletos en la librería de clases de .NET Framework y a fin de cuentas no parecen entrar en conflicto con el funcionamiento de la aplicación.

...Casi toda la reconstrucción consistió en escribir pequeños algoritmos de parsing y edición de texto.

Este es el resultado final en el diseñador de Forms:



Y así es como se ve la interfáz de usuario tras compilar y ejecutar:



( por los colores oscuros no te preocupes, se ven así por que estoy utilizando un tema visual de terceros en Windows ... )

Aquí tienes el proyecto con las modificaciones que he realizado, en Visual Studio 2017.


Que aproveche ;).

Saludos!








zalazar16

Muchísimas gracias a todos! son nos genios en esto la verdad... Hoy fue que pude revisar esto, desde hace 2 dìas el programa original lo estuve revisando un poco con la heraamienta .net Reflector y bueno no podìa lidiar con unos cuantos errores.... Ahora bien si se dieron cuenta el que hizo el "Brillante programa" tuvo la genialidad de en vez de hacer formularios aparte para cada ventana....... Utilizó GroupBoxes :-\ :-\ :-\ :-\.... si vieron el código fuente verán que que tedioso es eso.. ayer tratè de modificar algo mal escrito y ya se había desconfigurado todo.. ahora trataré, aunque no se como la verdad jajajaja, de pasar cada uno de esos groupbox a formularios. Feliz dìa :rolleyes: ;D