• ! Привет посетитель !

    Зачем данный ресурс нужен ?

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

    Но со временем у людей меняются интересы, а кто-то просто не может держать такие сайты, сайты удаляются, я подумал а печему-бы не сделать такой архив со статьями на тематику вирусов и ИБ.

    Цель ресурса:

    Собрать какие-то актуальные утеренные обсуждения и работы.

    Пока-что поднял два сайта:

    1) https://archivevx.net/exelab/f/

    2)Vxlab.info - Тут просто сделаю перепост статей сюда:https://archivevx.net/index.php?forums/vxlab-info-Статьи-ресурса.4/

Малварь по шагам [5] Умная сборка малвари

Я в полнейшем недоумении, когда вижу очередной семпл с дебаг строкой или датой компиляции. Ведь, Visual Studio предоставляет такие замечательные инструменты как пре- и пост-компиляция!

Для наших задач они подходят идеально. Засунем в них свой python скрипт, который будет отвечать за чистку всего лишнего.

1608883322501.png


Почему перед именем скрипта стоит «../» ? Рабочая директория сборки находится уровнем ниже. Чтобы узнать её, достаточно подставить в это поле команду «dir», которая выведет информацию о текущей папке.

Advanced pefile

Модуль pefile позволяет получать смещения любых структур и многие из них парсит, но не имеет внятной документации. Если вам нужно узнать какие поля есть у конкретного класса, обычно достаточно сделать:

print class_name

Если же в классе переопределён метод __str__ то имен мы не получим, для этого есть метод __dict__

print pe_info.__dict__

Вырезаем лишнее

Что необходимо вырезать из файла?
  • дату сборки
  • отладочную информацию
Полный код можно скачать тут:https://archivevx.net/attachments/post_pre_-zip.41/?hash=5df11d915f38608d7a0ebc1a9ce84dcf

Пароль:111

Код:
# get pefile infos
pe_info = pefile.PE(data = data, fast_load=False)

#clean from whole file
TimeDateStamp = pe_info.FILE_HEADER.TimeDateStamp
#raw to byte string
TimeDateStamp = struct.pack('I',TimeDateStamp)
new_data = data.replace(TimeDateStamp,'\x00\x00\x00\x00')

#clean debug datas
for debug in pe_info.DIRECTORY_ENTRY_DEBUG:
d_addr = debug.struct.PointerToRawData
d_size = debug.struct.SizeOfData
new_data = fill_zero(new_data,d_addr,d_size)

#clean debug dir
dir = pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_DEBUG']
debug_offset = pe_info.get_offset_from_rva(pe_info.OPTIONAL_HEADER.DATA_DIRECTORY[dir].VirtualAddress)
debug_size = pe_info.OPTIONAL_HEADER.DATA_DIRECTORY[dir].Size
new_data = fill_zero(new_data,debug_offset,debug_size)

#clean links to dir
offset = pe_info.OPTIONAL_HEADER.DATA_DIRECTORY[dir].__file_offset__
size = pe_info.OPTIONAL_HEADER.DATA_DIRECTORY[dir].__format_length__
new_data = fill_zero(new_data,offset,size)

Почему мы вырезаем TimeDateStamp по всему файлу? Он может содержаться во многих местах, например в ресурсах. Вырезать руками нет никакого смысла, ибо этот dword довольно уникален.

ToDo: RichHeader

Добавляем новое

Вырезать мета-данные хорошо, а шифровать данные на пре-компиляции ещё лучше! Давайте перед сборкой шифровать некую библиотеку и преобразовывать её в include файл, с которым можно работать!

Python:
def convert(name,char):
char = rc4.crypt_raw(key,char)
charbytes = bytearray(char)
name2, ext = os.path.splitext(name)
text = "byte {}[]=".format(basename(name2))
text += "{"
for c in charbytes:
text += "0x{:02x}, ".format(c)
text +="};"
return text

def crypt_file(file):
out_file_name = file+".def"
fin  = open(file, "rb")
fout = open(out_file_name, "wb")
fout.write(convert(file,fin.read()))
print "CRYPTED "+file

Было:

4D 5A 90 ...

Стало:

byte secret[]={0x7f, 0x60, 0xf6, ...

Что дальше?

С вами программа «Итоги» и я, её ведущий, Auth0r. Скрипты пре- и пост- сборки обладают огромным потенциалом, мы осветили лишь малую часть области применения.

Мы можем морфить код перед сборкой, шифровать данные, навешивать декрипторы, скрывать импорт, собирать сложные структуры и многое другое!
 

Вложения

  • post_pre_.zip
    48,3 КБ · Просмотры: 12
Последнее редактирование: