Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #65, АПРЕЛЬ 2006 г.

штурм зимнего .net'а

N|M{INT3 TEAM} (NIM@INT3.RU)

Спецвыпуск: Хакер, номер #065, стр. 065-042-2


61 6E 64 20 53 65 74 74 69 6E 67 73 5C D0 90 D0 // and Settings\...

B4 D0 BC D0 B8 D0 BD D0 B8 D1 81 D1 82 D1 80 D0 // .......\...... .

B0 D1 82 D0 BE D1 80 5C D0 9C D0 BE D0 B8 20 D0 // .......\...... .

B4 D0 BE D0 BA D1 83 D0 BC D0 B5 D0 BD D1 82 D1 // .......\...... .

8B 5C 56 69 73 75 61 6C 20 53 74 75 64 69 6F 20 // .\Visual Studio

50 72 6F 6A 65 63 74 73 5C 4D 79 41 70 70 5C 62 // Projects\MyApp\b

69 6E 5C 44 65 62 75 67 5C 31 2E 6B 65 79 00 00 ) // in\Debug\1.key..

.publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00 // .$..............

00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00 // .$..RSA1........

2D C3 3A 4A E0 FA EF 05 D5 FC 1C 9D 08 7D 67 5A // -.:J.........}gZ

B0 48 EB 1A D4 D6 E4 E2 B7 93 11 A6 D8 68 5F 1B // .H...........h_.

7E D7 E3 3C 2C 25 86 1F 34 26 F6 86 26 59 2D 8E // ~..<,%..4&..&Y-.

F7 0B B3 DC 74 C1 3D 8E 00 79 06 68 06 82 C3 F2 // ....t.=..y.h....

E9 91 CB F1 F3 4E 87 CD 4A CB 55 CE 57 DE DF 4E // .....N..J.U.W..N

93 64 42 5E A6 86 54 43 D8 25 D0 AD BF 49 F6 9B // .dB^..TC.%...I..

53 9D 3B A7 7A C4 0F 5D A4 53 8E 7F 9A EB A5 E9 // S.;.z..].S......

92 09 B0 F5 C5 9B E5 33 CF C7 6E A5 5A 20 C5 C4 ) // .......3..n.Z ..

В редких случаях после модификации требуется подписать сборку (Solution — еще одно название .NET-программ) своей SN. На этот случай существует утилита sn.exe, входящая в дистрибутив .NET framework. Для генерации ключа: sn -k 1.key, для подписи: sn -i MyApp.exe 1.key.

O формате PE

МАНЬЯКАМ — ЛЮБИТЕЛЯМ КОВЫРЯТЬ ВСЕ ПОДРЯД В HEX-РЕДАКТОРАХ ПОСВЯЩАЕТСЯ.

Разбор .NET-программ необходимо начинать со структуры CliHeader, RVA которой записан в DataDirectory(ENTRY_COM_DESCRUIPTOR). Напомню, что DataDirectory(ENTRY_COM_DESCRUIPTOR) идет сразу после DataDirectory(ENTRY_IAT). Структуры C#:

struct DataDirectory

{

uint Rva;

int Size;

}

struct CliHeader

{

uint Size;

ushort MajorRuntimeVersion;

ushort MinorRuntimeVersion;

DataDirectory File;

uint Flags;

uint EntryPointToken;

DataDirectory Resources;

DataDirectory StrongNameSignature;

DataDirectory CodeManagerTable;

DataDirectory VTableFixups;

DataDirectory ExportAddressTableJumps;

DataDirectory ManagedNativeHeader;

}

CliHeader.File.Rva содержит адрес MetadataStartOffset.

ДАЛЕЕ СТОИТ ПОЧИТАТЬ НЕПЛОХУЮ СТАТЬЮ: http://rsdn.ru/article/dotnet/phmetadata.xml.

прежде чем говорить о взломе,

нужно немного сказать и о светлой стороне силы :). Почему «немного»? Потому что больше она пока не заслужила :). Итак, современная protect .NET-индустрия добилась выпуска двух технологий обфускации и упаковки/криптования.

Принцип обфускации .NET заключается в простом переименовании названий классов, методов, свойств и полей на названия типа «_1_1», «_1_2» и т.д., и таким образом якобы затрудняется анализ программы. На самом же деле нередко последствия бывают прямо противоположные ;). Например, разработчики дали классам страшные названия, содержащие слова Protected или Security, что заставило нас просматривать код особо бдительно. Соответственно, мы потратили кучу времени и вдруг сделали ошеломляющее открытие: когда разработчик использовал пространство имен System.Security.Permissions или System.Security.Policy, он решал очень мирные задачи, и его действия никак не были связаны с защитой кода.

Назад на стр. 065-042-1  Содержание  Вперед на стр. 065-042-3