• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите разобраться в коде 2 программ

  • Автор темы Milana
  • Дата начала
M

Milana

Вот код программ. Не могли бы вы, пожалуйста, написать, что делает каждая строка кода?

[codebox]#include <iostream>
#include <windows.h>

using namespace std;

void DiskInfo(int, LPTSTR);

void main()
{
char buffer[MAX_PATH];
char bufferDrive[256];
char *pch = bufferDrive;
int i;
int a;

GetCurrentDirectory(sizeof(buffer),(LPTSTR)buffer);
cout << "Current directory: " <<endl <<buffer << endl << endl;
GetSystemDirectory((LPTSTR)buffer,sizeof (buffer));
cout << "System directory: " << endl << buffer<<endl << endl;
GetWindowsDirectory((LPTSTR)buffer,sizeof(buffer));
cout << "Windows directory: " << endl << buffer << endl << endl;
cout << "------------------------------------------------------------------------------" << endl << endl;

GetLogicalDriveStrings(sizeof(bufferDrive),(LPTSTR) bufferDrive);
cout << " Available logical drives: " << endl << endl;
i=1;
while (*pch)
{
cout << i << " :" << pch << endl;
pch = &pch[strlen(pch) + 1];
i++;
}
cout << endl << "Enter the number of logical drive to see the info about it : ";
cin >> a;
DiskInfo(a,bufferDrive);
getchar();
getchar();
}

void DiskInfo(int a, LPTSTR bufferDriveF)
{
char *pchF = bufferDriveF;
int gDriveType;
char lpSectorsPerCluster[256];
char lpBytesPerSector[256];
char lpNumberOfFreeClusters[256];
char lpTotalNumberOfClusters[256];

int j=2;
while (j<=a && *pchF)
{
pchF=&pchF[strlen(pchF)+1];
j++;
}
cout << endl << "Information about " << pchF << " :" << endl << endl;
cout << "Drive type: ";
gDriveType=GetDriveType(pchF);
switch (gDriveType)
{
case 0: cout << "Unknown type of device" << endl;break;
case 1: cout << "This root directory doesn't exist" << endl;break;
case 2: cout << "Drive is removable" << endl;break;
case 3: cout << "Drive is fixed" << endl;break;
case 4: cout << "Drive is remote" << endl;break;
case 5: cout << "Drive is CD-ROM" << endl;break;
case 6: cout << "Drive is RAM Disk" << endl;break;
default: break;
}
GetDiskFreeSpace(pchF,
(LPDWORD)lpSectorsPerCluster,
(LPDWORD)lpBytesPerSector,
(LPDWORD)lpNumberOfFreeClusters,
(LPDWORD)lpTotalNumberOfClusters);
cout << "SectorsPerCluster: " << lpSectorsPerCluster << endl;
cout << "BytesPerSector: " << lpBytesPerSector << endl;
cout << "NumberOfFreeClusters: " << lpNumberOfFreeClusters << endl;
cout << "TotalNumberofClusters: " << lpTotalNumberOfClusters << endl;
}[/quote]

#include <windows.h>
#include <iostream>
#include <string>

#define MAX_KEY_LENGTH 255

using namespace std;
void GetSubKeys(HKEY hKey)
{
TCHAR subKeyName[MAX_KEY_LENGTH];
DWORD keyLen;

DWORD lpcSubKeys=0;


DWORD i, lResult;


lResult = RegQueryInfoKey(
hKey,
NULL,//lpClass,
NULL,//&lpcClass,
NULL,
&lpcSubKeys,
NULL,//&lpcMaxSubKeyLen,
NULL,//&lpcMaxClassLen,
NULL,//&lpcValues,
NULL,//&lpcMaxValueNameLen,
NULL,//&lpcMaxValueLen,
NULL,//&lpcbSecurityDescriptor ,
NULL);//&lpftLastWriteTime);


if (lpcSubKeys)
{
cout << endl << "Number of subkeys: " << lpcSubKeys << endl;
for (i=0; i<lpcSubKeys; i++)
{
keyLen = MAX_KEY_LENGTH;
lResult = RegEnumKeyEx(hKey,
i,
subKeyName,
&keyLen,
NULL,
NULL,
NULL,
NULL);
if (lResult == ERROR_SUCCESS)
{
cout << i+1 <<": " << subKeyName << endl;
}
}
}
}

void main()
{
HKEY hRootKey,hOpenedKey;
char sk[255];
string rootKey;

cout << "Enter rootKey: ";
cin >> rootKey;

if (rootKey == "HKEY_CLASSES_ROOT")
{
hRootKey = HKEY_CLASSES_ROOT;
}
else
{
if (rootKey == "HKEY_CURRENT_USER")
{
hRootKey = HKEY_CURRENT_USER;
}
else
{
if (rootKey == "HKEY_LOCAL_MACHINE")
{
hRootKey = HKEY_LOCAL_MACHINE;
}
else
{
if (rootKey == "HKEY_USERS")
{
hRootKey = HKEY_USERS;
}
else
{
if (rootKey == "HKEY_CURRENT_CONFIG")
{
hRootKey = HKEY_CURRENT_CONFIG;
}
else
{
cout << "No such rootKey!" << endl;
getchar();
getchar();
exit(1);
}
}
}
}
}

cout << endl << "Enter the subKey: ";
cin >> sk;

if( RegOpenKeyEx(hRootKey,
sk,
0,
KEY_READ,
&hOpenedKey) == ERROR_SUCCESS
)
{
GetSubKeys(hOpenedKey);
RegCloseKey(hOpenedKey);
}
else cout << "No such subKey!";
cout << endl;
getchar();
getchar();
}[/codebox]
 
B

biz

Да, а еще каждая строка кода выполняет определенную функцию!! Вот какой я умный {удалено модератором}...

Итак, приступим...:

[codebox]#include <iostream> // деректива препроцессора, подключающая к программе из файла iostream средства связи с библиотечными функциями потокового ввода-вывода
#include <windows.h> // деректива бла бла бла.. ну тут понятно.

using namespace std; // смысл этой {удалено модератором} я до сих пор так и не понял.....

void DiskInfo(int, LPTSTR); // прототип функции с двумя параметрами нихрена не возвращающую..

void main() // точка входа в программу...
{ // левая фигурная скобка
char buffer[MAX_PATH]; // массив элементов типа char размером MAX_PATH
char bufferDrive[256]; // массив элементов типа char размером 256
char *pch = bufferDrive; // указатель типа char на переменную bufferDrive
int i; // переменная типа int...
int a; // {удалено модератором} еще одна переменная типа int

GetCurrentDirectory(sizeof(buffer),(LPTSTR)buffer); // какая-то функция {удалено модератором}...
cout << "Current directory: " <<endl <<buffer << endl << endl; // тут мы печатаем то {удалено модератором}, что получили из предидущей функции..., т.е. путь к текущей дериктории
GetSystemDirectory((LPTSTR)buffer,sizeof (buffer)); // {удалено модератором}, опять функция...
cout << "System directory: " << endl << buffer<<endl << endl; // выводим на экран путь к системной дериктории
GetWindowsDirectory((LPTSTR)buffer,sizeof(buffer));
cout << "Windows directory: " << endl << buffer << endl << endl; // выводим на экран путь к дериктории Windows
cout << "------------------------------------------------------------------------------" << endl << endl; // тут мы вдаемся в национальную лигу писсимистов и тупо печатаем минусы (-)

GetLogicalDriveStrings(sizeof(bufferDrive),(LPTSTR) bufferDrive); // берем какие-то строчки локального драйва..
cout << " Available logical drives: " << endl << endl; // выводим сообщение о том что перед нашим взором щас откроется что-то невероятное..
i=1; // записываем в переменную i значение 1, дальше идет точка с запятой - это означает.. {удалено модератором} не помню ну и буй с ней...
while (*pch) // собственно начало цикла.. он продолжается до тех пор, пока указатель указывает на указанную переменную, которая пока еще не содержит 0 ('\0')
{ // и снова левая фигурная скобка...
cout << i << " :" << pch << endl; // выводим на экран i, потом :, потом pch, потом конец строки.. ламеры обычно записывают его как endllll!!!
pch = &pch[strlen(pch) + 1]; // странная на первый взгляд комбинация операторов.... интересно что бы она могла означать......
i++; // мой любимый оператор, оператор инкремент) увеличивает значение переменной на единицу))
} // всем известная правосторонняя фигурная скабка!..
cout << endl << "Enter the number of logical drive to see the info about it : "; // программистъ явно страдал словесным поносым, в то время как пытался описать тут то, что хотел передать жестами.....
cin >> a; // вводим с клавиатуры переменную 'a'
DiskInfo(a,bufferDrive); // функция явно пытается что-то сотворить с жесткий диском... думаю ее надо заремировать...
getchar(); // и вот наконец аццкый программер окончательно ввел нас в заблуждение, пытаясь запутать наше подсознание двумя непонятными на первый вхгляд функциями.... что же это!!?? подпрограммы вызова вредоносных объектов!!?? вопрос все еще остается под загадкой.........................
getchar();
}

...

Всем удачи в освоении столь сильного, и как мне кажется очень простого языка программирования --- C++ !!!
C вами был ваш любимый коментатор Антонио!![/codebox]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!