Сейчас на форуме: rmn, exp50848 (+8 невидимых)

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

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

Создано: 20 ноября 2006 12:13 · Поправил: Nkey
· Личное сообщение · #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 (гость)
Активность: 0=0
Статус: Участник

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

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

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

-----
have a nice day




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

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

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



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

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

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



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

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

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



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

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

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

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



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

Создано: 21 ноября 2006 15:34
· Личное сообщение · #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 мб) но я приаттачил ехе
Вот. Если она просто ничего не сделает, значит все ок.






5191_21.11.2006_CRACKLAB.rU.tgz - ADrive.zip




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

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

-----
have a nice day




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

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

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



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

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

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



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

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

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



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

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

Nimnul

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



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

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

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


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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

Sh[AHT]

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

-----
have a nice day




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

Создано: 15 января 2007 22:55
· Личное сообщение · #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 (постоянный)
Активность: 0.040
Статус: Участник

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

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

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

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

-----
have a nice day





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

скриншот

ad75_16.01.2007_CRACKLAB.rU.tgz - 1.GIF

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

-----
have a nice day




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

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

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




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

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

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

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

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

-----
in search of sunrise





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

jfx

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

-----
have a nice day




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

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

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

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

-----
have a nice day




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

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

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



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

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

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

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

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

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




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

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

deleted

-----
in search of sunrise





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

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

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




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

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

Ara

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

-----
have a nice day




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

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

а давайте я отломаю и получу бабки


. 1 . 2 . >>
 eXeL@B —› Основной форум —› .net После дизасемблированиякомпиляции странная ошибка(не strong name)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати