roma912 Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Итак,хотелось бы затронуть такую тему как Хук функций на c#. Соответсвенно со сканером сигнатур. Но главный вопрос каким образом можно найти code cave, и сделать переадресацию на свою кастомную функцию? Только c#, без плюсов))) Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Привет! Pinvoke и вперед, все то же самое. Правда, inline-ассемблера в шарпе нет, так что придется возиться с сырыми опкодами команд. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 23 апреля, 2017 Автор Поделиться Опубликовано 23 апреля, 2017 В 23.04.2017 в 08:58, keng сказал: Привет! Pinvoke и вперед, все то же самое. Правда, inline-ассемблера в шарпе нет, так что придется возиться с сырыми опкодами команд. Показать Чем мне поможет pinvoke. Нажо ведь хукнуть endscene из приложения, но пока что не особо понимаю что к чему Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 В 23.04.2017 в 09:00, roma91212 сказал: Чем мне поможет pinvoke. Нажо ведь хукнуть endscene из приложения, но пока что не особо понимаю что к чему Показать Так банально ReadProcessMemory для поиска функции и WriteProcessMemory для записи хука, например. Или как ты себе представляешь процесс? В шарпе прямого доступа к winapi нет, так что pinvoke и unmanaged-код - чуть ли не единственный вариант. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 23 апреля, 2017 Автор Поделиться Опубликовано 23 апреля, 2017 В 23.04.2017 в 09:03, keng сказал: Так банально ReadProcessMemory для поиска функции и WriteProcessMemory для записи хука, например. Или как ты себе представляешь процесс? В шарпе прямого доступа к winapi нет, так что pinvoke и unmanaged-код - чуть ли не единственный вариант. Показать Насчет чтения, записи - у меня есть уже одна библиотека. День назад делал свой чит для кс, но само рисование было поверх окна, пусть без мерцаний, но такой результат мне все равно не нравится. Поэтому я и хочу сделать хук endscene Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Я предположу, что даже у unsafe функции будет пролог, так что не совсем понятно, куда пихать начало старой EndScene после записи вместо него перехода на хук. Можно, конечно, психануть и все руками написать - выделить место, записать туда код побайтово, а затем использовать это как функцию. Проблема, в общем, в том, что нельзя сделать declspec naked в шарпе. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 23 апреля, 2017 Автор Поделиться Опубликовано 23 апреля, 2017 (изменено) В 23.04.2017 в 09:14, keng сказал: Я предположу, что даже у unsafe функции будет пролог, так что не совсем понятно, куда пихать начало старой EndScene после записи вместо него перехода на хук. Можно, конечно, психануть и все руками написать - выделить место, записать туда код побайтово, а затем использовать это как функцию. Проблема, в общем, в том, что нельзя сделать declspec naked в шарпе. Показать А почему нельзя найти просто endscene, codecave. И поьои при каждом вызове оригинальной endscene, прыгать на свою в code cave перед этим рисуя что мне нужно Изменено 23 апреля, 2017 пользователем roma91212 Этот интерфейс с телефона неадекватен. Нельзя стирать введенное сообщение.... Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Ну, логика-то верная. Просто есть технические нюансы. Их на шарпе реализовать сложнее, чем на си или на плюсах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость iDReeM Опубликовано 6 мая, 2017 Поделиться Опубликовано 6 мая, 2017 (изменено) В 23.04.2017 в 09:34, roma91212 сказал: А почему нельзя найти просто endscene, codecave. И поьои при каждом вызове оригинальной endscene, прыгать на свою в code cave перед этим рисуя что мне нужно Показать 1) найти начало виртуальной таблицы 2) посчитать смещение до нужной функции int dwVTable = 0x0;//условный указатель на виртуальную таблицу. int EndSceneAddress = dwVTable + 168;//EndScene=42, 42*4=168 3) взять от туда адресс оригинальной EndScene 4) написать свою EndScene на С++, посмотреть как она выглядит, снять сигнатуру, или же прочитать сигнатуру оригинальной функции и просто скомуниздить. typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice); oEndScene pEndScene = NULL; HRESULT APIENTRY myEndScene( LPDIRECT3DDEVICE9 pDevice ) { return pEndScene( pDevice ); } 5) хукнуть оригинальную endScene по примеру с ютуба. (основная задача выцепить виртуальную таблицу, можно FindPattern юзать) Хукнуть то выйдет, а вот сколько гемороя будет с инициализацией и обработкой шрифта, линий... Дешевле на С++ Dll писать и инжектить. Все вышеизложенное крайне кратко, стоит понимать что придется потеть. Изменено 6 мая, 2017 пользователем iDReeM P.S Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 8 мая, 2017 Поделиться Опубликовано 8 мая, 2017 В 23.04.2017 в 05:39, roma91212 сказал: Итак,хотелось бы затронуть такую тему как Хук функций на c#. Соответсвенно со сканером сигнатур. Но главный вопрос каким образом можно найти code cave, и сделать переадресацию на свою кастомную функцию? Только c#, без плюсов))) Показать А готовый библиотекой пользоваться приветствуется? Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 8 мая, 2017 Автор Поделиться Опубликовано 8 мая, 2017 В 08.05.2017 в 15:26, Laziz сказал: А готовый библиотекой пользоваться приветствуется? Показать Чистый с# приветствуется)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 8 мая, 2017 Поделиться Опубликовано 8 мая, 2017 В 08.05.2017 в 21:48, roma91212 сказал: Чистый с# приветствуется)) Показать Ну, не совсем чистый C#, в прочем почитай про них сам. Называется 1. "EasyHook". (для инъекции библиотеки написанный на C# в любую программу) 2. "SharpDX" (типо аналог DirectXа на C#) Я делал хук на примере Chameleon Wallhack по видео Keng`a только на C# с помощью этих библиотек, получилось довольно не плохо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 16 мая, 2017 Поделиться Опубликовано 16 мая, 2017 (изменено) В 23.04.2017 в 09:14, keng сказал: Я предположу, что даже у unsafe функции будет пролог, так что не совсем понятно, куда пихать начало старой EndScene после записи вместо него перехода на хук. Можно, конечно, психануть и все руками написать - выделить место, записать туда код побайтово, а затем использовать это как функцию. Проблема, в общем, в том, что нельзя сделать declspec naked в шарпе. Показать Ошибаешься, базоыве знания C#. А "старый EndScene" никуда пихать не надо Делаешь jmp на свой EndScene, рисуешь, убираешь прыжок, вызываешь старый EndScene, ставишь прыжок обратно. Изменено 16 мая, 2017 пользователем Blackdots Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 16 мая, 2017 Поделиться Опубликовано 16 мая, 2017 В 08.05.2017 в 22:17, Laziz сказал: "EasyHook". (для инъекции библиотеки написанный на C# в любую программу) Показать Зачем? Это тоже самое, что скачать библиотеку которая умеет выводить MessageBox, изихук - лишнее Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 16 мая, 2017 Поделиться Опубликовано 16 мая, 2017 В 16.05.2017 в 00:40, Blackdots сказал: Ошибаешься, базоыве знания C#. А "старый EndScene" никуда пихать не надо Делаешь jmp на свой EndScene, рисуешь, убираешь прыжок, вызываешь старый EndScene, ставишь прыжок обратно. Показать Тогда я бы посмотрел на пример кода. Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 В 16.05.2017 в 12:29, keng сказал: Тогда я бы посмотрел на пример кода. Показать Quote public static int HookedEndScene(IntPtr pointer) { using(var device = Device.FromPointer(pointer)) { // Risuem)))) hook.UnsetJump(); int toret = device.EndScene().Code; hook.SetJump(); return toret; } } Показать Ссылка на комментарий Поделиться на другие сайты Поделиться
rtm Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 (изменено) asmJIT for .Net Ой, туплю. Изменено 17 мая, 2017 пользователем rtm Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 В 16.05.2017 в 00:40, Blackdots сказал: Делаешь jmp на свой EndScene, рисуешь, убираешь прыжок, вызываешь старый EndScene, ставишь прыжок обратно. Показать Такой способ не очень хорош. Постоянно перезаписывать функцию - очень и очень фигово. В случае с EndScene может и нормально, потому что в принципе только один поток вызывает эту функцию, но если это какая-нибудь APIшка которую могут использовать разные потоки - то тебе хана. Лучше сделать как сказал keng: В 23.04.2017 в 09:14, keng сказал: Можно, конечно, психануть и все руками написать - выделить место, записать туда код побайтово, а затем использовать это как функцию Показать И ты так говоришь, keng, как будто это офигеть как тяжело ("психануть", "все руками"..), но на самом деле это самый трушный способ что есть. По моему так же делает detours, когда он переносит эти самые 5 байт (в идеале) в выделенное место и добавлят после них jmp EndScene+5. И это можно реализовать на любом языке, который может хоть как-то работать с памятью напрямую. Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 В 17.05.2017 в 14:19, uhx сказал: Такой способ не очень хорош. Постоянно перезаписывать функцию - очень и очень фигово. В случае с EndScene может и нормально, потому что в принципе только один поток вызывает эту функцию, но если это какая-нибудь APIшка которую могут использовать разные потоки - то тебе хана. Лучше сделать как сказал keng Показать Не могу себе представить, что endscene будут вызывать разные потоки Можно найти call EndScene в самой игре и заменить её на call HookedEndScene и уже самому вызывать оригинал без перезаписей и тд, но в игре могут быть проверки девственности кода. Кстати, побайтово в игру ничего записывать не нужно, это полный бред, достаточно записать указатель на свою функцию Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 (изменено) В 17.05.2017 в 14:58, Blackdots сказал: Кстати, побайтово в игру ничего записывать не нужно, это полный бред, достаточно записать указатель на свою функцию Показать лол. ну а это не является записью, что ли: В 17.05.2017 в 14:58, Blackdots сказал: Можно найти call EndScene в самой игре и заменить её на call HookedEndScene Показать и тогда уж проще найти девайс и поставить хук в его виртуальной таблице, не? В 17.05.2017 в 14:58, Blackdots сказал: Не могу себе представить, что endscene будут вызывать разные потоки Показать Я же сказал, что с EndScene это еще нормально, но такой хук сам по себе очень плохой. В 17.05.2017 в 14:58, Blackdots сказал: но в игре могут быть проверки девственности кода. Показать Первое - их можно обойти. Второе - никто и никогда не проверяет EndScene на "целостность", потому что любая записывающая видеоролики программа способна поставить хук на эту функцию. Изменено 17 мая, 2017 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 (изменено) В 17.05.2017 в 15:07, uhx сказал: лол. ну а это не является записью, что ли: и тогда уж проще найти девайс и поставить хук в его виртуальной таблице, не? Я же сказал, что с EndScene это еще нормально, но такой хук сам по себе очень плохой. Первое - их можно обойти. Второе - никто и никогда не проверяет EndScene на "целостность", потому что любая записывающая видеоролики программа способна поставить хук на эту функцию. Показать Я имею ввиду, что "психануть и побайтово записывать функцию" - лишнее. Четвёртое, я об этом и говорю, что если изменить вызов игры на EndScene - проверка кода сработает, а если заменить сам EndScene (как я описал) то проверка не сработает P.S. в смысле хук в виртуальной таблице? Она хранит только адреса Изменено 17 мая, 2017 пользователем Blackdots Ссылка на комментарий Поделиться на другие сайты Поделиться
uhx Опубликовано 17 мая, 2017 Поделиться Опубликовано 17 мая, 2017 (изменено) В 17.05.2017 в 15:15, Blackdots сказал: Я имею ввиду, что "психануть и побайтово записывать функцию" - лишнее Показать Так хуки обычно и делаются, если что. Я уже кидал скриншоты где-то какой хук ставит стимовский оверлей - там то же самое. Он эти байты переносит в отдельное место и дополняет их прыжком на hooked_func+5. С таким хуком не надо делать ничего. Изменено 17 мая, 2017 пользователем uhx Ссылка на комментарий Поделиться на другие сайты Поделиться
Blackdots Опубликовано 18 мая, 2017 Поделиться Опубликовано 18 мая, 2017 В 17.05.2017 в 15:19, uhx сказал: Так хуки обычно и делаются, если что. Я уже кидал скриншоты где-то какой хук ставит стимовский оверлей - там то же самое. Он эти байты переносит в отдельное место и дополняет их прыжком на hooked_func+5. С таким хуком не надо делать ничего. Показать Смысл переносить все байты, если можно просто записать прыжок\вызов на свою функцию? Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 20 мая, 2017 Поделиться Опубликовано 20 мая, 2017 В 16.05.2017 в 00:41, Blackdots сказал: Зачем? Это тоже самое, что скачать библиотеку которая умеет выводить MessageBox, изихук - лишнее Показать Да, он умеет выводит MessageBox но, он в целом внедряет .NET в программу а эта не только MessageBox. Больше дело меньше разговора как говорится, кто та хукнул уже DX9, DX10, DX11 или DX12? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 мая, 2017 Поделиться Опубликовано 22 мая, 2017 В 17.05.2017 в 14:19, uhx сказал: И это можно реализовать на любом языке, который может хоть как-то работать с памятью напрямую. Показать Собственно, в этом весь мой вопрос и заключается - зачем этим всем заниматься в managed-среде. Ну банально же не для этого язык. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения