2016-03-30 9 views
0

Образцы вредоносного ПО, предоставленные Microsoft в вызове Kaggle (https://www.kaggle.com/c/malware-classification/data), содержат шестнадцатеричное представление сегмента кода. Пример:Включение шестнадцатеричного представления сегмента кода обратно в двоичный файл

00401000 00 00 80 40 40 28 00 1C 02 42 00 C4 00 20 04 20 
    00401010 00 00 20 09 2A 02 00 00 00 00 8E 10 41 0A 21 01 
    00401020 40 00 02 01 00 90 21 00 32 40 00 1C 01 40 C8 18 
    00401030 40 82 02 63 20 00 00 09 10 01 02 21 00 82 00 04 
    00401040 82 20 08 83 00 08 00 00 00 00 02 00 60 80 10 80 
    00401050 18 00 00 20 A9 00 00 00 00 04 04 78 01 02 70 90 
    00401060 00 02 00 08 20 12 00 00 00 40 10 00 80 00 40 19 
    00401070 00 00 00 00 11 20 80 04 80 10 00 20 00 00 25 00 
    00401080 00 00 01 00 00 04 00 10 02 C1 80 80 00 20 20 00 
    00401090 08 A0 01 01 44 28 00 00 08 10 20 00 02 08 00 00 
    ... 

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

Я пробовал xxd -r -p, но результат был неверным. xxd как-то кодирует адрес 00401000, а я хочу избавиться от адреса.

Есть ли быстрый способ сделать это?

ответ

3

Сначала вам нужно снять номера адресов, так как они не являются частью самого кода; они похожи на номера строк для шестнадцатеричного кода. Я бы использовал awk для этого. Затем попробуйте снова использовать xxd -r -p.
Awk синтаксис украдена из: Using awk to print all columns from the nth to the last
Попробуйте что-то вроде этого (у меня нет XXD под рукой, чтобы я не смог проверить):

awk '{$1=""; print $0}' yourhexfile |xxd -r -p >aFileContainingActualCode 
+0

должен размер двоичного файла будет 8 * L (L является количество строк в шестнадцатеричном файле)? Я пытался сделать преобразование, но окончательный размер двоичного файла всегда в 2-3 раза больше, чем 8 * L – user1734905

+1

Размер должен быть 16 * L ... каждая строка имеет 16 байт. –

+0

размер двоичного кода должен быть немного меньше 1/3 от размера шестнадцатеричного файла. 57 байтов шестнадцатеричного файла (8 + 16 * 3 + CR) представляют 16-битный двоичный файл, поэтому коэффициент hexfile/binfile должен быть около 350%. не смешивать линии с файлами – Tommylee2k

 Смежные вопросы

  • Нет связанных вопросов^_^