Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |  |
небольшая проблемка 06.01.02 21:32 Число просмотров: 998
Автор: dron <Ivanov Andrey> Статус: Member
|
> В обоих файлах - и в "трояне" и в настройщике делаешь свою > структуру со всеми значениями, строки делаешь как char > string[0x100]; или 0х200 или 0х1000, скока те хватит, думаю > 0х100 хватит, > > потом в настройщике делаешь например так: > > typedef struct > { > char string1[0x100]; > char string2[0x100]; > int i1; > int i2; > }Params; > > Params *data = new Params; > > memset(data, 0, sizeof(Params)); > strcpy(data->string1, "string1"); > strcpy(data->string2, "string2"); > data->i1 = 100; > data->i2 = 666; > > FILE * f; > f = fopen(path_to_exe, "r+b"); > if(f) > { > > fseek(f, 0, SEEK_END); > fwrite(data, 1, sizeof(Params), f); > fclose(f); > } > > if(data) delete data; > > Потом в самом "трояне" нужно иметь такуюже структуру, > Ещо нада знать размер твоего "трояна" > када запускаеца "троян", > > делаешь так > > char exe[0x100]; > GetModuleFileName(NULL, exe, sizeof(exe)); > > Params *data = new Params; > memset(data, 0, sizeof(Params)); > FILE *f; > f = fopen(exe, "r+b"); > if(f) > { > fseek(f, РЕАЛЬнЫЙ_РАЗМЕР_ФАЙЛА, SEEK_SET); > fread(data, 1, sizeof(Params), f); > fclose(f); > } > > А дальше юзаешь из структуры свои записанные данные, > data->string1 и т.д. Спасибо за совет, но вот недавно быстренько попробовал, и получил, то, что и думал: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process. ). Так как процесс использует собственный exe, то прочитать данные невозможно. Есть ли выход из этой ситуации?
|
|
<programming>
|
[C++] каким методом надо пользоваться при изменении настроек exe-файла?... 03.01.02 18:35
Автор: dron <Ivanov Andrey> Статус: Member
|
|
конкретнее: есть прога, состоящая из одного exe-шника (настроечные файлы и ключи реестра не ипользуется), надо чтобы другая прога могла вгонять в первую прогу разные значения, например разные ip адреса куда надо слать данные. По идее можно найти смещение в файле, где лежит нужное значение, и прямо туда вписывать другое, но, а если данные разного размера (например ip-адреса). Я знаю, что есть куча исходников, но просто очень мало времени, подскажите если не сложно. Спасибо!
|
 |
[C++] каким методом надо пользоваться при изменении настроек exe-файла?... 03.01.02 23:10
Автор: ggg <ggg> Статус: Elderman
|
> конкретнее: есть прога, состоящая из одного exe-шника > (настроечные файлы и ключи реестра не ипользуется), надо > чтобы другая прога могла вгонять в первую прогу разные > значения, например разные ip адреса куда надо слать > данные. По идее можно найти смещение в файле, где лежит > нужное значение, и прямо туда вписывать другое, но, а если > данные разного размера (например ip-адреса). Я знаю, что > есть куча исходников, но просто очень мало времени, > подскажите если не сложно. Спасибо!
1) interprocess communications
(сообщения, разделяеая память,...)
это если проги могут работать одновременно и нет трудности в изменении самих прог (есть исходники)
2) если у тебя только чужой бинарник, то простых способов нет (особенно если учесть что автор скорее всего постарался защитить свою прогу)
3) если это твоя прога, то пиши данные в конец файла, как это делают архиваторы
это по сути тот же настроечный файл получается
|
 |  |
а как сделать так, чтобы значение переменной было в конце файла? 03.01.02 23:32
Автор: dron <Ivanov Andrey> Статус: Member
|
> 1) interprocess communications > (сообщения, разделяеая память,...) > это если проги могут работать одновременно и нет трудности > в изменении самих прог (есть исходники) > > 2) если у тебя только чужой бинарник, то простых способов > нет (особенно если учесть что автор скорее всего постарался > защитить свою прогу) > > 3) если это твоя прога, то пиши данные в конец файла, как > это делают архиваторы > это по сути тот же настроечный файл получается
Нужен именно последний случай, прога моя (аля троян), нужно, чтоб перед закидыванием ее куда-нибудь, задался айпи почтового сервака, куда она будет слать некоторые данные. Можно ли задать стрковый массив char buf[255], найти его смещение, и впихивать по этому смещению null-terminated string?
|
 |  |  |
а как сделать так, чтобы значение переменной было в конце файла? 04.01.02 17:49
Автор: LiNX Статус: Незарегистрированный пользователь
|
Можно, если:
1. Если вместо null-terminated string использовать null-terminated char - связываться с классами или как-то еще "совершенствовать" прогу, имхо, не стоит.
2. Функция, которая считывает null-terminated char ориентирована именно на него (начало массива и нулевой его завершающий символ),- просто есть функции, ориентированные на начало массива и конкретное количество байт в нем.
|
 |  |  |
Кароче! делаеца это так!! 04.01.02 01:28
Автор: ih8u <i hate you> Статус: Member
|
В обоих файлах - и в "трояне" и в настройщике делаешь свою структуру со всеми значениями, строки делаешь как char string[0x100]; или 0х200 или 0х1000, скока те хватит, думаю 0х100 хватит,
потом в настройщике делаешь например так:
typedef struct
{
char string1[0x100];
char string2[0x100];
int i1;
int i2;
}Params;
Params *data = new Params;
memset(data, 0, sizeof(Params));
strcpy(data->string1, "string1");
strcpy(data->string2, "string2");
data->i1 = 100;
data->i2 = 666;
FILE * f;
f = fopen(path_to_exe, "r+b");
if(f)
{
fseek(f, 0, SEEK_END);
fwrite(data, 1, sizeof(Params), f);
fclose(f);
}
if(data) delete data;
Потом в самом "трояне" нужно иметь такуюже структуру,
Ещо нада знать размер твоего "трояна"
када запускаеца "троян",
делаешь так
char exe[0x100];
GetModuleFileName(NULL, exe, sizeof(exe));
Params *data = new Params;
memset(data, 0, sizeof(Params));
FILE *f;
f = fopen(exe, "r+b");
if(f)
{
fseek(f, РЕАЛЬнЫЙ_РАЗМЕР_ФАЙЛА, SEEK_SET);
fread(data, 1, sizeof(Params), f);
fclose(f);
}
А дальше юзаешь из структуры свои записанные данные,
data->string1 и т.д.
Кстати, навена все мыльные трояны настраиваюца таким вот образом,
и ещо,
если нада скрыть данные, то мона их при записи пошифровать,
и разшифровывать при чтении!
УДАЧИ!!
|
 |  |  |  |
небольшая проблемка 06.01.02 21:32
Автор: dron <Ivanov Andrey> Статус: Member
|
> В обоих файлах - и в "трояне" и в настройщике делаешь свою > структуру со всеми значениями, строки делаешь как char > string[0x100]; или 0х200 или 0х1000, скока те хватит, думаю > 0х100 хватит, > > потом в настройщике делаешь например так: > > typedef struct > { > char string1[0x100]; > char string2[0x100]; > int i1; > int i2; > }Params; > > Params *data = new Params; > > memset(data, 0, sizeof(Params)); > strcpy(data->string1, "string1"); > strcpy(data->string2, "string2"); > data->i1 = 100; > data->i2 = 666; > > FILE * f; > f = fopen(path_to_exe, "r+b"); > if(f) > { > > fseek(f, 0, SEEK_END); > fwrite(data, 1, sizeof(Params), f); > fclose(f); > } > > if(data) delete data; > > Потом в самом "трояне" нужно иметь такуюже структуру, > Ещо нада знать размер твоего "трояна" > када запускаеца "троян", > > делаешь так > > char exe[0x100]; > GetModuleFileName(NULL, exe, sizeof(exe)); > > Params *data = new Params; > memset(data, 0, sizeof(Params)); > FILE *f; > f = fopen(exe, "r+b"); > if(f) > { > fseek(f, РЕАЛЬнЫЙ_РАЗМЕР_ФАЙЛА, SEEK_SET); > fread(data, 1, sizeof(Params), f); > fclose(f); > } > > А дальше юзаешь из структуры свои записанные данные, > data->string1 и т.д. Спасибо за совет, но вот недавно быстренько попробовал, и получил, то, что и думал: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process. ). Так как процесс использует собственный exe, то прочитать данные невозможно. Есть ли выход из этой ситуации?
|
 |  |  |  |  |
убери плюс из fopen() 06.01.02 21:42
Автор: ggg <ggg> Статус: Elderman
|
|
|
 |  |  |  |  |  |
спасибо!!! а я ламер креатфайл юзал, а там пока все параметры правильно выставишь опупеешь 06.01.02 22:47
Автор: dron <Ivanov Andrey> Статус: Member
|
|
особенно если программить толком не умеешь
|
 |
[C++] каким методом надо пользоваться при изменении настроек exe-файла?... 03.01.02 20:10
Автор: LiNX Статус: Незарегистрированный пользователь
|
1. Почему IP-адрес приведен в качестве примера непостоянного размера ? Может быть имеется в виду строка символов, которая в большинстве случаев заканчивается нулевым символом - если требуется впихнуть больше, то увольте, а иначе чтение будет происходить до нулевого символа. Числовые данные стандартного размера (условно) - другое дело, что в 1 байт не впихнуть больше 255.
2. Почему бы не попробовать варианты ручного изменения через hex-редактор, или перекомпилировать прогу под получение данных из командной строки (очень удобно и си под это заточен).
3. Плохая новость: трудности могут быть в том, что данные существуют инициализированные и неинициализированные ,- вторых нет в экзешнике, они формируются в процессе загрузки в ОЗУ.
4. Хорошая новость: изменение данных (в отличие от изменения кода) - относительно стабильный процесс (условно допускается), для их извлечения необходимо ориентироваться в структурах экзешников (PE/MZ).
5. "По идее можно найти смещение в файле, где лежит нужное значение, и прямо туда вписывать другое" - а как иначе-то !?
|
 |  |
-))) протупил 03.01.02 23:38
Автор: dron <Ivanov Andrey> Статус: Member
|
> 1. Почему IP-адрес приведен в качестве примера > непостоянного размера ? Может быть имеется в виду строка > символов, которая в большинстве случаев заканчивается > нулевым символом - если требуется впихнуть больше, то > увольте, а иначе чтение будет происходить до нулевого > символа. Числовые данные стандартного размера (условно) - > другое дело, что в 1 байт не впихнуть больше 255.
На самом деле, конечно же. имеются ввиду строковые данные, просто в данном случае - это айпи адрес, просто меня зациклило на конкретике, извиняюсь.
|
|
|