КОД В МАЛВАРИ НАЧАЛО Пишем глобальную переменную в коде своей малвари. Длина переменной url[121] должны не быть меньше той, что вы будете в нее записывать. int url[121]{ 'e', 'n', 'j', 'e', 'y', 'u', 'r', 'l' }; C int url[121]{ 'e', 'n', 'j', 'e', 'y', 'u', 'r', 'l' }; Когда будут произведены манипуляции с билдером, приведем наши данные в string string inttostr(int integral[], int size) { string data; for (int i = 0; i < size; i++) { data += (char)(integral[i]); } return data; } C string inttostr(int integral[], int size) { string data; for (int i = 0; i < size; i++) { data += (char)(integral[i]); } return data; } string url_ = inttostr(url, sizeof(url) / sizeof(*url)); // url_ примет значение которые было введено в билдере. C string url_ = inttostr(url, sizeof(url) / sizeof(*url)); // url_ примет значение которые было введено в билдере. КОД В МАЛВАРИ КОНЕЦ КОД В БИЛДЕРЕ НАЧАЛО Читаем нашу заранее скомпилированную марварь (Стаб) со всем исполнительным кодом + нашей переменной. В стабе уже должен быть код с использованием нашей переменной, пример будет ниже. vector<unsigned char> stub_bytes; // ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ ifstream stubf("stub.exe", std::ios::binary); // stub.exe - находится в одной директории с нашим билдером. while (!stubf.eof()) { stub_bytes.push_back(stubf.get()); } stubf.close(); C vector<unsigned char> stub_bytes; // ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ ifstream stubf("stub.exe", std::ios::binary); // stub.exe - находится в одной директории с нашим билдером. while (!stubf.eof()) { stub_bytes.push_back(stubf.get()); } stubf.close(); Далее ищем в нашем файле смещение на нашу переменную и записываем его. int findVar(vector<unsigned char> bytes, string tofind) { int start = 0; for (int i = 0; i < bytes.size(); i++) { for (int a = 0; a <= tofind.size(); a++) { if (a == 0) start = i; if (bytes[i + a] == tofind[a]) { i += 3; //cout << tofind[a] << " " << i << endl; if (a == tofind.size()) { return start; } } else { goto next; } } next:; } return 0; } C int findVar(vector<unsigned char> bytes, string tofind) { int start = 0; for (int i = 0; i < bytes.size(); i++) { for (int a = 0; a <= tofind.size(); a++) { if (a == 0) start = i; if (bytes[i + a] == tofind[a]) { i += 3; //cout << tofind[a] << " " << i << endl; if (a == tofind.size()) { return start; } } else { goto next; } } next:; } return 0; } Пример использования функции выше: int url_start = findVar(stub_bytes, "enjeyurl"); if (url_start == 0) cout << "[ENJEY LOG] Offset url is not found") << endl; C int url_start = findVar(stub_bytes, "enjeyurl"); if (url_start == 0) cout << "[ENJEY LOG] Offset url is not found") << endl; Далее будет код замещения нашей старой переменной, на новую. void setVar(int offset, int size, string toset) { int stringcout = 0; for (int i = 0; i < size * 4; i += 4) { stub_bytes[offset + i] = (char)toset[stringcout]; stringcout++; } } C void setVar(int offset, int size, string toset) { int stringcout = 0; for (int i = 0; i < size * 4; i += 4) { stub_bytes[offset + i] = (char)toset[stringcout]; stringcout++; } } И пример к функции выше: string neurl; std::getline(cin, neurl); // вводим данные в консоль if (neurl.length() < 100) error("[ENJEY LOG] URL size invalid"); setVar(url_start, neurl.size(), neurl); C string neurl; std::getline(cin, neurl); // вводим данные в консоль if (neurl.length() < 100) error("[ENJEY LOG] URL size invalid"); setVar(url_start, neurl.size(), neurl); Пишем наши измененные байты в новый файл. ofstream build("build.exe", ios::binary); for (int i = 0; i < stub_bytes.size(); i++) build << stub_bytes[i]; build.close(); C ofstream build("build.exe", ios::binary); for (int i = 0; i < stub_bytes.size(); i++) build << stub_bytes[i]; build.close(); КОД В БИЛДЕРЕ КОНЕЦ