Сейчас на форуме: Rio, vsv1, site-pro (+7 невидимых)

 eXeL@B —› Софт, инструменты —› NET patcher - Binary Editor NET exe,dll
<< . 1 . 2 .
Посл.ответ Сообщение

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

Создано: 17 января 2014 17:59 · Поправил: Medsft
· Личное сообщение · #1

Итак непосредственно к Новому Году подготовить релиз не успел... но лучше уж поздно чем никогда

NET patcher
Утилита для бинарной правки кода в приложениях написанных в ILCode. Версия - Kristmas Edition
Возможности:

- изменение имен методов, полей и т.д.
Коммент: я использую данный функионал для того чтобы при анализе обфусцированной сборки интересующие меня методы имели
название так сказать подобающее их действиям и результам работы.Метод записи: пересборка приложения

- удаление badILCode из тел методов
Коммент: сегодня данную методику защиты используют 99% обфускаторов. Код конечно можно читать и без очистки но согласитесь гораздо приятнее когда мусорные инструкции удалены.Тут необходимо внести некоторую ясность. Некоторые обфускаторы используют неоффициальные возможности ILCode интерпретатора и изменяют заголовки методов.Поэтому крайне рекомендую в большинстве случаев я использовать universal fixer от CodeCracker`a перед началом работы. Прошу обратить внимание на слово "в большинстве"... т.е. не всегда ))).Метод записи: бинарный патчинг.

- goto Entry Point
Коммент: полезная фича особенно когда код хорошо обфусцирован.

-NOP instruction
Коммент: Как Вы поняли из названия функционала данная команда заменяет выделенные в теле метода инструкции Nop`ами.При этом я считаю самое главное и полезное)) патч исследуемого приложения происходит по типу замены байт без пересборки приложения. Не меняется ни размер самого файла ни размер самого метода.Метод записи: бинарный патчинг.

-Reverse Branch
Коммент: Инверсия прыжков.Метод записи: бинарный патчинг.

-Binary Edit
Коммент: Возможность непосредственно изменять бинарный код исследуемого приложения.Это пожалуй был самый сложный по части реализации метод.Ограничения версии: буфер для замены байт - ограничен 10 байтами.Метод записи: бинарный патчинг.

-возможность отмены ваших изменений.
Коммент: Кроме:изменение имен методов, полей и т.д.

-визуальное отображение до операции:Save Ваших внесенных изменений
Коммент: Поскольку не очень приятно редактировать код и при этом не видеть в ран-тайме а что же мы сделали.

-паралельное отображения тела метода как в IL-коде так и в байт-формате (просьба HaRpy)
Коммент: Просто приятно выделяете инструкции в окне отображения IL кода метода, а непосредственно в окне байт отображения метода выделяются байты данных инструкций.

-Save you work.
Коммент: Программа как я уже говорил раньше использует две разных методики сохранения результатов Ваших действий. Метод пересборки приложения и непосредственно бинарный патчинг. В случае использования в работе и того и другого метода сохранения работы придется сохранять результаты работы по очереди.

-OpCodeTable.
Коммент: Поскольку не все мыслят на байт-коде в программу встроена таблица всех операндов Il языка со всем что необходимо знать про ту или иную комманду.

-большой faq по Il коду with bookmark.
Коммент: Да просто надоело каждый раз лазить по винту для того чтобы что-то про Il код узнать из руководства. Взял да встроил его прямо в программу.Обращаю внимание на имеющийся функционал в данном разделе программы. Вы можете оставлять закладки на интересующие Вас страницы руководства с кастомным(т.е. Вашим собственным) описанием данной закладки. Ненужные закладки можно удалять.Для их сохранения создается в ран-тайме дополнительный файлик bookmarks.xml. Но Вам ведь не жалко 1-2 килобайт)))


http://www.mediafire.com/download/9a7391482m3tlze/NET%20Patcher.zip

New version: Kristmas Edition V.1.1.
- add Search в Ilfaq
Коммент: В связи с тем что для отображения текста используется сторонняя библиотека скорость поиска оставляет желать лучшего.Ну уж какая есть.Обращаю внимание что данное приложение не обращается к интернету все что ей необходимо для работы у нее есть.

- add IlCodeDescription in MethodListView
Коммент: Вообще тут бы надо остановиться по подробней. В главном меню появилась новая подменюшка "Options". Т.е. в программе закладываются определенные механизмы кастомизации интерфейса и функции. Как то например возможность отключения показа данной подсказки.

- add "After Save, Load in main window modify file"
Коммент: Добавил опцию несколько облегчающую работу в программе. Если она активирована после сохранения программа сама загрузит последнюю измененную сборку и откроет метод на котором Вы остановились

P.S. Мои далеко ))) идущие планы по развитию Net patcher`a можно краем глаза разглядеть в тех опциях меню которые пребывают в состоянии Enabled = False а некоторыми можно даже немного поиграться как например динамической генерацией методов для раскриптовки strings правда только если Вы пишете на C#. Что из них выйдет на паблик пока не решил. Господа не надо на них юзать всякие GrayWolf`ы в надежде поменять данное состояние контрола)))) реализации в коде нет.
P.S.S. Возможны утечки памяти.Перестартовывайте приложение хотябы иногда.

http://www.mediafire.com/download/8odtat19km6jcxe/NET%20Patcher%20v.1.1.zip

Version: Kristmas Edition V.1.2.
- fix many bugs
Коммент: Поправил баги + моноширные шрифты + по мелочи. Сами увидите.

- add technology to decrypt string in method
Коммент: Это вообще great мне вообщем понравилось))). Добавляете в options свои методы для раскриптовки стрингов (на C#), их может быть несколько, а потом выделяя строку с ldstr в методе ее декриптуете своим же методом )))) Ну похвалите меня))))

http://www.mediafire.com/download/mbwub188e01wsrt/NET%20Patcher%20v.1.2.zip

Лайки и сообщения об ошибках приветствуются.

| Сообщение посчитали полезным: Gideon Vi, daFix, AKAB, soho, nick8606, r_e, HaRpY, v00doo, Quadcon, Dazz, CyberGod, icerix, VodoleY, 4kusNick, Artem_N, Fedonin, Alinator3500, Kindly, igorca, m0bscene, Rio, Hellspawn, avqse, dfnsff, ADMIN-CRACK, Isaev, OnLyOnE, JohnyDoe, DICI BF

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

Создано: 27 января 2014 18:53
· Личное сообщение · #2

Обновил версию см. в шапке

То Isaev: у проги в ee мегабайтах упрятано много чего по нескольким причинам: во первых сторонние компоненты (не лицензированные, и другая тряхомудь). Удобней же если вся прога это один файл а не куча Dll... А сама прога и ее код не больше 500 кб)))))
To Nimnul: парсинг dnlib (мой мод) и Metadatareader от Bogdan + поток - решение соглашусь с HaPrY не самое хорошее переделаю на что нибудь одно, но потом))))
На счет посчета контрольной суммы (1 вариант(если кастомный): а что это разве не такой же метод????, 2 вариант: попробуйте Net patcher на файлике со stongName)
To 4kusNick:спасибо, я тебя увековечил в ?)))

| Сообщение посчитали полезным: 4kusNick, Dazz


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 27 января 2014 19:17
· Личное сообщение · #3

Isaev
Там один PDF (ILfaq) весит небось дофига.

Medsft
Я не против!

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

Создано: 27 января 2014 19:40
· Личное сообщение · #4

На счет string encryptora... надо бы еще undo сделать только щас допер)) А то вдруг метод раскриптовки неправильный...
4kusNick я сам допер))




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

Создано: 28 января 2014 00:14
· Личное сообщение · #5

Medsft

>> попробуйте Net patcher на файлике со stongName

Это ты к чему написал? Типа RSA не заметит твоего исправленного байта?

-----
have a nice day





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 января 2014 00:57 · Поправил: 4kusNick
· Личное сообщение · #6

Medsft
xD

Попробовал декрипт - не сработало.
Метод такой: http://pastebin.com/7G6LLDXK
Скомпилился он без ошибок.

Далее выделил строку (ldstr), на неё правой кнопкой - декрипт блабла, выбрал свой метод (он почему-то сохранил название decrypt_77, хотя я его изменил), результат:

В экземпляре объекта не задана ссылка на объект.

в NETPatcher.GUI.mainForm.tsm_Click(Object sender, EventArgs e)
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ToolStrip.WndProc(Message& m)
в System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Вообще в таком виде декрипт строк не многим лучше своей простой утилитки, которая кушает строку и выдает расшифрованную. Вся мощ патчера в том, что он умеет править сборку, этим и стоит пользоваться - строки следует расшифровывать во всей сборке имхо, при этом удаляя вызов старого расшифровщика.
Или, что вообще было бы супер - прямо расшифровщик и использовать! Опционально конечно.
Типа тыкнули на вызов метода (которому передается что-либо в аргументах, будь то зашифрованная строка,и ил число-пароль, ну вы знаете что там проты юзают короче), в контекстном меню команда типа "Try to replace with result" и "Try to replace with result all" - для одного вызова или для всех во всей сборки соответственно.

Вот тогда будет просто шикарно работать со сборками, в которых расшифровка происходит статическими методами всякими, не требующими никакой инициализации при запуске (многие проты юзают именно такие методы) - тупо все вызовы расшифровщика заменяем на результат, вуаля.

PS и очень нехватает редактирования уже добалвенного декриптовщика.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





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

Создано: 28 января 2014 01:11
· Личное сообщение · #7

>> Или, что вообще было бы супер - прямо расшифровщик и использовать!

А вот так лучше не делать, разработчики прота могут использовать это для перехвата управления.

-----
have a nice day




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

Создано: 28 января 2014 01:13 · Поправил: Medsft
· Личное сообщение · #8

название присвоенное классу Main и имя основного метода сгенерированное прогой менять нельзя. и наймспайс тоже нельзя а все остальное можно)




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

Создано: 28 января 2014 01:21
· Личное сообщение · #9

Medsft

Да ну? Ты лично проверял? Ты меняешь в файле любой байт и все, сборка уже не загрузится, если он подписан strong name. Попробуй еще запустить эту сборку на другой системе. Возможно ты наковырял параметры у себя что SN игнорируется.

-----
have a nice day





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 января 2014 01:30
· Личное сообщение · #10

Nimnul пишет:
А вот так лучше не делать, разработчики прота могут использовать это для перехвата управления.

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

Medsft пишет:
название присвоенное классу Main и имя основного метода сгенерированное прогой менять нельзя. и наймспайс тоже нельзя а все остальное можно)

Аа, вот напротив имени метода не хватает коммента, что его менять нельзя)

Nimnul
он про расшифровщик толкует.

Изменение байта в подписанной сборке будет задетекчено - это факт.
Другое дело, что можно подпись снести без потерь при удачных обстоятельствах (или отключить проверку).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




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

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

Nimnul пишет:
Ты меняешь в файле любой байт и все, сборка уже не загрузится
у меня грузится. Да верификацию не проходит но грузится. И ничего я вроде с компом не делал))



a02d_28.01.2014_EXELAB.rU.tgz - TestStrongName.zip




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

Создано: 28 января 2014 19:26 · Поправил: Nimnul
· Личное сообщение · #12

Medsft

Code:
  1. sn -D TestStrongName.exe TestStrongName.exe_patch.exe
  2.  
  3. Assemblies differ by more than their signatures
  4.  
  5. ----------------------------------------------
  6. sn -v TestStrongName.exe_patch.exe
  7.  
  8. Failed to verify assembly -- Сбой при проверке строгого имени для сборки 'TestStrongName.exe_patch.exe'.
  9.  
  10. ----------------------------------------------
  11. sn -v TestStrongName.exe
  12.  
  13. Assembly 'TestStrongName.exe' is valid


Видимо у меня тоже отключена опция запретить запуск не валидных сборок. Но как видишь из логов выше патченая сборка не проходит валидацию.

-----
have a nice day




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

Создано: 28 января 2014 21:11
· Личное сообщение · #13

Согласен.На моей машине пропатченные дллки спокойно подгружаются при старте приложений и никто на то что у них не валидная проверка стронгнайм не жалуется... Более того я тут недавно работу делал патчером так она щас на многих машинах стоит и не жалуется никто.А может эта опция у всех отключена?))))))




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

Создано: 28 января 2014 21:42 · Поправил: Nimnul
· Личное сообщение · #14

Medsft

Начиная с .Net 3.5 SP1 http://www.rsdn.ru/forum/dotnet/5320378

PS: Майкрософт как всегда в своем духе

-----
have a nice day


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


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 января 2014 23:17
· Личное сообщение · #15

Nimnul
Подтверждаю, патченный файлик со SN у меня тоже тихо себе работает.
То-то я не особо сталкивался с проблемами из-за подписи в последнее время =)

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


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

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

Создано: 29 января 2014 01:47
· Личное сообщение · #16

Вот так как-то)



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

Создано: 29 января 2014 10:09
· Личное сообщение · #17

Window`вая проверка валидности StrongName

[Flags]
public enum StrongNameInFlags : int
{
/// <summary>verify even if the settings in the registry disable it</summary>
ForceVerification = 0x00000001,
/// <summary>verification is the first (on entry to the cache)</summary>
Install = 0x00000002,
/// <summary>cache protects assembly from all but admin access</summary>
AdminAccess = 0x00000004,
/// <summary>cache protects user's assembly from other users</summary>
UserAccess = 0x00000008,
/// <summary>cache provides no access restriction guarantees</summary>
AllAccess = 0x00000010
}

[Flags]
public enum StrongNameOutFlags : int
{
/// <summary>set to false if verify succeeded due to registry settings</summary>
WasVerified = 0x00000001
}

/// <summary>
/// Verify a strong name/manifest against a public key blob
/// </summary>
/// <param name="wszFilePath">valid path to the PE file for the assembly</param>
/// <param name="dwInFlags">flags modifying behavior</param>
/// <param name="pdwOutFlags">[out] additional output info</param>
[DllImport("mscoree.dll")]
public static extern bool StrongNameSignatureVerification(
[MarshalAs(UnmanagedType.LPWStr)]string wszFilePath,
StrongNameInFlags dwInFlags, [Out]out StrongNameOutFlags pdwOutFlags);

...
StrongNameOutFlags outFlags;
StrongNameInFlags inFlags = StrongNameInFlags.Install | StrongNameInFlags.AllAccess|StrongNameInFlags.ForceVerification;
bool passedVerification = StrongNameSignatureVerification(fp, inFlags, out outFlags);


<< . 1 . 2 .
 eXeL@B —› Софт, инструменты —› NET patcher - Binary Editor NET exe,dll
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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