Сейчас на форуме: cppasm, asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Туториал по распоковка ILProtector-а (в. 2.0.1x)
Посл.ответ Сообщение

Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 05 апреля 2016 13:53 · Поправил: cryptX
· Личное сообщение · #1

Здраствуйте уважаемые,

столкнулся с задачей распаковки ILProtector-а, собственно хотел бы узнать как можно снять ручками, есты у кого материалы/туториалы ?

Попробовал вторую версию unpacker-а от CodeCracker-a, не помогло (пишет что декриптовал 42 метода, но в файле опять одно и тоже
Code:
  1. .Invoke(222))(this, newData)
итд.

С уважением,
cryptX.



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 06 апреля 2016 11:11 · Поправил: Medsft
· Личное сообщение · #2

Раз Вам это надо! тогда Давайте вы(cryptX) напишете первую половину тутора содержащую разложенную информацию по полочкам отпринципах работы модулей защиты ILProtector`a (желательно с картинками) а я вторую как его снять.
P.S. Да и приложите к топику имеющиеся на просторах инета инструменты которые не работают на вашей версии, но может быть будут полезны другим

| Сообщение посчитали полезным: cryptX

Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 08 апреля 2016 06:21
· Личное сообщение · #3

Medsft

Спасибо за конструктивное предложение!! на следующей неделе отправлю первую половину

п.с: Отдельное спасибо Shadow785 !!



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 08 апреля 2016 11:40 · Поправил: Medsft
· Личное сообщение · #4

Я тут вчера увлекся ILProtectorom, залез в сырки codecrackera, действительно пока не получится расшифровать тела методов пока их хотя бы раз не запускали(ключ динамический) А так его утилита работает

cryptX - спасибо можно первую часть не писать. Код утилиты в открытом виде там и так все понятно



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 09 апреля 2016 06:42
· Личное сообщение · #5

Medsft пишет:
А так его утилита работает

это ilProtectorUnpacker? И 1-я, и 2я работают только на старых версиях. Текущую версию вообще ниче не декриптят))

-----
SaNX




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 09 апреля 2016 07:21 · Поправил: cryptX
· Личное сообщение · #6

SaNX
Да, есть разновидности первой версий, которые работают...правда пробовано до версий 2.0.18



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 09 апреля 2016 16:48 · Поправил: SaNX
· Личное сообщение · #7

cryptX пишет:
Да, есть разновидности первой версий, которые работают

Мне этот говнопрот попался на одной проге давно, когда еще Grim Fandango ее просил сломать.
Вот щас опять в запросах: https://exelab.ru/f/action=vthread&forum=2&topic=23172&page=33#22

Ее ниче не берет, кроме динамиктрейсера. Но там просто декрипченные методы получаешь в отдельной либе и все.

Хорошо, что этот прот не распространен ))

-----
SaNX




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 09 апреля 2016 20:35
· Личное сообщение · #8

SaNX
а можно поподробнее что за динамиктрейсер ? (если конфиденциально можно в личку )



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 09 апреля 2016 20:45
· Личное сообщение · #9

cryptX

4eb6_09.04.2016_EXELAB.rU.tgz - DynamicTraceMono2.zip

-----
SaNX


| Сообщение посчитали полезным: cryptX


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 09 апреля 2016 21:07
· Личное сообщение · #10

SaNX а исходники есть?

-----
[nice coder and reverser]




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 09 апреля 2016 21:25 · Поправил: cryptX
· Личное сообщение · #11

Hellspawn
вот, достал через декомпилятор))

db4c_09.04.2016_EXELAB.rU.tgz - DynamicTraceMono_source.7z

Добавлено спустя 14 минут
SaNX
а как сделать маппинг методов которые декомпилировал динамиктрейсер ? ,
там имена примерно такие:
Code:
  1. public static Delegate _method_4( _u0005u2004, int num)


Как узнать какой метод и когда вызывается ?



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 09 апреля 2016 22:56
· Личное сообщение · #12

cryptX
Hellspawn
обоим ответ: а хз ))
аффтар же не я, а тот же чувак что и анпакер написал. тусит на тутсях, если что.

-----
SaNX





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 09 апреля 2016 23:46
· Личное сообщение · #13

SaNX
да я на всякий, хочу дотнетом поплотнее заняться)))

-----
[nice coder and reverser]




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 11 апреля 2016 13:03 · Поправил: Medsft
· Личное сообщение · #14

SaNX пишет:
это ilProtectorUnpacker? И 1-я, и 2я работают только на старых версиях.
а о 3 версии не судьба поинтересоваться? на тутсях в открытом виде лежит
Hellspawn пишет:
хочу дотнетом поплотнее заняться)))
написал бы ты public static class HideDebugger() с одним методом public static void StartDebuggerProtection() а внутри сам понял из названия что цены б не было для общества)))) а посмотреть используемые методы защиты (обнаружения отладчика) можно прям тут)))
Code:
  1. internal static class AntiDebugWin32 {
  2.                  static void Initialize() {
  3.                         string x = "COR";
  4.                         if (Environment.GetEnvironmentVariable(+ "_PROFILER") != null ||
  5.                             Environment.GetEnvironmentVariable(+ "_ENABLE_PROFILING") != null)
  6.                               Environment.FailFast(null);
  7.  
  8.                         var thread = new Thread(Worker);
  9.                         thread.IsBackground = true;
  10.                         thread.Start(null);
  11.                  }
  12.  
  13.                  [DllImport("kernel32.dll")]
  14.                  static extern bool CloseHandle(IntPtr hObject);
  15.  
  16.                  [DllImport("kernel32.dll")]
  17.                  static extern bool IsDebuggerPresent();
  18.  
  19.                  [DllImport("kernel32.dll")]
  20.                  static extern int OutputDebugString(string str);
  21.  
  22.                  static void Worker(object thread) {
  23.                         var th = thread as Thread;
  24.                         if (th == null) {
  25.                               th = new Thread(Worker);
  26.                               th.IsBackground = true;
  27.                               th.Start(Thread.CurrentThread);
  28.                               Thread.Sleep(500);
  29.                         }
  30.                         while (true) {
  31.                               // Managed
  32.                               if (Debugger.IsAttached || Debugger.IsLogging())
  33.                                    Environment.FailFast("");
  34.  
  35.                               // IsDebuggerPresent
  36.                               if (IsDebuggerPresent())
  37.                                    Environment.FailFast("");
  38.  
  39.                               // OpenProcess
  40.                               Process ps = Process.GetCurrentProcess();
  41.                               if (ps.Handle == IntPtr.Zero)
  42.                                    Environment.FailFast("");
  43.                               ps.Close();
  44.  
  45.                               // OutputDebugString
  46.                               if (OutputDebugString("") > IntPtr.Size)
  47.                                    Environment.FailFast("");
  48.  
  49.                               // CloseHandle
  50.                               try {
  51.                                    CloseHandle(IntPtr.Zero);
  52.                               }
  53.                               catch {
  54.                                    Environment.FailFast("");
  55.                               }
  56.  
  57.                               if (!th.IsAlive)
  58.                                    Environment.FailFast("");
  59.  
  60.                               Thread.Sleep(1000);
  61.                         }
  62.                  }
  63.          }

и еще тут
Code:
  1. internal static class AntiDebugSafe {
  2.                  static void Initialize() {
  3.                         string x = "COR";
  4.                         if (Environment.GetEnvironmentVariable(+ "_PROFILER") != null ||
  5.                             Environment.GetEnvironmentVariable(+ "_ENABLE_PROFILING") != null)
  6.                               Environment.FailFast(null);
  7.  
  8.                         var thread = new Thread(Worker);
  9.                         thread.IsBackground = true;
  10.                         thread.Start(null);
  11.                  }
  12.  
  13.                  static void Worker(object thread) {
  14.                         var th = thread as Thread;
  15.                         if (th == null) {
  16.                               th = new Thread(Worker);
  17.                               th.IsBackground = true;
  18.                               th.Start(Thread.CurrentThread);
  19.                               Thread.Sleep(500);
  20.                         }
  21.                         while (true) {
  22.                               if (Debugger.IsAttached || Debugger.IsLogging())
  23.                                    Environment.FailFast(null);
  24.  
  25.                               if (!th.IsAlive)
  26.                                    Environment.FailFast(null);
  27.  
  28.                               Thread.Sleep(1000);
  29.                         }
  30.                  }
  31.          }

да и еще туда же надо бы добавить патч CrypoVerify вот
Code:
  1.  num = 0;
  2.                     byte[] lpBuffer = new byte[] { 0x33, 0xc0, 0x40, 0xc2, 0x18, 0 };
  3.                     IntPtr moduleHandle = GetModuleHandle("advapi32.dll");
  4.                     if (moduleHandle != IntPtr.Zero)
  5.                     {
  6.                         IntPtr procAddress = GetProcAddress(moduleHandle, "CryptVerifySignatureA");
  7.                         if (procAddress != IntPtr.Zero)
  8.                         {
  9.                             WriteProcessMemory(-1, procAddress, lpBuffer, lpBuffer.Length, ref num);
  10.                         }
  11.                         IntPtr lpBaseAddress = GetProcAddress(moduleHandle, "CryptVerifySignatureW");
  12.                         if (lpBaseAddress != IntPtr.Zero)
  13.                         {
  14.                             WriteProcessMemory(-1, lpBaseAddress, lpBuffer, lpBuffer.Length, ref num);
  15.                         }
  16.                     }




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 11 апреля 2016 13:05 · Поправил: SaNX
· Личное сообщение · #15

Medsft пишет:
а о 3 версии не судьба поинтересоваться? на тутсях в открытом виде лежит

а ктоб знал. когда я там лазил, его не было еще.

ЗЫ: попробовал, не работает. тупо вылетает

-----
SaNX




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 11 апреля 2016 14:16
· Личное сообщение · #16

SaNX пишет:
тупо вылетает
и такое бывает. А пробовал для разных версий фреймворка? )))) там и для 2.0 и для 4.0 разные ))))))




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 11 апреля 2016 15:48
· Личное сообщение · #17

Medsft слушай а хорошее идейка ты намекаешь на плаг к твоей тулзе? сделать бы более-менее
универсально. поможешь, если что?

-----
[nice coder and reverser]




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 11 апреля 2016 16:45 · Поправил: Medsft
· Личное сообщение · #18

Вообще без проблем))

Добавлено спустя 24 минуты
Hellspawn пишет:
сделать бы более-менее
универсально
с этим более менее проблемы. Есть 3 варианта практического применения твоего будующего класса или отдельной тулзы
В начале проблемы: как заметил для детекта используются не только апи но и чисто дот техники(которые тоже через апи наверное но тут я пас).
1 вариант содержать твой код с самом отладчике (к примеру моем) --- совсем не универсально
2 вариант инжектить твой код в сборку перед выполнением(и вызывать в module.cctor) --- очень даже ничего, но в некоторые сборки незаинжектишь
3 вариант делать dotnetbox(см работы codecrackera MegaX) типа лоадера --- самый ништяк но я не знаю (верней пока не знаю получится ли потом отлаживать... наверное получится)



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 11 апреля 2016 19:32
· Личное сообщение · #19

Medsft пишет:
написал бы ты public static class HideDebugger()


+1
пригодится еще для CryptoObfuscator-а


 eXeL@B —› Вопросы новичков —› Туториал по распоковка ILProtector-а (в. 2.0.1x)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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