|
184
|
Programación / .NET (C#, VB.NET, ASP) / Re: ayudaa traductor
|
en: 6 Mayo 2012, 21:34 pm
|
Programación es ingenio, Programación es saber resolver problemas, Programación es ser eficaz, sencillo y rápido, Programación es practicar.
Los que hemos escrito en este tema, no te hemos respondido por el simple hecho de que vemos que aún eres muy principiante y no es despectivo es que no puedes comenzar con un Lenguaje hoy y pretender hacer un Packer RUNTIME FUD mañana.
Quieres que te diga lo que quieres, lo que necesitas es leer como funciona System.String, sus miembros, métodos, funciones para que sirven y como se usan. Si no me entiendes entonces es señal de que necesitas comenzar por el principio (valga la redundancia) no corras, camina, porque hoy te damos un código para que te copies de él, pero mañana ese programa tendrá un pedazo que no sabes ni como funciona.
|
|
|
185
|
Programación / .NET (C#, VB.NET, ASP) / Re: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite"
|
en: 6 Mayo 2012, 21:26 pm
|
Eso me paso también con TabPageControl, eso ya está resuelto en código, es una Clase llamada LanguageFile, estructura y serializa las propiedades que tengas que almacenar en un archivos que contiene información del lenguaje, el autor, y la parte de los datos con contiene el diccionario serializado. Cuando se quiere cambiar de idioma se crea un objeto LanguageFile que apunta hacia un archivo '*.lng', se llama al Sub Apply, el diccionario se deserializa, y se recorre siguiendo el cada control con Find a través de todos los Parent, una vez que lo encuentra, lee la parte que dice *PROPIEDAD y dependiendo el tipo, lee y asigna el Value del diccionario, de manera distinta, ya que en tiempo de ejecución Reflection te brinda todas las herramientas para jugar con las propiedades de forma no administrada. Aquí está el código, coloco en la siguiente lista cosas que le faltarían hacerle que me han dado flojera Desventajas: - Obtener objetos Form por su nombre, por ahora se le debe decir a Apply cuales son los Form disponibles y su nombre.
- Brindar soporte para todos los tipos de array, por ahora solo tiene para Columns y TabPages.
En Value '#D#' queda comprendido como un salto de línea. Se podría hacer algo con Flags para saber cuando la propiedad a asignar es del tipo Array y tomar las precauciones al colocar Value como valor de la propiedad. Pero como por ahora no me ha servido para lo que quiero me ha dado flojera actualizarla Para el Caso del Tool/MenuStrip se podría crear un Flag especial de modo que en Apply se le trate de una forma particular, probablemente me pondré a hacer eso de los Flags resultaría muy útil. Imports System.Runtime.Serialization, System.IO Imports System.Globalization, System.Reflection Imports System.Runtime.Serialization.Formatters.Binary Imports System.Text <Serializable()> _ Public Class LanguageFile Implements ISerializable Public Event Applied() #Region " Delegados " Public Delegate Sub SetProperty_Delegate( _ ByVal ObjectControl As Control, _ ByVal ObjectName As String, _ ByVal ObjectValue As Object) Public Sub SetProperty( _ ByVal ObjectControl As Control, _ ByVal ObjectName As String, _ ByVal ObjectValue As Object) If ObjectControl.InvokeRequired Then ObjectControl.Invoke(New SetProperty_Delegate(AddressOf SetProperty), _ New Object() {ObjectControl, ObjectName, ObjectValue}) Else ObjectControl.GetType.GetProperty(ObjectName).SetValue( _ ObjectControl, _ ObjectValue, _ Nothing) End If End Sub Public Delegate Function GetProperty_Delegate( _ ByVal ObjectControl As Control, _ ByVal ObjectName As String) As Object Public Function GetProperty(ByVal ObjectControl As Control, _ ByVal ObjectName As String) As Object If ObjectControl.InvokeRequired Then Return ObjectControl.Invoke(New GetProperty_Delegate(AddressOf GetProperty), _ New Object() {ObjectControl, ObjectName}) Else Return ObjectControl.GetType.GetProperty(ObjectName).GetValue( _ ObjectControl, _ Nothing) End If End Function #End Region #Region " Private Fields " Private _ _ShortName As String, _ _Author As String #End Region #Region " Serializable " Protected Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData For Each x As FieldInfo In Me.GetType.GetFields(BindingFlags.NonPublic Or _ BindingFlags.Instance) If x.Name.StartsWith("_") Then info.AddValue(x.Name, x.GetValue(Me)) End If Next 'info.AddValue("_ShortName", _ShortName) 'info.AddValue("_Author", _Author) 'info.AddValue("_Dic", _Dic) End Sub Protected Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) For Each x As FieldInfo In Me.GetType.GetFields(BindingFlags.NonPublic Or _ BindingFlags.Instance) If x.Name.StartsWith("_") Then x.SetValue(Me, info.GetValue(x.Name, x.FieldType)) End If Next '_ShortName = info.GetValue("_ShortName", GetType(String)) '_Author = info.GetValue("_Author", GetType(String)) '_Dic = info.GetValue("_Dic", GetType(Dictionary(Of String, String))) End Sub #End Region #Region " Public Constructors " Public Sub New(ByVal Buffer As Byte()) If Buffer.Length > (1024 ^ 2) Then Throw New OverflowException() Else Dim MStream As New MemoryStream MStream.Write(Buffer, 0, Buffer.Length) MStream.Seek(0, SeekOrigin.Begin) Dim BFormatter As New BinaryFormatter Dim [Me] As LanguageFile = BFormatter.Deserialize(MStream) MStream.Close() MStream.Dispose() MStream = Nothing _Dic = [Me]._Dic _ShortName = [Me]._ShortName _Author = [Me].Author Erase Buffer End If End Sub Public Sub New(ByVal LanguageFile As String) If File. Exists(LanguageFile ) Then Dim LF As New FileInfo(LanguageFile) If LF.Length > (1024 ^ 2) Then Throw New OverflowException(LanguageFile) Else Dim MStream As New MemoryStream Dim FStream As New FileStream(LanguageFile, FileMode.Open, FileAccess.Read) Dim FBuffer As Byte() = New Byte(LF.Length - 1) {} FStream.Read(FBuffer, 0, LF.Length) FStream.Close() FStream.Dispose() FStream = Nothing MStream.Write(FBuffer, 0, FBuffer.Length) MStream.Seek(0, SeekOrigin.Begin) Dim BFormatter As New BinaryFormatter Dim [Me] As LanguageFile = BFormatter.Deserialize(MStream) MStream.Close() MStream.Dispose() MStream = Nothing _Dic = [Me]._Dic _ShortName = [Me]._ShortName _Author = [Me].Author Erase FBuffer End If Else Throw New FileNotFoundException(LanguageFile) End If End Sub Public Sub New(ByVal LanguageFile As String, _ ByVal ShortName As String, _ ByVal Author As String) _Dic = Dic _ShortName = ShortName _Author = Author Dim FStream As New FileStream(LanguageFile, FileMode.Create, FileAccess.Write) Dim MStream As New MemoryStream Dim BFormatter As New BinaryFormatter Dim FBuffer As Byte() BFormatter.Serialize(MStream, Me) FBuffer = New Byte(MStream.Length - 1) {} MStream.Seek(0, SeekOrigin.Begin) MStream.Read(FBuffer, 0, MStream.Length) MStream.Close() MStream.Dispose() MStream = Nothing FStream.Write(FBuffer, 0, FBuffer.Length) FStream.Close() FStream.Dispose() FStream = Nothing Erase FBuffer End Sub #End Region #Region " ReadOnly Properties " Public ReadOnly Property GetString () As Dictionary(Of String, String) Get Return _Dic End Get End Property Public ReadOnly Property Author() As String Get Return _Author End Get End Property Public ReadOnly Property Culture() As CultureInfo Get Return New CultureInfo(_ShortName) End Get End Property #End Region #Region " Public Sub " Public Sub Apply() For Each x As KeyValuePair(Of String, String) In _Dic If Not x.Key.StartsWith("#") Then Dim Tree As String = x.Key.Split("*")(0) Dim PropertyName As String = x.Key.Split("*")(1) Dim Controls As String() = Tree.Split("\") Dim CurrentControl As Control = Nothing If Controls.Length = 1 Then Select Case Controls(0) Case "Form1" 'SetProperty(Form1, PropertyName, x.Value) Case "Form2" 'SetProperty(Form2, PropertyName, x.Value) End Select Else Select Case Controls(0) Case "Form1" 'CurrentControl = Form1 Case "Form2" 'CurrentControl = Form2 End Select For y As Integer = 1 To Controls.Length - 1 CurrentControl = CurrentControl.Controls.Find(Controls(y), False)(0) Next If PropertyName.StartsWith("Columns") Then Dim Index As Integer = PropertyName.Replace("Columns(", "").Replace(")", "") CType(GetProperty(CurrentControl, "Columns")(Index), ColumnHeader).Text = x.Value ElseIf PropertyName.StartsWith("TabPages") Then Dim Index As Integer = PropertyName.Replace("TabPages(", "").Replace(")", "") CType(GetProperty(CurrentControl, "TabPages")(Index), TabPage).Text = x.Value Else SetProperty(CurrentControl, PropertyName, x.Value.Replace("#D#", Environment.NewLine)) End If End If End If Next RaiseEvent Applied() End Sub #End Region End Class
|
|
|
186
|
Programación / .NET (C#, VB.NET, ASP) / Re: ayudaa traductor
|
en: 6 Mayo 2012, 01:39 am
|
System.Text.RegularExpressions.Regex.Replace
Y si, esto se llama .NET, incluso el subforo en el que acabas de escribir sino leíste el título se llama .NET no corras antes de gatear, hacer un traductor no es complicado pero necesitas saber lo básico primero y expresiones regulares es el mejor camino.
|
|
|
187
|
Programación / .NET (C#, VB.NET, ASP) / Re: [SRC] Cargar Idioma desde BD "SharpDevelop 2.2 & SQLite"
|
en: 6 Mayo 2012, 01:30 am
|
Muy bueno, esto es necesario, nuestros programas tienen más oportunidad de progresar mientras más público tengan y eso es igual a tener la aplicación disponible en más lenguajes. Hace tiempo necesite que una aplicación cubriera varios lenguajes, era por archivos locales, pero sigue el mismo principio; se basaba en un Diccionario String, String que como Key guardaba el nombre del control, como llegar a el y la propiedad a asignarle el Value del Diccionario, quiero decir, como que Key podría ser por ejemplo: Form1\Contenedor\Button1*Text y Value Texto en EspañolDe modo que cuando se cargaba el Diccionario que estaba serializado en un archivo, se usaba Split para separar la ruta que lleva al control, usando Find desde la raíz hasta encontrar el Control deseado Form1.Find para obtener el control Contenedor y Contenedor.Find para obtener Button1 luego se asignaba con Reflection la propiedad Text. Para los textos que no guardaban relación con un Control los guardaba con un Key #0001 por ejemplo y seguía #0002, #0003 de modo que al cargar el Diccionario y aplicar las propiedades se ignorara todo lo que comienza con #. Tenía muchos Form e infinidad de Controles por lo qué me ayude con este código que generá el Diccionario: Una que lista todos los controles de un Form y otra que le da el nombre al control en la forma que te mencione antes. Public Function GenerateTreeName(ByVal x As Control) As String GenerateTreeName = x.Name Do While x.Parent IsNot Nothing x = x.Parent GenerateTreeName = x.Name & "\" & GenerateTreeName Loop End Function Public Function ListControls(ByVal x As Control) As List(Of Control) ListControls = New List(Of Control) Dim Parents As New List(Of Control) For Each y As Control In x.Controls If y.HasChildren Then Parents.Add(y) End If ListControls.Add(y) Next For Each y As Control In Parents ListControls.AddRange(ListControls(y)) Next End Function
Realmente me pareció la mejor forma y que resume código de manera increíble.
|
|
|
189
|
Programación / .NET (C#, VB.NET, ASP) / Re: [Spreader] Infectar ejecutables VB.NET
|
en: 1 Mayo 2012, 03:43 am
|
Esto parece ya algo de Abril Negro Tacho para que los sabios de ASM/C++ del foro no se sientan ofendidos con está afirmación . Se me acaba de ocurrir una buena idea pero lleva trabajo La primera vez que MALWARE.EXE se ejecuta crea una copia de MALWARE.EXE con las propiedades de ORIGINAL.EXE pero carga el contenido de ORIGINAL.EXE como una tabla de Bytes en los Resources del ejecutable (habría que comprimir estos datos para ahorra espacio y prevenir la detección), de modo que el ejecutable final sería MALWARE.EXE + PROPIEDADES DE ORIGINAL.EXE + EJECUTABLE ORIGINAL.EXE guardado en los recursos como Array de Bytes. De modo que al abrir MALWARE.EXE (resultante) se descomprima y escriba temporalmente en el disco ORIGINAL.EXE y se ejecute, antecediendo el código de MALWARE.EXE que podría proseguir con otro ejecutable más, de manera que cada vez que que MALWARE.EXE o MALWARE.EXE (resultante) sean ejecutados iniciara el archivo ORIGINAL.EXE normalmente y se infectarán cada vez más ejecutables hasta que todos estén infectados.
|
|
|
190
|
Programación / .NET (C#, VB.NET, ASP) / Re: [Spreader] Infectar ejecutables VB.NET
|
en: 1 Mayo 2012, 01:47 am
|
Para modificar las propiedades de un ejecutable son necesarias las APIs BeginUpdateResource, UpdateResource y EndUpdateResource. Hay documentación en Google. Por esto te digo Windows va desde el PE hasta el final del ejecutable de allí lo que sobra Windows no lo carga. Los pasos que deberías seguir serían copiar el ejecutable malicioso bajo el nombre del original reemplazándolo, llenar con contenido aleatorio el ejecutable malicioso hasta obtener el tamaño del original, colocar el TimeSpan original y colocar las propiedades así como los iconos del original usando las APIs que Windows te proporciona.
Estás APIs son un poco ortodoxas pero son fáciles de usar. así como todas las demás y el Windows mismo XD
|
|
|
|
|
|
|