Хакинг на С++ [А. А. Ярошенко] (pdf) читать постранично, страница - 10

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

часто
ограничивает выделяемые ресурсы и время, выделенное для одного эк­
земпляра. Обычные блоки виртуальных машин, используемые аналитиками,
также подвержены тем же ограничениям - их ресурсы часто ограничены.
Типичная пользовательская рабочая станция имеет процессор с не менее
чем 2 ядрами, не менее 2 ГБ ОЗУ и жесткий диск на 100 ГБ. Мы можем про­
верить, соответствует ли среда, в которой выполняется наше вредоносное
приложение, следующим ограничениям:
// проверяем процессор
SYSTEM_INFO systeminfo;
GetSysteminfo(&systeminfo);
DWORD numberOfProcessors = systeminfo.dwNumberOfProcessors;
i f (numЬerOfProcessors < 2) return false;
// проверяем память
MEMORYSTATUSEX memoryStatus;
memoryStatus.dwLength = s i zeof(memoryStatus);
GlobalMemoryStatusEx(&memoryStatus);
DWORD RАММВ = memoryStatus.ullTotalPhys / 1024 / 1024;
if (RАММВ < 2048) return false;
// проверяем накопитель
НANDLE hDevice = CreateFileW(L"\\\\.\\PhysicalDrive0", О, FILE SНARE READ
FILE_SHARE_WRITE, NULL, OPEN EXISTING, 0, NULL);
DISK_GEOMETRY pDiskGeometry;
DWORD bytesReturned;
DeviceioControl(hDevice, IOCTL_DISK_GET D RIVE_GEOMETRY,NULL,0,
&pDiskGeometry, sizeof(pDiskGeometry), &bytesReturned, (LIOVERIAPPED)NULL);
DWORD diskSizeGB;
diskSizeGB = pDiskGeometry.Cylinders.QuadPart *



IJII-··················································································

1 1,1ва Х Ра 1pafio 11,а На/11·ш·с
(ULONG)pDiskGeometry.TracksPerCylinder * (ULONG)pDiskGeometry.SectorsPerTrack
* (ULONG)pDiskGeometry.BytesPerSector / 1024 / 1024 / 1024;
if (diskSizeGB < 100) return false;

Используя эти простые проверки, мы смогли снизить уровень обнаружения
до нуля. С другом шелл-кодом результат может быть иньiм, но тем не менее,
можно поэкспериментировать .

•.---------------... --.---..--. --. --------------.. ---.--------. --. -----------------1!11

Глава 9.

Полезные примеры для
хакинга

'\а1.:11111 11а ( ·-1 +

В этой главе мы напишем несколько небольших программ, которые могут
пригодиться вам на практике хакинга.

9.1. НТМL-клинер на С++
НТМL представляет собой смесь текста и тегов для его визуального отобра­
жения. Мы напишем программу, которая будет очищать НТМL-код и выво­
дить лишь текст, заключенный в НТМL-тегах.
Листинг 9.1. Очищаем НТМL-код от тегов
#include
using namespace std;
// Функция для парсинга НТМL-кода
void parser(char* S)
(

// Храним длину



•··················································································

1 1,111,1 Ч l\o.1t•111ыe 11р11чt·111,1 1.ш ,ai,11111a

// строки s
int n = strlen(S);
int start = О, end

О;

// Обход строки
for (int i = О; i < n; i++)
// Если S[i] = '>', обновляем
// на�ало к i+l и останов
i f ( s [i] == I > I )
start = i + 1;
break;

// Удаляем пробел
w hile (S[start]
start++;

' ')

// Обход строки
for (int i = start; i < n; i++)
// Если S[i] = '