Сейчас на форуме: _MBK_, Magister Yoda (+5 невидимых) |
![]() |
eXeL@B —› Основной форум —› Вроде .NET, а инструменты не берут... |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 29 сентября 2007 22:25 · Личное сообщение · #1 Помогите понять, что использовать для исследования данной программы. Вроде .NET приложение, Ида не распознаёт, пробовал Spices, Decompiler.NET, .NET Reflector , .NET Resourcer – результат нулевой. Совсем не имею опыта работы с .NET, а тут ещё такое попалось… Ссылка на инсталл: h..p://www.auto-broker.net/AutoBroker4Setup.exe (размер 4.2 Мб, требует .NET 2.0) ![]() ![]() |
|
Создано: 29 сентября 2007 23:00 · Личное сообщение · #2 |
|
Создано: 29 сентября 2007 23:02 · Личное сообщение · #3 |
|
Создано: 29 сентября 2007 23:44 · Поправил: sniperZ · Личное сообщение · #4 |
|
Создано: 30 сентября 2007 00:21 · Личное сообщение · #5 |
|
Создано: 30 сентября 2007 00:27 · Личное сообщение · #6 |
|
Создано: 30 сентября 2007 00:37 · Личное сообщение · #7 |
|
Создано: 30 сентября 2007 10:17 · Личное сообщение · #8 sniperZ пишет: попробуй запустить прогу и сдампить PETools'ом. потом открой в .NET Reflectorе. иногда помогает Сдампил. Размер не сильно поменялся, уже нашёл хювом нужное место для патча адреса сервера программы, где она проверяет лицензию. Лоадером патчить получается. Но инструменты по прежнему не берут ехе. Нужно ещё будет обойти ограничение на 3 поисковых запроса, а как получить хоть какой то осмысленный код - не знаю... Прилагаю дамп, может кто нибудь посмотрит и посоветует как его изучать... ![]() ![]() |
|
Создано: 01 октября 2007 14:42 · Поправил: Nimnul · Личное сообщение · #9 ToBad
Дамп прекрасно понимается инструментами. Все методы испорчены(пошифрованны\поксорены) фемида ставит хуки на события начала компиляции метода и конец компиляции. Таким образом код методов доступен только в момент компеляции, иначе jit компилер сильно ругался бы. ----- have a nice day ![]() |
|
Создано: 03 октября 2007 23:03 · Личное сообщение · #10 |
|
Создано: 03 октября 2007 23:39 · Личное сообщение · #11 Заранее прошу прощения,что залез в чужую тему ![]() Имеется прога.Называется DVD Cover Gold. Ссылка на скачивание:--> Скачать <-- http://69.60.111.87/downloads/t/dvdcovergold3.0.1.zip Размер: 2.44 МБ. Последняя версия 3.0.1 Peid показывает:Microsoft Visual C# / Basic .NET Запускаю под 2 сборками Олли:прога сразу запускается,при этом в отладчике вообще не видно кода.При запуске показывается окно регистрации и при нажатии F9 прога закрывается.Ест-но ни один хайдер для олли не помогает ![]() Пробовал различными дизасмами-ноль.Ни один не видит ресурсов(строк) вместо кода куча-мала. Пытался также приатачиться к процессу в олли.Результат-ни один бряк не срабатывает и из библы кёрнел хрен вылезишь.По сути я даже кода программы так и не увидел. По поводу паковки-сто процентов сказать не могу,но всё-таки мне кажется прога не запакована,так как все анализаторы молчат,да и энтропия в пейде и в die то же отдыхает. Собственно вопрос-может подскажите что делать.Первый раз с такой хренью встречаюсь,а прог с этим штук 6.Хочется научиться как с этим бороться. ![]() Заранее благодарен за ответы ![]() ![]() |
|
Создано: 04 октября 2007 00:03 · Личное сообщение · #12 Djeck Оля не для отладки .NET программ, для них ИМХО лучше всего это: 1) Reflector - дизасм в нормальный сишный код ( почти всегда ![]() 2) PE Browse - отладчик для .NET ( с олей не сравнить, но все таки ) - сайт - www.smidgeonsoft.com/ 3) Хenocode - тож аналог рефлектора 4) IDA - ну тут не надо объяснять 5) ildasm - эт если оч уж хреново и надо патчить сборку. ![]() |
|
Создано: 04 октября 2007 03:03 · Личное сообщение · #13 |
|
Создано: 04 октября 2007 05:51 · Личное сообщение · #14 |
|
Создано: 04 октября 2007 06:36 · Личное сообщение · #15 |
|
Создано: 04 октября 2007 07:54 · Личное сообщение · #16 |
|
Создано: 04 октября 2007 09:02 · Личное сообщение · #17 |
|
Создано: 04 октября 2007 09:50 · Личное сообщение · #18 Теперь такой тупой вопрос. ![]() С помощью PE Browse нашёл все места где надо патчить.Но вот в чём вопрос-патчить то в нём можно,а вот сохранять как в олли например нельзя. ![]() ![]() ![]() |
|
Создано: 04 октября 2007 16:12 · Поправил: NIKOLA · Личное сообщение · #19 |
|
Создано: 04 октября 2007 18:53 · Личное сообщение · #20 |
|
Создано: 04 октября 2007 19:25 · Личное сообщение · #21 digger70 пишет: Эээ... может как нибудь с патчем повременить, поскольку автор код генерации ключа честно приложил class function modSerialKey.GenerateKey (strFormat : String; strIgnore : String, paramarray) : String; Да это я видел,читал давненько статью фаередара,он там взял и нагло спёр эту генерацию,а потом откомпилил в .Net.Но у меня компилятора нет.А на "глаз"разбираться мне тяжеловато. P.s.Да и интересно насчёт патча.В этой проге автор "честный"попался,но я не думаю,что во всех так будет.ИМХО если уж начал разбираться,то надо заканчивать. ![]() |
|
Создано: 04 октября 2007 22:15 · Личное сообщение · #22 Djeck А че там разбираться главно понять где патчить ![]() Вот в твоей проге функа отвечающая за регистрацию: public enmRegistrationMode SerialKeyMode(object strSerialKey) { if (strSerialKey == null) { return enmRegistrationMode.RM_EVALUATION; } if (Operators.ConditionalCompareObjectEqual(strSerialKey, string.Empty, false)) { return enmRegistrationMode.RM_EVALUATION; } try { StringReader reader = new StringReader(DCGOLD3.My.Resources.Resources.RegInfo); string strA = modSerialKey.GenerateHash(Conversions.ToString(strSerialKey)); clsEncrypt encrypt = new clsEncrypt(this.strAlgorithm, this.strPassword); for (string str = reader.ReadLine(); str != null; str = reader.ReadLine()) { string strB = encrypt.DecryptData(str); if (strB == null) { goto Label_0091; } if (string.CompareOrdinal(strA, strB) == 0) { reader.Close(); return enmRegistrationMode.RM_REGISTERED; } } } и т.д. выдрано из рефлектора, как мы видим что функция должна вернуть enmRegistrationMode.RM_REGISTERED. Теперь открываем ее в ildasm.exe .method /*060000B0*/ public instance valuetype 'DCGOLD3.Registration'.'clsRegistration'/* 02000010 *//'enmRegistrationMode'/* 02000011 */ 'SerialKeyMode'(object 'strSerialKey') cil managed // SIG: 20 01 11 44 1C { // Method begins at RVA 0x137e40 // Code size 149 (0x95) .maxstack 3 .locals /*1100006D*/ init (valuetype 'DCGOLD3.Registration'.'clsRegistration'/* 02000010 *//'enmRegistrationMode'/* 02000011 */ V_0, class 'DCGOLD3'.'clsEncrypt'/* 0200000A */ V_1, class ['mscorlib'/* 23000001 */]'System.IO'.'StringReader'/* 0100009A */ V_2, string V_3, string V_4, string V_5, class ['mscorlib'/* 23000001 */]'System'.'Exception'/* 01000072 */ V_6) IL_0000: /* 03 | */ ldarg.1 IL_0001: /* 14 | */ ldnull IL_0002: /* FE01 | */ ceq IL_0004: /* 2C | 02 */ brfalse.s IL_0008 IL_0006: /* 16 | */ ldc.i4.0 IL_0007: /* 2A | */ ret IL_0008: /* 03 | */ ldarg.1 IL_0009: /* 7E | (0A)00005A */ ldsfld string ['mscorlib'/* 23000001 */]'System'.'String'/* 0100006D */::'Empty' /* 0A00005A */ IL_000e: /* 16 | */ ldc.i4.0 IL_000f: /* 28 | (0A)0000A4 */ call bool ['Microsoft.VisualBasic'/* 23000002 */]'Microsoft.VisualBasic.CompilerServices'.'Operators'/* 0100009B */::'ConditionalCompareObjectEqual'(object, object, bool) /* 0A0000A4 */ IL_0014: /* 2C | 02 */ brfalse.s IL_0018 IL_0016: /* 16 | */ ldc.i4.0 IL_0017: /* 2A | */ ret .try { IL_0018: /* 28 | (06)00054C */ call string 'DCGOLD3.My.Resources'.'Resources'/* 02000039 */::'get_RegInfo'() /* 0600054C */ IL_001d: /* 73 | (0A)0000A5 */ newobj instance void ['mscorlib'/* 23000001 */]'System.IO'.'StringReader'/* 0100009A */::.ctor(string) /* 0A0000A5 */ IL_0022: /* 0C | */ stloc.2 IL_0023: /* 03 | */ ldarg.1 IL_0024: /* 28 | (0A)0000A2 */ call string ['Microsoft.VisualBasic'/* 23000002 */]'Microsoft.VisualBasic.CompilerServices'.'Conversions'/* 01000099 */::'ToString'(object) /* 0A0000A2 */ IL_0029: /* 28 | (06)00051A */ call string 'DCGOLD3.SerialKey'.'modSerialKey'/* 02000038 */::'GenerateHash'(string) /* 0600051A */ IL_002e: /* 13 | 04 */ stloc.s V_4 IL_0030: /* 02 | */ ldarg.0 IL_0031: /* 7B | (04)000044 */ ldfld string 'DCGOLD3.Registration'.'clsRegistration'/* 02000010 */::'strAlgorithm' /* 04000044 */ IL_0036: /* 02 | */ ldarg.0 IL_0037: /* 7B | (04)000045 */ ldfld string 'DCGOLD3.Registration'.'clsRegistration'/* 02000010 */::'strPassword' /* 04000045 */ IL_003c: /* 73 | (06)000036 */ newobj instance void 'DCGOLD3'.'clsEncrypt'/* 0200000A */::.ctor(string, string) /* 06000036 */ IL_0041: /* 0B | */ stloc.1 IL_0042: /* 08 | */ ldloc.2 IL_0043: /* 6F | (0A)0000A6 */ callvirt instance string ['mscorlib'/* 23000001 */]'System.IO'.'StringReader'/* 0100009A */::'ReadLine'() /* 0A0000A6 */ IL_0048: /* 0D | */ stloc.3 IL_0049: /* 2B | 2F */ br.s IL_007a IL_004b: /* 07 | */ ldloc.1 IL_004c: /* 09 | */ ldloc.3 IL_004d: /* 6F | (06)00003B */ callvirt instance string 'DCGOLD3'.'clsEncrypt'/* 0200000A */::'DecryptData'(string) /* 0600003B */ IL_0052: /* 13 | 05 */ stloc.s V_5 IL_0054: /* 11 | 05 */ ldloc.s V_5 IL_0056: /* 14 | */ ldnull IL_0057: /* FE01 | */ ceq IL_0059: /* 2C | 02 */ brfalse.s IL_005d IL_005b: /* DE | 34 */ leave.s IL_0091 IL_005d: /* 11 | 04 */ ldloc.s V_4 IL_005f: /* 11 | 05 */ ldloc.s V_5 IL_0061: /* 28 | (0A)0000A7 */ call int32 ['mscorlib'/* 23000001 */]'System'.'String'/* 0100006D */::'CompareOrdinal'(string, string) /* 0A0000A7 */ IL_0066: /* 16 | */ ldc.i4.0 IL_0067: /* 33 | 0A */ bne.un.s IL_0073 IL_0069: /* 08 | */ ldloc.2 IL_006a: /* 6F | (0A)0000A8 */ callvirt instance void ['mscorlib'/* 23000001 */]'System.IO'.'StringReader'/* 0100009A */::'Close'() /* 0A0000A8 */ IL_006f: /* 17 | */ ldc.i4.1 IL_0070: /* 0A | */ stloc.0 IL_0071: /* DE | 20 */ leave.s IL_0093 IL_0073: /* 08 | */ ldloc.2 IL_0074: /* 6F | (0A)0000A6 */ callvirt instance string ['mscorlib'/* 23000001 */]'System.IO'.'StringReader'/* 0100009A */::'ReadLine'() /* 0A0000A6 */ IL_0079: /* 0D | */ stloc.3 IL_007a: /* 09 | */ ldloc.3 IL_007b: /* 14 | */ ldnull IL_007c: /* FE01 | */ ceq IL_007e: /* 2C | CB */ brfalse.s IL_004b IL_0080: /* DE | 0F */ leave.s IL_0091 Вот этот же кусок, т.е. теперь что бы функция всегда вернула 1 = enmRegistrationMode.RM_REGISTERED Надо перейти в файле по ссмещению RVA 0x137e40 найти байты: 03 14 FE 01 2C 02 16 и заменить на 00 00 00 00 00 00 17 тем самым получим вот такую функцию: public enmRegistrationMode SerialKeyMode(object strSerialKey) { return enmRegistrationMode.RM_REGISTERED; if (Operators.ConditionalCompareObjectEqual(strSerialKey, string.Empty, false)) { return enmRegistrationMode.RM_EVALUATION; } и т.д. Все! разбирайся ![]() ![]() |
|
Создано: 05 октября 2007 10:08 · Личное сообщение · #23 Djeck Вот прикрепил ildasm.exe P.S. Понимаю что тема ушла от первоначальной, но тем не менее что-то похожее осталось. ![]() ![]() |
|
Создано: 05 октября 2007 11:29 · Личное сообщение · #24 |
|
Создано: 05 октября 2007 15:28 · Личное сообщение · #25 03 14 FE 01 2C 02 16 это собственно вот это: IL_0000: /* 03 | */ ldarg.1 IL_0001: /* 14 | */ ldnull IL_0002: /* FE01 | */ ceq IL_0004: /* 2C | 02 */ brfalse.s IL_0008 IL_0006: /* 16 | */ ldc.i4.0 IL_0007: /* 2A | */ ret а после патча получим: IL_0000: nop ... IL_0007: nop IL_0006: /* 17 | */ ldc.i4.1 IL_0007: /* 2A | */ ret А по теме шелов и хуков джитера для декрипта тела метода загляни вот сюда _http://vxer.cn/blog/ ![]() |
|
Создано: 05 октября 2007 15:38 · Личное сообщение · #26 |
|
Создано: 05 октября 2007 15:42 · Личное сообщение · #27 |
|
Создано: 07 октября 2007 15:27 · Личное сообщение · #28 |
|
Создано: 07 октября 2007 16:50 · Поправил: Djeck · Личное сообщение · #29 |
|
Создано: 08 октября 2007 09:28 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Вроде .NET, а инструменты не берут... |