Управляем памятью на C++

Сегодня я буду обозревать модуль из одного замечательного вируса – второй версии файлового инфектора beetle!

Вирус сам по себе довольно интересный с точки зрения лечения – его невозможно вытравить из бинарного файла даже вручную.

Но мы остановимся на его модуле mem.h \ mem.cpp

Давайте взглянем на класс cmem

class cmem{
public:
 BYTE* data;
 DWORD size;
 bool realloc(int size);
 bool push(void *p,int size);
 bool push(uint64 v);
 bool push(DWORD v);
 bool push(WORD v);
 bool push(BYTE v);
 bool push(cmem &v);
 void free();
 cmem(const cmem & v);
 void operator =(cmem &v);
 cmem operator +(cmem &v);
 cmem();
 cmem(void *data,int size);
 ~cmem();
 bool pop(void *in,DWORD size);
 bool pop(cmem &in, DWORD size);
 bool pop(DWORD &v);
 bool pop(BYTE &v);
 bool pop(WORD &v);
 bool pop(uint64 &v);
 bool cmem::pop(size_t size);
 bool cmem::push(LPSTR p);
 void alloc(DWORD size);
 bool cmem::push(LPWSTR p);
};

Как его использовать? Подключаем к проекту 4 файла (включая common.h) и напишем следующий код

void main()
{
cmem mem;
//засунем данные в блок памяти
mem.push((DWORD)123456);
//вынем 2 байта с начала
WORD s = mem.pop(2);
//узнаем размер блока памяти
DWORD size = mem.size;
//получим ссылку на данные
VOID* data = mem.data;
//очистим блок
mem.free();
}

Этот класс крайне удобен для работы со всяческими структурами. Кроме того он предотвращает утечку памяти, таким образом при использовании класса у вас могут утекать только незакрытые хендлы.

Слово редактора

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

Если вам интересно узнать наше мнение о конкретном исходники – отпишите его название или ссылку в комментах.

 

One thought on “Управляем памятью на C++

Добавить комментарий