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 - krosty123

#1
Llamo a la api, para poder modificar el recurso de una aplicacion desde otra, es la unica manera que encontre.
Los exes estan hechos en c# ambos.
Saludos
#2
estuve probando varias maneras de cambiar los rescursos de un exe, al final lo que ando usando es:

Código (csharp) [Seleccionar]

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

namespace WindowsFormsApplication1
{
   static class Program
   {
       /// <summary>
       /// The main entry point for the application.
       /// </summary>
       [STAThread]
       [DllImport("kernel32.dll", SetLastError = true)]
       static extern IntPtr BeginUpdateResource(string pFileName, bool bDeleteExistingResources);
       [DllImport("kernel32.dll", SetLastError = true)]
       static extern bool UpdateResource(IntPtr hUpdate, string lpType, string lpName, ushort wLanguage, IntPtr lpData, uint cbData);
       [DllImport("kernel32.dll", SetLastError = true)]
       static extern bool EndUpdateResource(IntPtr hUpdate, bool fDiscard);
       static unsafe void Main()
       {
           string path = "c:\\users\\sean\\desktop\\resourcer.exe";

           IntPtr hResource = BeginUpdateResource(path, false);
           if (hResource.ToInt32() == 0)
               throw new Exception("File Not Found");
 
           string newMessage = File.ReadAllText("c:\\users\\sean\\desktop\\newMessage.txt");
           Byte[] bytes = new ASCIIEncoding().GetBytes(newMessage);
           GCHandle bHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
           IntPtr ptr = bHandle.AddrOfPinnedObject();

           ushort id = (ushort)Language.MakeLanguageID();

           if (UpdateResource(hResource, "FILE", "eva.txt", id, ptr, (uint)bytes.Length))
               EndUpdateResource(hResource, false);
           else
               MessageBox.Show("Did not update", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
       }
   }
   public static class Language
   {

       public static int MakeLanguageID()
       {
           CultureInfo currentCulture = CultureInfo.CurrentCulture;
           int pid = GetPid(currentCulture.LCID);
           int sid = GetSid(currentCulture.LCID);
           return (((ushort)pid) << 10) | ((ushort)sid);
       }


       public static int GetPid(int lcid)
       { return ((ushort)lcid) & 0x3ff; }


       public static int GetSid(int lcid)
       { return ((ushort)lcid) >> 10; }

   }
}



Para ver si funciona lo que hago es "descomprimir" el recurso del exe modificado.
Supuestamente deberia mostrar el nuevo .txt, pero no... cuando lo abro contiene el texto viejo.

Lo que hago para descomprimir los recursos del exe modificado es:
Código (csharp) [Seleccionar]


     string strNewPathToSave = "new.txt";

     Assembly assembly = Assembly.GetExecutingAssembly();

     Stream resourceStream = assembly.GetManifestResourceStream("WindowsFormsApplication2.Resources.eva.txt");

     System.IO.FileStream fs = System.IO.File.OpenWrite(strNewPathToSave);

     try

     {

     // Save the File...
 
     byte[] buffer = new byte[resourceStream.Length];

     resourceStream.Read(buffer, 0, (int)resourceStream.Length);

     fs.Write(buffer, 0, buffer.Length);

     }

     finally

     {

     fs.Close();

     }


Redondeando....
Con exe1 cambio un recurso de exe2 (un .txt). Despues abro el exe2 y descomprimo el recurso .txt . Este en lugar de mostrar el nuevo texto, muestra el texto del recurso original.
Alguna idea?

Saludos
#3
La idea es que el ini este cargado como recurso dentro del servidor.
Por lo tanto, no puede ser modificado por nadie y siempre existiria ya que al crearse el server, este ya viene con el recurso.
De todas formas voy a revisar el post que decis, ya que me interesa saberlo.
Por otro lado, voy a postear una duda que me salio usando updateresource.
Saludos, gracias.
#4
Ya esta, estuve mirando un code y la idea que me salio es.
Poner como embededresource el exe servidor.
Que el cliente cuando se crea el servidor "descomprima" el server que esta como recurso, y que a la vez cuando se crea recopile la informacion de configuracion que pusimos y la guarde en un ini.
Que ese exe servidor cargue del ini la info y listo ;)
Gracias
#5
Solo serian parametros.
Digamos que elija puerto y direccion.
Si quisera incluir un chekcbox cambiara mucho ?
Digamos, si un checkbox esta activado que haga x funcion y sino que no la haga.
Eso seria secundario, lo que necesitaria mas que nada seria el tema de cambiar parametros, pero igual no vendria mal aprender lo otro para saber nomas.
Saludos
#6
Hola a todos.
Tengo una duda aver si alguien puede ayudarme.
Como se puede hacer para que desde una aplicacion se genere otra basada en unos parametros ingresados en la app1.
Para dar un ejemplo, el creador del servidor de cualquier troyano.
Durante la ejecucion del cliente hay una opcion para generar el servidor eligiendo puerto ip de conexion etc.
Se me ocurre que lo que hacen es tener el codigo del servidor ya armado leerlo y luego modificar solamente una parte (la del puerto y ip). El tema es que si uno borra el servidor por defecto este se genera igual, por lo tanto lo que esta haciendo no es modificar un exe ya creado, sino crearlo desde 0 con los parametros elegidos.
La duda viene entonces a como poder hacer esto.
Muchas gracias
#7
Mmm no, probe poniendo solo if buffer == '*' y sale exactamente el mismo error, cuando i llega a 16.444 crashea.
Saludos
#8
Programación C/C++ / El for() no reconoce las marcas
17 Septiembre 2010, 22:10 PM
Hola que tal, el problema es el siguiente, cuando el programa se ejecuta y hace un for en busca de unas marcas ( '*' y '°') este no las encuentra.
Depure el programa y lo que me salio fue: "Se ha producido una violacion de acceso a memoria", el contador i estaba en: "16444".
El codigo de busqueda es el siguiente:



for(int i=0;i<tamanio;i++)
 {
         if(buffer[i] == '*' && buffer[i+1] == '*')
         {
               exe1 = buffer+i+2;
               a = i+2;
               break;        
         }


Y el codigo donde se agregan las marcas es el siguiente:



void crearFichero(char* buffer1, int tamanio1, char* buffer2, int tamanio2)
{
 char info[1];
 char info2[1];
 info[0] = '*';
 info[1] = '*';
 info2[0] = '°';
 info2[1] = '°';
 CopyFile("main.exe","bindedm.exe",TRUE);
 ofstream escritura1("bindedm.exe", ofstream::binary | ofstream::app);
 escritura1.write(info, strlen(info));
 escritura1.write(buffer1, tamanio1);
 escritura1.write(info2, strlen(info2));
 escritura1.write(buffer2, tamanio2);
 escritura1.close();
}


Aver quien me da una mano.
Gracias