Сейчас на форуме: -Sanchez- (+8 невидимых) |
![]() |
eXeL@B —› Основной форум —› Взлом dotNET программ |
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 49 . 50 . >> |
Посл.ответ | Сообщение |
|
Создано: 30 августа 2010 22:59 · Поправил: s0l · Личное сообщение · #1 Со времени создания топика много обсудили, во много м разобрались и много осталось за кадром. Решил подшить выкладываемый софт и линки ![]() Инструменты: Рег-данные: Code:
Рег-данные: Code:
Статьи с хабры: Другое: [url=http://lifeinhex.com/string-decryption-with-de4dot/]String decryption with de4dot[/url - Last edit: 2012-02-17, Links fixed. Jupiter] ![]() |
|
Создано: 04 октября 2013 18:41 · Личное сообщение · #2 да просто дллка инициализируете ее (входной параметр path до exe или dll) а затем юзаете ее у себя в проекте алгоритм простой сначала вызываете паблик методы типа: AddBinDiffLineToNopByMethodRvaAndInstrIndex - (входные rva метода и индекс инструкции) AddBinDiffLineInvertBranchByMethodRvaAndInstrIndex - (входные rva метода и индекс инструкции) а затем..... хрясь метод PatchFile() - и усе на выходе пропатченный файл причем библе пох... с защитой было файло или нет потому как bin-патч и пересборка меты нам нах не нужна. ![]() |
|
Создано: 16 октября 2013 15:45 · Личное сообщение · #3 В предверии выхода новой(моей) версии DILE Debugger ![]() ![]() Решил выложить на форум мой PatcherNet (библа для бинарного патча Net-приложений) А для того чтобы того понять функционал приложил тестовое приложение+сорцы для удаления BadCode Protection которое слабал на основе PatcherNet В комплекте лежит приложение для теста (StrongName Killer by Codecracker) защищенное чем-то)))).Для того чтобы оценить посмотрите его код до и после обработки. P.S. Чтобы StrongName Killer by Codecracker заработал после очистки ))) восстановите оригинальное имя файла ))) hччp://www.mediafire.com/?e56dtu6ddmb16xu ![]() |
|
Создано: 16 октября 2013 17:24 · Личное сообщение · #4 |
|
Создано: 16 октября 2013 18:13 · Личное сообщение · #5 Моя тулза точно выпиливает все Bad инструкции из кода и ей кстати по барабану какой протектор был использован. (Алгоритм поиска известный дернут из SAE) Вообще-то тулза написана просто для того чтобы показать часть функционала PatcherNet`a. При этом если заметили PatcherNet не пересобирает сборку а прямо ее бинарно патчит. Т.Е. работоспособность кода сохраняется полностью (ну это в том случае если разработчик не применил что нибудь типа подсчета хеша, СRC)/ При этом есть определенные ограничения на его использование. - в этой версии размер методов не должен меняться. - реализовано всего два метода: а) заNOPливание любой инструкции (имя метода AddBinDiffLineToNopByMethodRvaAndInstrIndex) - тут все просто указываете на инструкцию он ее нопит б) инвертирование бранчей на автомате (типа был JZ станет JNZ) (имя метода AddBinDiffLineInvertBranchByMethodRvaAndInstrIndex) - тут тоже не сложно указываете ему инстукцию типа branch он сам ее инвертит. З.Ы.Hellspawn - посмотри свое файло любым другим дизассемблером (если увидишь в коде bad инструкции желательно прислать мне) ![]() |
|
Создано: 16 октября 2013 18:21 · Поправил: Medsft · Личное сообщение · #6 Hellspawn - проверь тулзу на тестовом приложении вдруг чето напортачил)))) при сборке А рефлектор вообще... предназначен только для реверсинга своего же кода ))) Еще хотел бы запустить опрос: Нужно ли Net-реверсеру(повторюсь интересует мнение только здешнего населения) еще один binary-patch метод в котором было бы реализовано увеличение Body метода на n-byte? ![]() |
|
Создано: 16 октября 2013 19:24 · Личное сообщение · #7 |
|
Создано: 16 октября 2013 19:40 · Поправил: Medsft · Личное сообщение · #8 Hellspawn пишет: так я на тестовом и гонял - ну и... посмотри SAE или под ILSpy или под DILE Debug (моя сборка) - ощути разницу так сказать ))) существующими до PatcherNet пересборщиками сделать такое невозможно было. Удален мусорный код при этом приложение осталось работоспособным.. И как совет восприми: Reflector жесткий дизассемблер - работающий только с правильным кодом.. и все существующие протекторы как раз нацелены против него. ![]() |
|
Создано: 16 октября 2013 20:33 · Личное сообщение · #9 |
|
Создано: 16 октября 2013 20:55 · Поправил: Medsft · Личное сообщение · #10 |
|
Создано: 16 октября 2013 22:55 · Личное сообщение · #11 Medsft пишет: Еще хотел бы запустить опрос: Нужно ли Net-реверсеру(повторюсь интересует мнение только здешнего населения) еще один binary-patch метод в котором было бы реализовано увеличение Body метода на n-byte? Абсолютно. Было бы отлично скрестить ByteMe и вашу либу, дабы иметь возможность прямо в нем пакетно что-нибудь патчить или так вот чистить сборки от BadCode инструкций + допилить ByteMe, это отличный инструмент, единственный в своём роде, но он глючноват и не очень удобен в использовании (очень не хватает редактора байткода как в SAE, чтобы можно было выбирать опкоды из списка и вбивать параметры). Проще говоря, ByteMe - отличный кандидат для доработки и доведения до уровня SAE по удобству использования. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 17 октября 2013 15:31 · Личное сообщение · #12 Посмотрел ByteMe. Впечатления - нет сырков (херня-задача в принципе, теперь есть)))) - использует для декомпиляции Mono Cecil а это плохо потому как не каждый код возьмет (чувак зачемто зашил старую версию Mono в один проект когда можно было бы просто прикладывать dll) - возможные действия над кодом: - nop инструкций (мою идею спизжил))) шучу конечно) - инверт branch инструкции (опять же моя идея )))) и реализация похуже - но это субьктивно) - edit code (строго в пределах размера изменяемой инструкции+ операнд - я это тоже реализовал в PatcherNet а потом подумал... ну ни одной мысли как использовать данный функционал и убрал из проекта чтоб Вам мозг не парить, но если кто предложит хотябы один возможный вариант использования данной функции то верну)))) ) - wipe method (ну это вообще жесть... у метода затирается заголовок я так понял для того чтобы отключить метод???? хз зачем надо) Итог: моя библиотека имеет схожый функционал (а в некоторых местах даже и получше .. ну например для распарсивания сборки используется dnlib спецуево заточенная на протекченные приложения) + ее можно использовать в своих частных проектах... ну например написать свой собственный ByteMy ![]() |
|
Создано: 17 октября 2013 15:54 · Поправил: 4kusNick · Личное сообщение · #13 Medsft пишет: - нет сырков Плохо искали. Автор их выкладывал, когда объявил что прекращает разработку. Вылил сюда: По поводу функционала - я к тому что есть же уже какой-никакой ГУЙ, почему бы к нему не прикрутить вашу либу, чтобы не делать наоборот? ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 17 октября 2013 18:55 · Поправил: nick8606 · Личное сообщение · #14 Medsft пишет: - edit code (строго в пределах размера изменяемой инструкции+ операнд - я это тоже реализовал в PatcherNet а потом подумал... ну ни одной мысли как использовать данный функционал и убрал из проекта чтоб Вам мозг не парить, но если кто предложит хотябы один возможный вариант использования данной функции то верну)))) ) Вот эта штучка так-то нужна. Интересно было бы сделать как в odbg. Патчим инструкцию, ее длина меняется, следующая инструкция, если она была не однобайтовой, заменяется нопами. При этом, естественно, размер метода не меняется. Ну и try-catch-finally не забыть... --- Ок, завтра покажу. Но вообще и так описать могу: у меня есть метод, возвращающий, например, количество объектов. В той цели, что копал я, mixed-сборка, пересобрать ее mono нельзя(вроде как), про dnlib не знаю. Так вот максимальное количество, которое я смог возвратить-это 8(ldc.i4.8) а хотелось бы 0x7fffffff :D А это, ясное дело, не один байт ![]() ![]() |
|
Создано: 17 октября 2013 20:16 · Поправил: Medsft · Личное сообщение · #15 |
|
Создано: 18 октября 2013 15:10 · Личное сообщение · #16 |
|
Создано: 18 октября 2013 15:18 · Личное сообщение · #17 |
|
Создано: 20 октября 2013 11:48 · Поправил: ajax · Личное сообщение · #18 ----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 20 октября 2013 12:12 · Личное сообщение · #19 |
|
Создано: 20 октября 2013 18:54 · Поправил: ajax · Личное сообщение · #20 |
|
Создано: 23 октября 2013 22:58 · Личное сообщение · #21 Если кто ещё не видел - отличный форк дедота: Из доработок - много обновлений под последние версии протов, подробней в комментах к коммитам читайте. Бинарники автор не выкладывает, но компилится оно без проблем. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 23 октября 2013 23:23 · Поправил: ajax · Личное сообщение · #22 4kusNick видели. тяжко таки идет, особых обнов нет Code:
----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 24 октября 2013 00:02 · Личное сообщение · #23 ----- старый пень ![]() |
|
Создано: 24 октября 2013 00:35 · Поправил: sendersu · Личное сообщение · #24 |
|
Создано: 24 октября 2013 00:53 · Личное сообщение · #25 ajax Ну, обновления под посвежевшие версии протов - уже хорошо. Репортьте автору то, чего вам не хватает, он весьма отзывчив. r_e А вот это зря =( Я поддерживаю позицию автора на тему невыкладывания бинарников. И так нубов дофига, которые только и умеют, что файл на дедот перетащить. Но вообще странно, что пришлось что-то удалять, у меня компилится все без проблем (в одном месте только пришлось private на public поправить, в 2013 студии иначе не собирается). sendersu Используйте сорцы оригинального dnlib'а: ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 24 октября 2013 01:41 · Личное сообщение · #26 4kusNick Собирал в 2013. Там в CUI есть какой-то атрибут с фиксеным PublicKey. Пришлось его удалить. Иначе сброка валилась с ошибкой. И в свойствах всех проектов пришлось удалить подписывание. Не своим же ключем подписывать. Я против вашей с автором позиции по бинарям. Сам сижу на 2008 с компилятором от 2012 и перелазить никуда не собираюсь. А д4д минимум под 2010. В этот раз просто повезло что не успел виртуалку еще снести с 2013. ----- старый пень ![]() |
|
Создано: 24 октября 2013 03:52 · Личное сообщение · #27 |
|
Создано: 29 октября 2013 12:43 · Личное сообщение · #28 Заморочился... По быстренькому надо совет)))) Есть задача не изменяя общий размер метода впихнуть в него новые строчки кода Мозг сломал на части этой задачки. Уже могу)) -расчитать для части новых Il инструкции их будующий размер а так же что они из себя представляют в байтмассиве соответстсвенно определить сколько строк старого кода (по их размеру в байтах) надо выпилить чтобы заменить их новой инструкцией в случае если остается неиспользованный код забить его нопами. Все это могу сделать в случаях когда OperandType case OperandType.InlineBrTarget: case OperandType.ShortInlineBrTarget: _ins.OpCode = op; _ins.Operand = Method.Body.Instructions[cboOperand.SelectedIndex]; break; case OperandType.InlineString: _ins.OpCode = op; _ins.Operand = cboOperand.Text; break; case OperandType.InlineNone: _ins.OpCode = op; _ins.Operand = null; break; case OperandType.InlineI: case OperandType.ShortInlineI: _ins.OpCode = op; int i = 0; if (cboOperand.Text.StartsWith("0x")) { int.TryParse(cboOperand.Text.Substring(2), NumberStyles.HexNumber, null, out i); } else { int.TryParse(cboOperand.Text, out i); } _ins.Operand = i; break; case OperandType.ShortInlineR: case OperandType.InlineR: _ins.OpCode = op; _ins.Operand = Double.Parse(cboOperand.Text); break; case OperandType.InlineI8: _ins.OpCode = op; long l = 0; if (cboOperand.Text.StartsWith("0x")) { long.TryParse(cboOperand.Text.Substring(2), NumberStyles.HexNumber, null, out l); } else { long.TryParse(cboOperand.Text, out l); } _ins.Operand = l; break; а вот отсюда не могу определить размер будующей иструкции а байтах (да и вообще тяжко с обращением в байтмассив): case OperandType.InlineField: _ins.OpCode = op; _ins.Operand = cboOperand.SelectedItem; break; case OperandType.InlineVar: case OperandType.ShortInlineVar: _ins.OpCode = op; _ins.Operand = cboOperand.SelectedItem; break; case OperandType.InlineMethod: _ins.OpCode = op; if (cboOperand.SelectedItem is MemberRef) { _ins.Operand = (MemberRef)cboOperand.SelectedItem; } else { switch (cboOperand.Text) { case METHOD_MESSAGEBOX: Importer importer = new Importer(); ITypeDefOrRef consoleRef = importer.Import(typeof(System.Windows.Forms.MessageBox)); IMethod writeLine = importer.Import(typeof(System.Console).GetMethod("Show")); _ins.Operand = writeLine; break; } } break; case OperandType.InlineSwitch: { string opStr = cboOperand.Text; if (opStr != null) { string[] ops = opStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (ops != null && ops.Length > 0) { Instruction[] opIns = new Instruction[ops.Length]; for (int ii = 0; ii < ops.Length; ii++) { int opIndex = -1; if (int.TryParse(ops[ii], out opIndex)) { if (opIndex >= 0 && opIndex < Method.Body.Instructions.Count) { opIns[ii] = Method.Body.Instructions[opIndex]; } else { opIndex = -1; } } if (opIndex == -1) { throw new Exception("Invalid instruction index" + ops[ii]); } } _ins.Operand = null; _ins.Operand = opIns; } } } break; case OperandType.InlineType: _ins.OpCode = op; if (cboOperand.SelectedItem == null) _ins.Operand = ClassEditHelper.ParseTypeReference(cboOperand.Text, Method.Module); else _ins.Operand = ClassEditHelper.ParseTypeReference(cboOperand.SelectedItem, Method.Module); break; Так вот вопрос по интересующей меня части нужен совет как обратить новую инструцию в байтмассив? Чтобы потом написать Bin-патч. Используемая библиотека dnlib, Metadatareader(SND). ![]() |
|
Создано: 02 ноября 2013 18:07 · Поправил: sendersu · Личное сообщение · #29 |
|
Создано: 03 ноября 2013 15:32 · Личное сообщение · #30 |
|
Создано: 06 ноября 2013 21:38 · Личное сообщение · #31 Вот моя вам история Покапал я ilprotector последний версии Запаковал свой "Привет Мир" После запаковки как и принято выходных 3 файла 1.Сам exe 2.извание программыБитность.dll 3.извание программыБитность.dll И я запустил программу и Извлек эту DLL которая использовалась для программы И что я увидел после нажатия Ошибку! Получается весь нужный код Храниться в DLL После анализа который показал что DLL на C++ После пару часов работы я не увидел Результата Пока что я остоновился на этом месте Кому надо вот для Теста Сама прога в атаче Может есть у кого идеи или что то еще добро пожаловать в ЛС ![]() ![]() |
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 49 . 50 . >> |
![]() |
eXeL@B —› Основной форум —› Взлом dotNET программ |
Эта тема закрыта. Ответы больше не принимаются. |