штурм зимнего .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, он решал очень мирные задачи, и его действия никак не были связаны с защитой кода. |