Re[5]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 10:41
Оценка:
Здравствуйте, drVanо, Вы писали:

V>>>А есть еще всякие обработки исключений и данные для SWITCH, структура которых полностью зависит от компилятора.


AWW>>Для этого "Там" делается эмуляция выполнения, линейных фрагментов кода, call и условный переход эмуляцию ресетят.


V>Эмуляция выполнения? Зачем она там нужна? Если только ядл обнаружения безусловных переходов, то это реализуется обычным дизассемблером, а не эмулятором.


Хосподи боже мой, да я вижу, вы многое, только что узнали (я про библиотеку).
Да там много-много чего делается, и в том числе и эмуляция, и именно поэтому и многое работает из коробки.
Не все кто уехал, предал Россию.
Re[9]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 10:48
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Я уже по-моему третий раз пишу — передо мной данная задача не стояла, так как исключения (по правилам) ЗАПРЕЩЕНЫ. Это ядро.


А вот Microsoft совершенно другого мнения по данному вопросу:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff546823(v=vs.85).aspx

V>>Как вы находите такие перекрестные ссылки и потом перестраиваете эти таблицы?


AWW>Быстрый (работать надо) ответ — никак. Не надо перемещать те функции которые невозможно переместить. Вы же пишите _сами_ программу, которая используя эту библиотеку, что-то такое делает. Библиотека дает вам набор возможностей.


Понятно.

AWW>Длинный ответ — делается легко. В библиотеку есть так называемые виртуальные релоки они могут быть RVA и VA. Вот берете и делаете ручками. Если хотите автоматизировать то сделать это не трудно, а вот как именно — это долго рассказывать.


Я правильно понял, что вместе с бинарником могу засунуть еще некий список релоков, который подскажет вашему ядру где на самом деле есть такие ссылки? Я правда все равно не понимаю как вы их потом будете использовать при перестроении тойже самой таблицы (в одном варианте вычитаем ImageBsse, а в другом — адрес самой таблицы).
Re[6]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 10:55
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Здравствуйте, drVanо, Вы писали:


V>>>>А есть еще всякие обработки исключений и данные для SWITCH, структура которых полностью зависит от компилятора.


AWW>>>Для этого "Там" делается эмуляция выполнения, линейных фрагментов кода, call и условный переход эмуляцию ресетят.


V>>Эмуляция выполнения? Зачем она там нужна? Если только ядл обнаружения безусловных переходов, то это реализуется обычным дизассемблером, а не эмулятором.


AWW>Хосподи боже мой, да я вижу, вы многое, только что узнали (я про библиотеку).

AWW>Да там много-много чего делается, и в том числе и эмуляция, и именно поэтому и многое работает из коробки.

Вы очень зря иронизируете, т.к. у меня есть огромный опыт в смежной теме и я не на словах представляю себе всю сложность задачи. При желании я бы мог вам помочь с каким-нибудь блоком, но судя по тому что вы категорически не настроены на диалог, то на этом прощаюсь.
Re[10]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 11:15
Оценка:
Здравствуйте, drVanо, Вы писали:

AWW>>Я уже по-моему третий раз пишу — передо мной данная задача не стояла, так как исключения (по правилам) ЗАПРЕЩЕНЫ. Это ядро.


V>А вот Microsoft совершенно другого мнения по данному вопросу:

V>https://msdn.microsoft.com/en-us/library/windows/hardware/ff546823(v=vs.85).aspx

Я так понял, что мы говорим про С++ исключения. Они таки запрещены.
Не все кто уехал, предал Россию.
Re[7]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 11:25
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Вы очень зря иронизируете, т.к. у меня есть огромный опыт в смежной теме и я не на словах представляю себе всю сложность задачи. При желании я бы мог вам помочь с каким-нибудь блоком, но судя по тому что вы категорически не настроены на диалог, то на этом прощаюсь.


Я не то, что не настроен на диалог, я даже сказал изначально, что только рад этому. Однако диалога не получилось, а получилось что-то вроде я один тут Д`Артаньян. Ну мне на такое сказать то нечего. Если вы готовы присоединиться, к проекту, я рад. Но вы же сказали — "нет уж спасибо". Ну тут уж, что я могу поделать.... Жаль. Хотя там в коде такое спагетти, что хрен разберёшься, сложный код. С кучей неявных ссылок на правку всяких оффетов и VA в каких-то разных структурах, не только в самом образе. Вообщем я буду рад, если вы что-то напишите. Я с удовольствием что-то поясню по коду.
Не все кто уехал, предал Россию.
Re[11]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 11:43
Оценка: 6 (1)
Здравствуйте, Andrew.W Worobow, Вы писали:

V>>А вот Microsoft совершенно другого мнения по данному вопросу:

V>>https://msdn.microsoft.com/en-us/library/windows/hardware/ff546823(v=vs.85).aspx

AWW> Я так понял, что мы говорим про С++ исключения. Они таки запрещены.


Я вам уже часа 2 намекаю на то, что на списке UNWIND_INFO все не заканчивается, а наоборот начинается самое интересное, а вы мне про С++ исключения

Немного ликбеза — RUNTIME_FUNCTION и UNWIND_INFO нужны исключительно для системы чтобы раскрутить стек и передать управлению обработчику, который найден для текущего RIP (начальный RIP — это адрес исключения, далее достается со стека при раскрутке). Дак вот для того чтобы у вас отработал банальный try/except:
try {
    ...
    ProbeForWrite(Buffer, BufferSize, BufferAlignment);
 
    /* Note that any access (not just the probe, which must come first,
     * by the way) to Buffer must also be within a try-except.
     */
    ...
} except (EXCEPTION_EXECUTE_HANDLER) {
    /* Error handling code */
    ...
}


На уровне RUNTIME_FUNCTION и UNWIND_INFO совершенно нет никакой инфы, а эта инфа как раз живет в HandlerData, которая передается общему (это еще не внутренности except) обработчику исключений (обработчик исключений живет в вашей программе), а дальше обработчик "парсит" HandlerData и находит регион кода для TRY блока (они кстати могут быть вложенные). Дак вот указатели на начало/конец региона, фильтр (функция в скобках у "except") и сам обработчик (уже вашего) исключения — это все ссылки на код. Как я уже говорил — это компиляторо зависимые шняги и формат структур у них может быть какой угодно.
Re[12]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 11:50
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Немного ликбеза — RUNTIME_FUNCTION и UNWIND_INFO нужны исключительно для системы чтобы раскрутить стек и передать управлению обработчику,...


Да спасибо, очень интересно! ...
Не все кто уехал, предал Россию.
Re[8]: Библиотека для редактирования бинарников.
От: drVanо Россия https://vmpsoft.com
Дата: 01.02.17 12:08
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Я не то, что не настроен на диалог, я даже сказал изначально, что только рад этому. Однако диалога не получилось, а получилось что-то вроде я один тут Д`Артаньян. Ну мне на такое сказать то нечего. Если вы готовы присоединиться, к проекту, я рад. Но вы же сказали — "нет уж спасибо". Ну тут уж, что я могу поделать.... Жаль. Хотя там в коде такое спагетти, что хрен разберёшься, сложный код. С кучей неявных ссылок на правку всяких оффетов и VA в каких-то разных структурах, не только в самом образе. Вообщем я буду рад, если вы что-то напишите. Я с удовольствием что-то поясню по коду.


Я вам с первых постов указал на ваши недоработки, от которых вы отмахивались до последнего, а потом еще и Д`Артаньяном обозвали, вот спасибо
Re[9]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 01.02.17 12:20
Оценка: :)
Здравствуйте, drVanо, Вы писали:

V>Я вам с первых постов указал на ваши недоработки, от которых вы отмахивались до последнего, а потом еще и Д`Артаньяном обозвали, вот спасибо


Мои недоработки!? хаха,... вы ничего не путаете? Все недоработки, те что вы видите, они все ваши, ибо если вам надо что-то еще, кроме того что я сделал, это только ваша проблема.

Я отмахивался до последнего?

Не, ... вы не Д`Артаньян...

Я уж не знаю как вам еще _проще_ объяснить — все, что мне было надо, все работает отлично. И если вы не понимаете, как эти всё (ваши проблемы) делается, просто и ненапряжно, то это не моя уже проблема. Сорри.
Не все кто уехал, предал Россию.
Re[3]: Библиотека для редактирования бинарников.
От: Somescout  
Дата: 04.02.17 17:08
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>В ельфах все делать проще, там все документировано, и описано, тут же, в винде, нифига не документировано.


Я, конечно, не вникал в подробности, но чем не устраивает к примеру это (pecoff.docx)?
ARI ARI ARI... Arrivederci!
Re[3]: Библиотека для редактирования бинарников.
От: Indy  
Дата: 20.02.17 07:21
Оценка:
А как вы код от данных отличаете ?
Тоесть имеется у нас ссылка, как вы узнаете что по ней находится ?
Это вероятностный подход, упрощается при наличии релоков и большом обьёме данных. Но если код можно как то графом попытаться взять, то как определить размер данных — никак.
И где в ваших сурсах код, который это делает, или это капстон дизасм делает ?
А просто графом описать известную процедуру и собрать назад это примитивная задача. Это кстате конструктором называется.
Re[4]: Библиотека для редактирования бинарников.
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.02.17 10:59
Оценка: 10 (1) +2
Здравствуйте, Indy, Вы писали:

I>А как вы код от данных отличаете ?


Народ, человек уже несколько раз объяснил, что сделал не универсальный и всеобъемлющий инструмент, а практически наколенную поделку для решения сугубо частной задачи, с которой вполне успешно справился. Не нравится — не ешьте, хватит уже тыкать в недостаток всеобщности.
Re[5]: Библиотека для редактирования бинарников.
От: Indy  
Дата: 20.02.17 17:35
Оценка:
Я не говорил что не нравится, а спросил по реализации. Отличить данные от кода это не решённая и актуальная задача. Без релоков нельзя даже быть уверенным что ссылка это ссылка, а не константа.
Re[6]: Библиотека для редактирования бинарников.
От: Andrew.W Worobow https://github.com/Worobow
Дата: 26.02.17 10:03
Оценка: 6 (1)
Здравствуйте, Indy, Вы писали:

I>Я не говорил что не нравится, а спросил по реализации. Отличить данные от кода это не решённая и актуальная задача. Без релоков нельзя даже быть уверенным что ссылка это ссылка, а не константа.


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

Кстати именно по этому этот проект и называется makelib. То есть из чужого бинарника мне надо было сделать библиотеку которую я должен был использовать в своем драйвере. Но затем оказалось проще не делать промежуточную библиотеку (DLL) а сразу делать итоговый драйвер. И именно по этому, результирующий субпроект в проекте MAKELIB называется imagemerge2.

Чтобы было проще понять как оно работает, а мне показалось что из интересующихся не все поняли это, я расскажу пару слов.

Итак — есть проект "библиотека" ImageLib есть проект "исполняемый" ImageMerge2, и есть два демотестовых проекта — TestExe и TestEject.

ImageLib это некий движок чем-то отдаленно напоминающий IDA он умеет загружать образы и ВЫГРУЖАТЬ образы, а также умеет манипулировать внутренностями бинарников. Например добавить/удалить/перечислить релоки, добавить/удалить/перечислить секции, добавить/удалить/перечислить экспорты, добавить/удалить/перечислить импорты, поменять виртуальный адрес секции, и прочее/прочее там дохрена всего.

С помощью этой библиотеки можно сделать перемещение кода функции из одной секции в другую, но это уже надо делать в своем коде, нет таких функций в этой библиотеке. Но зато есть пример ImageMerge2 в котором это все делается. И сделать это очень просто.


ImageMerge2 это субпроект который с помощью библиотеки ImageLib как раз объединяет два екзешника. Один используется как базовый второй как инжектируемый, НО тут это слово не совсем верное. Так как ничего не инжектируется а как раз таки просто объединяется.

Этот "пример" берет два екзешника и объединяет их один выходной. В том который называется инжектируемый в нем можно _задавать_ с помощью макросов функции которые будут или заменены в базовом либо которые будут вызваны в базовом.

TestExe — это демотест который симулирует базовый образ. Его код вы можете менять по своему усмотрению

TestEject — это демотест котррый симулирует использование кода базового екзешника и использование макросов.

Все это подается на вход ImageMerge2 который производит выходной экзешник запустив который вы увидите результаты на экране.

==
Что же касается определения данных и кода, и того что все делает дизасемблер... Ну что тут сказать — вы понимаете что такое дизасемблер? Расскажу на всякий случай — это просто программа которая генерирует аcсемблерный листинг, программа которая парсит машинные команды. Я его использовал только для того чтобы не писать самому. Чтобы сэкономить время. Этих дизасемблеров как грязи. ))

То есть как определяется код от данных решает анализатор кода, и ВЫ(!!!) вы сами используя эту библиотеку можете запустить анализ на данные если считаете что это код или на оборот.

==
Всё.... )
Не все кто уехал, предал Россию.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.