Сейчас на форуме: -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] ![]() |
|
Создано: 20 сентября 2013 23:10 · Личное сообщение · #2 |
|
Создано: 21 сентября 2013 01:21 · Поправил: Jonny · Личное сообщение · #3 Запись происходит в dnlib.DotNet.Writer.MetaData.WriteMethodBodies() нужно его переделать, например на след.: перед циклом создаем объект PEImage из ориг. образа и вместо Code:
читаем сырые байты используя например MethodBodyReader Code:
![]() |
|
Создано: 21 сентября 2013 05:30 · Поправил: 4kusNick · Личное сообщение · #4 Идея понятна, но MethodBodyReader не отдаст сырые байты, он парсит при чтении. Во всей либе он используется только в методе ReadCilBody, там видно что он ждёт параметры метода, тело которого читается, и в кишках самого ридера видно, что происходит в методе Read - там считываются и парсятся заголовки, локальные переменные, инструкции и т.д.. В общем, сырыми байтами не пахнет ( Похоже надо где-то подсмотреть размеры тела метода и попробовать считать его исходя из оффсета и размера обычным дедовским способом "как есть", а потом передать в конструктор MethodBody вместо writer.Code. И посмотреть что будет ![]() ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 21 сентября 2013 21:07 · Поправил: Jonny · Личное сообщение · #5 4kusNick пишет: Похоже надо где-то подсмотреть размеры тела метода и попробовать считать его исходя из оффсета и размера обычным дедовским способом "как есть", а потом передать в конструктор MethodBody вместо writer.Code. method.RVA указывает на тело метода. Его формат расписан "Common Language Infrastructure (CLI) Partition II: Metadata Definition and Semantics" 25.4 Common Intermediate Language physical layout. Процесс сводится к чтению заголовка (бывает двух видов, потом вычленение из заголовка размера массива байтов самих инструкций, и еще чтение доп секций после кода, если есть (указывается также в заголовке)). Все это реализовано в MethodBodyReader. И чтобы не переписывать все заново , как вариант - добавить в CilBody свойство RawData и в методе MethdoBodyReader.Read читать в него, а в MethdoBodyWriter - использовать. Upd: Чтобы сделать более универсальным, добавить в Metadata.options новый флаг - CliBodyRawMode и отталкиваясь от его значения, включать или выключать режим чтения сырых байтов. ![]() |
|
Создано: 21 сентября 2013 23:19 · Поправил: Medsft · Личное сообщение · #6 |
|
Создано: 22 сентября 2013 08:48 · Личное сообщение · #7 Есть какие то идеи по снятию ilprotector ? Какаето новая версия, дедот не берет, даже не знаю с какой стороны подступить... ![]() ----- -=истина где-то рядом=- ![]() |
|
Создано: 23 сентября 2013 21:21 · Поправил: Jonny · Личное сообщение · #8 KingSise пишет: Есть какие то идеи по снятию ilprotector ? Какаето новая версия, дедот не берет, даже не знаю с какой стороны подступить... Для начала попробуй открыть в ilspy например. Изучаем статический конструктор <Module> - видим, что защита упирается в вызов внешней функции keysbrxx.P0 и последующей иницализации диспетчера функций, через которую и происходит вызов методов в сборке. В архиве данного dll нет. ![]() |
|
Создано: 24 сентября 2013 08:35 · Личное сообщение · #9 |
|
Создано: 24 сентября 2013 11:26 · Личное сообщение · #10 |
|
Создано: 27 сентября 2013 03:26 · Поправил: SSTREGG · Личное сообщение · #11 KingSise последний de4dot нормально снял. ILProtector использовался старый, последний добавляет статическое поле int a в <Module> ![]() ![]() |
|
Создано: 27 сентября 2013 23:19 · Поправил: ADMIN-CRACK · Личное сообщение · #12 |
|
Создано: 29 сентября 2013 11:53 · Личное сообщение · #13 |
|
Создано: 30 сентября 2013 14:14 · Личное сообщение · #14 |
|
Создано: 02 октября 2013 19:32 · Личное сообщение · #15 Господа... и дамы (если такие имеются)!!!!! Один маленький вопрос))) Схематично что? я должен поправить в NET PE- файле в случае если я в одном из методов увеличил Method.Body на 10 байт...? Из вводных к вопросу 1.Размер секции кода менять не нужно 2.Заголовок файла полностью серилизован.(DOS-header,PE-header,Data section c CLR directory).Все таблицы как на ладони)))) З.Ы. Ногами не пинать))))) я не колобок ![]() |
|
Создано: 03 октября 2013 20:19 · Личное сообщение · #16 |
|
Создано: 03 октября 2013 20:33 · Личное сообщение · #17 |
|
Создано: 03 октября 2013 23:02 · Личное сообщение · #18 Medsft вопрос некорректный. что значит увеличили Method.Body? изменили размер в заголовке метода? если так то понятно что и тело должно быть увеличено на столько же, иначе в метод попадёт незнамо чо). Если же вы используете например моно, и где то там меняете размер метода, то хз что будет) предлагаю поменять и посмотреть) ----- zzz ![]() |
|
Создано: 04 октября 2013 13:51 · Поправил: Medsft · Личное сообщение · #19 zeppe1in пишет: вопрос некорректный - согласен наверное... Опишу подробнее -берем файло превращаем в байт массив (до этого выяснили rva метода ) -берем их него секцию содержащую код находим в секции место где лежит наш метод (обращаю внимание его Body!!!) делим секцию на два куска один от начала до конца метода(его Body!!!) второй соответственно вся оставшаяся часть с нулями для выравнивания и раздвигаем данные на к примеру 10 байт затем все это обратно в льем в filestream имеем на выходе размер файла не изменился физический размер секции не изменился ясен пень изменились адреса методов что ниже вклееного нами куска - их поменяю (зная на сколько мы увеличили сам метод) соответственно всем на столько в таблице сдвинем rva а еще чего надо изменить в заголовке файла то? Кривое получилось наверное обьяснение ну уж извините ![]() |
|
Создано: 04 октября 2013 14:51 · Личное сообщение · #20 |
|
Создано: 04 октября 2013 15:39 · Личное сообщение · #21 Рефлексил юзает сесил, а Medsft как я понял сам пытается править, без либ сторонних, дваже сырки сесила ему не помогут, т.к. там пересобирается вся сборка. Medsft Так вы пробовали в текущем виде результат проверять? Может ничего и не надо менять кроме смещений остальных методов? ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 04 октября 2013 16:29 · Поправил: Medsft · Личное сообщение · #22 4kusNick пишет: Так вы пробовали в текущем виде результат проверять? - чето не хватает не робит..( Обьясню для чего мне это надо.. Лабаю PatcherNet -это я его так назвал))))) некую dll для прямого патчинга NET-файла. Сторонние библы типа DNLib, NETPE, MetadataReader - используются только для того чтобы разпарсить мету, тело метода, и превратить его в байт-массив, все дальнейшие операции по патчингу производятся строго на уровне byte-патч в filestreame (как вы уже догадались все остальные варианты с защищенными файлами не робят). Уже сейчас могу: нопить любые инструкции, обращать условные переходы т.е. могу делать все че угодно при условии что тело метода не меняет своего размера. И вот настало время когда хочется раздвигать или сдвигать тела методов поэтому и возник етот вопрос ![]() |
|
Создано: 04 октября 2013 16:36 · Личное сообщение · #23 |
|
Создано: 04 октября 2013 16:39 · Поправил: HaRpY · Личное сообщение · #24 Medsft пишет: Обьясню для чего мне это надо.. Тогда стоит изучить документ http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf По сути вопроса, если не ошибаюсь, до достаточно только указывать валидный RVA в таблице MethodDef и не забывать про выравнивание адресов начала тел методов. В общем, кури доку там много чего полезного ![]() |
|
Создано: 04 октября 2013 16:56 · Личное сообщение · #25 |
|
Создано: 04 октября 2013 17:05 · Поправил: HaRpY · Личное сообщение · #26 |
|
Создано: 04 октября 2013 17:22 · Личное сообщение · #27 |
|
Создано: 04 октября 2013 17:27 · Поправил: HaRpY · Личное сообщение · #28 |
|
Создано: 04 октября 2013 17:34 · Личное сообщение · #29 HaRpY пишет: Ты писал, что увеличивал метод на 10 байт, что не кратно 4. Выравнивание fat-методов "поплыло". Так работать не будет. Ну это на вскидку... так с этим разобрался путем: сначала делаем с методом че хотим в DNLibe потом оттуда получаем байт-массив с инфой о методе т.е. сам метод выглядит не прикопаешься... а потом етот массив впиливаем в наш файлстим, корректируем таблицу методов... пока все ![]() |
|
Создано: 04 октября 2013 17:39 · Личное сообщение · #30 |
|
Создано: 04 октября 2013 18:26 · Поправил: ZaZa · Личное сообщение · #31 |
<< 1 ... 27 . 28 . 29 . 30 . 31 . 32 . 33 . 34 . 35 . 36 . 37 ... 49 . 50 . >> |
![]() |
eXeL@B —› Основной форум —› Взлом dotNET программ |
Эта тема закрыта. Ответы больше не принимаются. |