anun1

lunes, 23 de febrero de 2026

Remplazar string de un archivo ejecutable o binario en C++

Hola, amigos hoy les dejaré un código en c++ el cual remplazar un valor Spring por otro desde c++, ya que en JavaScript no pude hacerlo y no me quise complicar la vida lo realice en c++, este programa o ejercicio como lo quieran llamar primeramente lo mire de un amigo, no sé si fue necroxia u otro usuario del grupo crackslatinos no recuerdo quien, pero él lo realizo en aquel tiempo en vb6, pero como vb6 ya quedo para la historia yo lo realice en otro lenguaje.

Nota:este programa no remplaza o lee valores Unicode

bueno aquí una imagen del ejecutable que le vamos a remplazar el string, solo al darle clic nos muestra esto

.

Bueno ahora abriremos el editor de c++ y pegamos el siguiente código
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    string ruta,buscar,reemplazar; //Evaluation  felicidade
    
    cout<<"Dame la ruta del archivo: ";
    cin>>ruta;
    
    cout<<"Dame el texto a buscar: ";
    cin>>buscar;
    
    cout<<"Dame el texto a remplazar, DEBE SER DE LA MISMA CANTIDAD DE CARACTERES: ";
    cin>>reemplazar;

    if (buscar.size() != reemplazar.size())
    {
        cout << "Error: deben tener el mismo tamaño\n";
        return 1;
    }

    // Abrir archivo
    fstream file(ruta, ios::binary | ios::in | ios::out);

    if (!file)
    {
        cout << "No se pudo abrir\n";
        return 1;
    }

    // Leer todo el archivo
    file.seekg(0, ios::end);
    streamsize size = file.tellg();
    file.seekg(0, ios::beg);

    vector<char> buffer(size);
    file.read(buffer.data(), size);

    // Buscar
    auto it = search(buffer.begin(), buffer.end(),
                     buscar.begin(), buscar.end());

    if (it == buffer.end())
	{
        cout << "Texto no encontrado...Nota:Este programa no lee valores unicode\n";
        file.close();
        return 1;
    }

    // Calcular posición
    streamsize pos = distance(buffer.begin(), it);

    cout << "Encontrado en: " << pos << endl;

    // Reemplazar en memoria
    for (size_t i = 0; i < reemplazar.size(); i++)
    {
        buffer[pos + i] = reemplazar[i];
    }

    // Volver al inicio y escribir todo
    file.seekp(0, ios::beg);
    file.write(buffer.data(), size);

    file.close();

    cout << "Reemplazo completado\n";

    return 0;
}

Damos compilar y ejecutar



El ejecutable que tome como ejemplo es un crackme llamado reverseMe.exe y lo tengo en la misma carpeta donde tengo el código de este programa por esa razón solo puse su nombre y no toda una ruta.


La palabra a buscar es license y la remplazaré por 1234567 y al hacerlo me muestra el mensaje que se realizó con éxito así que ahora ejecutamos el crackme y me muestra el siguiente mensaje


Bueno creo que eso es todo y espero les guste, otra cosa ya tengo la solución de ese crackme, es algo sencillo a ver si lo publico en el foro del hacker.net y en underc0de

Nos vemos hasta la próxima Flamer y saludos a necroxia y a todos los Crackslatinos


No hay comentarios.:

Publicar un comentario