Русский / Russian English / Английский

Сейчас на форуме: Gideon Vi, mintolik (+6 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› .net После дизасемблированиякомпиляции странная ошибка(не strong name)
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Статус: Участник

Создано: 20 ноября 2006 12:13 · Поправил: Nkey New!
Цитата · Личное сообщение · #1

Программа - ADrive 1.3

Декомпилирую(дизасемблирую) в ildasm.
Убираю publickey и AssemblyKeyFileAttribute.//пока не сделал был strong name error
Компилирую снова(ilasm).

Вылетает ошибка "Инициализатор типа "с1" выдал исключение".
Обьект этого класса создаеться практически сразу (первая команда после .entrypoint).
Если поставить break перед этим, то на break останавливаеться, а после тоже самое.
Если поставить break в c1::.ctor(), то даже не останавливаеться, все тоже самое.
Если сделать c1::.ctor() пустым(тока ret, стек выравнивается), тоже самое.
Учитывая, что это первый вызов какой-либо функции:
IL_0000: newobj instance void class c1::.ctor()
создаеться впечатление, что код вообще не может обратиться к какой-либо функции.
Подпись своим sn ничего не меняет.
В листенге ildasm есть следы DotFuscatora

Думал-читал, ничего не придумал.
Извините, если откровенный маразм спросил. Если надо могу приаттачить exe.

Спасибо.

Ранг: 2.0 (гость)
Статус: Участник

Создано: 20 ноября 2006 13:01 New!
Цитата · Личное сообщение · #2

Все таки, это связано со strong name.
Исключение вылетает в функции StrongNameSignatureVerification, а точнее в GetCompilerInfo. Только почему, sn проверяется уже после запуска, может это связано с тем, что entrypoint сразу компилируется...


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 20 ноября 2006 21:58 New!
Цитата · Личное сообщение · #3

смотри статические конструкторы (.cctor) класса в котором .entrypoint, они вызываются раньше

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 21 ноября 2006 02:52 New!
Цитата · Личное сообщение · #4

Поищи проверки в теле. Есть атрибуты, указывающие на возможность вызова только из сборки с определенной подписью, поищи в теле свой Public key или токен... Могут быть и проверки "руками" - ищи вызовы методов получения токена/паблик кея из сборки.

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 21 ноября 2006 04:40 New!
Цитата · Личное сообщение · #5

Nkey
Я тоже нитак давно пытался ее смотреть(только Adrive 1.03), но так и не смог от StrongName избавится ;(
P.S. Nkey поэтому если у тя получится, то выложи плиз где-нить...

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 21 ноября 2006 05:05 New!
Цитата · Личное сообщение · #6

Что-то я не нашел где ее скачать, дайте прямой линк

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 21 ноября 2006 05:48 New!
Цитата · Личное сообщение · #7

jfx
Короч! эта тулза - Симулятор вождения ADrive (мультимедийный тренажер вождения) по г. Минску, на нее линков прямых нет...

Если Nkey ссылку не кинет, то я завтра залью, т.к. счас с собой нету

Ранг: 2.0 (гость)
Статус: Участник

Создано: 21 ноября 2006 15:34 New!
Цитата · Личное сообщение · #8

.cctor() класса в котором entrypoint работает нормально.
.cctor() самого сбойного класса тоже.

Залить никак не смогу, так как инет у меня не дай Бог никомуНу не то чтоб совсем, но GPRS.

так-так-так. Вроде нашел где собака зарыта.

В функции с .entrypoint есть две локальные переменные, одна класса "ax". Так вот, .ctor() этого класса(в этом классе также находиться .entrypoint вызывается что-то интересное):

вызов:
MethodInfo info1 = ax.a(Thread.GetDomain(), AssemblyBuilderAccess.Run).GetMethod("MetodDelegate");
сама функция(извините за размер)

private static Type a(AppDomain A_0, AssemblyBuilderAccess A_1)
{
ModuleBuilder builder2;
AssemblyName name1 = new AssemblyName();
name1.Name = "EmittedAssembly";
AssemblyBuilder builder1 = A_0.DefineDynamicAssembly(name1, A_1);
if (A_1 == AssemblyBuilderAccess.Run)
{
builder2 = builder1.DefineDynamicModule("EmittedModule");
}
else
{
builder2 = builder1.DefineDynamicModule("EmittedModule", "EmittedModule.mod");
}
TypeBuilder builder3 = builder2.DefineType("Protecter", TypeAttributes.Public);
ILGenerator generator1 = builder3.DefineMethod("MetodDelegate", MethodAttributes.HideBySig | MethodAttributes.Static | MethodAttributes.Public, typeof(License), new Type[] { typeof(LicenseContext), typeof(Type), typeof(object), typeof(bool) }).GetILGenerator();
LocalBuilder builder5 = generator1.DeclareLocal(typeof(Restriction.UnqHardwareLicense));
LocalBuilder builder6 = generator1.DeclareLocal(typeof(Stream));
LocalBuilder builder7 = generator1.DeclareLocal(typeof(StreamReader));
LocalBuilder builder8 = generator1.DeclareLocal(typeof(string));
LocalBuilder builder9 = generator1.DeclareLocal(typeof(string));
LocalBuilder builder10 = generator1.DeclareLocal(typeof(byte[]));
LocalBuilder builder11 = generator1.DeclareLocal(typeof(byte[]));
LocalBuilder builder12 = generator1.DeclareLocal(typeof(DSACryptoServiceProvider));
LocalBuilder builder13 = generator1.DeclareLocal(typeof(DSASignatureDeformatter));
LocalBuilder builder14 = generator1.DeclareLocal(typeof(int));
LocalBuilder builder15 = generator1.DeclareLocal(typeof(License));
ax.a(generator1);
Type[] typeArray1 = new Type[0];
MethodInfo info1 = typeof(Restriction).GetMethod("GetHardCode", typeArray1);
generator1.EmitCall(OpCodes.Call, info1, null);
generator1.Emit(OpCodes.Stloc_S, builder9);
Type[] typeArray2 = new Type[0];
MethodInfo info2 = typeof(Encoding).GetMethod("get_Unicode", typeArray2);
generator1.EmitCall(OpCodes.Call, info2, null);
generator1.Emit(OpCodes.Ldloc_S, builder9);
Type[] typeArray3 = new Type[] { typeof(string) };
MethodInfo info3 = typeof(Encoding).GetMethod("GetBytes", typeArray3);
generator1.EmitCall(OpCodes.Callvirt, info3, null);
Type[] typeArray4 = new Type[] { typeof(byte[]) };
MethodInfo info4 = typeof(Restriction).GetMethod("GetCodeHash", typeArray4);
generator1.EmitCall(OpCodes.Call, info4, null);
generator1.Emit(OpCodes.Stloc_S, builder10);
generator1.Emit(OpCodes.Ldloc_3);
Type[] typeArray5 = new Type[] { typeof(string) };
MethodInfo info5 = typeof(Restriction).GetMethod("ConvertStringToArrayByte", typeArray3);
generator1.EmitCall(OpCodes.Call, info5, null);
generator1.Emit(OpCodes.Stloc_S, builder11);
Type[] typeArray6 = new Type[0];
generator1.Emit(OpCodes.Newobj, typeof(DSACryptoServiceProvider).GetConstructor(typeArray6));
generator1.Emit(OpCodes.Stloc_S, builder12);
generator1.Emit(OpCodes.Ldloc_S, builder12);
FieldInfo info6 = typeof(Restriction).GetField("stDSAKeyInfoPablic");
generator1.Emit(OpCodes.Ldsfld, info6);
Type[] typeArray7 = new Type[] { typeof(string) };
MethodInfo info7 = typeof(AsymmetricAlgorithm).GetMethod("FromXmlString", typeArray7);
generator1.EmitCall(OpCodes.Callvirt, info7, null);
generator1.Emit(OpCodes.Ldloc_S, builder12);
Type[] typeArray8 = new Type[] { typeof(AsymmetricAlgorithm) };
generator1.Emit(OpCodes.Newobj, typeof(DSASignatureDeformatter).GetConstructor(typeArray8));
generator1.Emit(OpCodes.Stloc_S, builder13);
generator1.Emit(OpCodes.Ldloc_S, builder13);
generator1.Emit(OpCodes.Ldstr, "SHA1");
Type[] typeArray9 = new Type[] { typeof(string) };
MethodInfo info8 = typeof(AsymmetricSignatureDeformatter).GetMethod("SetHashAlgorithm", typeArray9);
generator1.EmitCall(OpCodes.Callvirt, info8, null);
generator1.Emit(OpCodes.Ldloc_S, builder13);
generator1.Emit(OpCodes.Ldloc_S, builder10);
generator1.Emit(OpCodes.Ldloc_S, builder11);
Type[] typeArray10 = new Type[] { typeof(byte[]), typeof(byte[]) };
MethodInfo info9 = typeof(AsymmetricSignatureDeformatter).GetMethod("VerifySignature", typeArray10);
generator1.EmitCall(OpCodes.Callvirt, info9, null);
Type[] typeArray11 = new Type[] { typeof(bool) };
MethodInfo info10 = typeof(Convert).GetMethod("ToInt32", typeArray11);
generator1.EmitCall(OpCodes.Call, info10, null);
generator1.Emit(OpCodes.Stloc_S, builder14);
generator1.Emit(OpCodes.Ldloc_S, builder14);
generator1.Emit(OpCodes.Ldloc_3);
Type[] typeArray12 = new Type[0];
MethodInfo info11 = typeof(string).GetMethod("get_Length", typeArray12);
generator1.EmitCall(OpCodes.Callvirt, info11, null);
generator1.Emit(OpCodes.Mul);
generator1.Emit(OpCodes.Ldloc_3);
Type[] typeArray13 = new Type[] { typeof(int), typeof(string) };
generator1.Emit(OpCodes.Newobj, typeof(Restriction.UnqHardwareLicense).GetConstructor(typeArray13));
generator1.Emit(OpCodes.Stloc_0);
generator1.Emit(OpCodes.Ldloc_0);
generator1.Emit(OpCodes.Stloc_S, builder15);
generator1.BeginCatchBlock(typeof(Exception));
generator1.Emit(OpCodes.Pop);
generator1.Emit(OpCodes.Ldnull);
generator1.Emit(OpCodes.Stloc_S, builder15);
generator1.EndExceptionBlock();
generator1.Emit(OpCodes.Ldloc_S, builder15);
generator1.Emit(OpCodes.Ret);
return builder3.CreateType();
}


Похоже на жуткое генерирование il кода. Явно это тут не спроста Тока спать охота, а завтра к первой паре.

Если поставить вначале break, то прога падает без разговора о точке останова... Блин. Опять наверно не то.

Прога сама большая(30 мб) но я приаттачил ехе
Вот. Если она просто ничего не сделает, значит все ок.






{ Атач доступен только для участников форума } - ADrive.zip


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 21 ноября 2006 18:37 New!
Цитата · Личное сообщение · #9

ухаха, защитный элемент генерится налету, теперь найди где происходит его вызов, и удали его.

Ранг: 77.1 (постоянный)
Статус: Участник

Создано: 21 ноября 2006 21:24 New!
Цитата · Личное сообщение · #10

Nimnul
Кстати, ты на RSDN писал про атрибут, который заставляет рефлектор писать, что функция обфусцирована и выводить только в IL? Можешь раскрыть тему подробнее?

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 21 ноября 2006 23:02 New!
Цитата · Личное сообщение · #11

Что-то я про такой атрибут не слыхал, помоему рефлектору глубоко фиолетово какие там стоят атрибуты, если он может построить приемлемый код на чем-то кроме IL он его строит, если находит ошибки со стеком или глупости с графом тут уж извините, читайте IL и сами переписывайте в C# на бумажке. ИМХО.

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 21 ноября 2006 23:10 New!
Цитата · Личное сообщение · #12

Вот залил!!!
rapidshare.com/files/4351528/setup.exe.html (10,5 MB)
Исследуйте на здоровье

Ранг: 2.0 (гость)
Статус: Участник

Создано: 22 ноября 2006 08:29 New!
Цитата · Личное сообщение · #13

Nimnul

Все бы было хорошо, но эта функция вааще не вызывается и прога падает до ее вызова. Вот.

Ранг: 1.0 (гость)
Статус: Участник

Создано: 15 января 2007 05:43 · Поправил: siemens55 New!
Цитата · Личное сообщение · #14

RSI пишет:
Вот залил!!!
//rapidshare....
Исследуйте на здоровье


Спасибо, но есть вопрос - при инсталляции без проверки CRC (запуск setup.exe с ключем /NCRC) - ругается: "Невозможно извлечь данные. Возможно поврежден дистрибутив." - на файле IC_FOUND.WAV (файл оказался реально поврежден/не-wav ). При запуске жн того, что инсталлировалось - валится с исключением 'System.IO.FileNotFoundException'.
Можно ли поиметь нормальный дистрибутив? (directx и .NET не нужны)
Или таким образом отрабатывает защита?
Спасибо


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 15 января 2007 22:42 New!
Цитата · Личное сообщение · #15

Sh[AHT]

Кстати в последней версии рефлектора можешь это посмотреть, открыв рефлектор в рефлеторе.

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 15 января 2007 22:55 New!
Цитата · Личное сообщение · #16

Nimnul
Открыл, смотрю, ничего не вижу. О каком именно атрибуте идет речь? Вот атрибуты сборки рефлектора:
[assembly: AssemblyVersion("4.2.0.0")]
[assembly: CLSCompliant(true)]
[assembly: AssemblyDelaySign(true)]
[assembly: ComVisible(false)]
[assembly: AssemblyCopyright("Copyright x00a9 2000-2006 Lutz Roeder. All rights reserved.")]
[assembly: AssemblyInformationalVersion("4.2.51.0")]
[assembly: AssemblyTitle("Lutz Roeder's .NET Reflector")]
[assembly: Dotfuscator("31773:1:3.0.2299.15296")]
[assembly: AssemblyKeyFile("PublicKey.snk")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum)]

И какой из них запрещает просмотр

Ранг: 77.1 (постоянный)
Статус: Участник

Создано: 16 января 2007 16:03 New!
Цитата · Личное сообщение · #17

jfx пишет:
И какой из них запрещает просмотр

Атрибуты висят не на сборке, а на некоторых функциях.
В принципе, 9Rays помогла где нужно, но все-таки есть способ закрыть функцию от рефлектора.


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 16 января 2007 17:49 New!
Цитата · Личное сообщение · #18

Видимо этот
[assembly: Dotfuscator("31773:1:3.0.2299.15296")]


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 16 января 2007 17:49 · Поправил: Nimnul New!
Цитата · Личное сообщение · #19

скриншот

{ Атач доступен только для участников форума } - 1.GIF

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

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 16 января 2007 23:21 New!
Цитата · Личное сообщение · #20

Вы че ребят, совсем плохие? Уж от вас точно не ожидал.
Эта сборка обработана обфускатором название которому Dotfuscator (об этом и сообщает атрибут).
Далее, меня немного выводят из себя недомолвки, если вы говорите о каком-то атрибуте - пишите его имя.
Да я знаю о том что на методы и классы тоже можно ставить атрибуты и просмотрел ключевые методы в этой сборке - там нет никаких особых атрибутов. Если же вы говорите о атрибуте в котором есть слово Debug то прежде чем постить свое мнение об этом не мешалобы сначала заглянуть в MSDN и посмотреть для чего этот атрибут используется.
Reflector не может показать тело метода на C# или VB.NET не по причине присутствия какого либо атрибута а по причине обфускации этого метода и как следствие не возможности преобразовать IL код в язык высокого уровня.
Dotfuscator это довольно примитивный обфускатор и пропатчить метод можно достаточно просто чтобы после этого он нормально декомпилировался в C#.


Ранг: 327.3 (мудрец)
Статус: Участник

Создано: 17 января 2007 00:40 New!
Цитата · Личное сообщение · #21

Nkey пишет:
Программа - ADrive 1.3

это случайно не программа обучения вождению?
тогда на руборде выкладывали для нее патч.

залей сам дистрибутив если не трудно.


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 17 января 2007 18:42 New!
Цитата · Личное сообщение · #22

jfx

Раньше, если ты застал те времена, рефлектор выдавал баг репорт если не мог декомпилировать. Но смысл не в этом, я точно видел метод на котором был атрибут, но он декомпилился. и вылетал MessageBox с мессагой, о том что метод обфусцирован. Да какая разница ? обсуждение гавна рефлектора итак затянулось

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 17 января 2007 22:20 New!
Цитата · Личное сообщение · #23

Nimnul
Если бы ты посмотрел на IL код этих методов, (если ты конечно "читаешь" IL) то все вопросы бы у тебя отпали сами собой, там буквально в нескольких первых строках видно на каких инструкциях он валится...


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 17 января 2007 23:25 · Поправил: Nimnul New!
Цитата · Личное сообщение · #24

яже сказал что метод, нормально декомпилировался, например spice'ом, но рефлектор выдавал на него месагу, о чем еще может быть спор? В данный момент в самом рефлекторе частью мусора являются команды break + лже-переходники на них. Остальное я не смотрел ибо мне пофиг, что да каг. если ты мне не веришь что рефлектор по неким сигнатурам выдает месаги, то это твое лично дело, но еслиб я лично это не видел, мне бы это не приснилось.

Ранг: 56.4 (постоянный)
Статус: Участник

Создано: 18 января 2007 00:42 New!
Цитата · Личное сообщение · #25

Да, Spice менее восприимчив к такого рода трюкам, только есть одно но: то что он генерирует игнорируя эти "трюки" и не выдавая сообщения об ошибке мало напоминает оригинальный код - реально отследить логику исполнения этого метода по Spice-овскому коду весьма проблематично. Бред короче он генерит.

Ранг: 77.1 (постоянный)
Статус: Участник

Создано: 18 января 2007 06:46 New!
Цитата · Личное сообщение · #26

jfx пишет:
а по причине обфускации этого метода и как следствие не возможности преобразовать IL код в язык высокого уровня.

Ок, не атрибут, просто фишки в IL для предотвращения декомпиляции.

jfx пишет:
там буквально в нескольких первых строках видно на каких инструкциях он валится...

расскажешь подробнее? это DotFuscator так похабит IL?


Ранг: 327.3 (мудрец)
Статус: Участник

Создано: 19 января 2007 03:41 · Поправил: bloom New!
Цитата · Личное сообщение · #27

deleted


Ранг: 1288.1 (!!!!)
Статус: Участник

Создано: 31 января 2007 23:59 New!
Цитата · Личное сообщение · #28

jfx
Если я не ошибаюсь, вы занимались отломом вмваре сетевой. Если еще интересует проект - го ту приват. Ну и если еще кого интересует - туда же. Работа будет оплачена.


Ранг: 218.9 (наставник)
Статус: Участник
dotnet

Создано: 1 февраля 2007 18:10 New!
Цитата · Личное сообщение · #29

Ara

ты уже определись кто будет отламывать

Ранг: 352.4 (мудрец)
Статус: Участник
retired

Создано: 1 февраля 2007 18:20 New!
Цитата · Личное сообщение · #30

а давайте я отломаю и получу бабки
. 1 . 2 . >>
 eXeL@B —› Основной форум —› .net После дизасемблированиякомпиляции странная ошибка(не strong name)

Видеокурс ВЗЛОМ