Господин транзистор, вы что-нибудь слышали о перехвате winApi функций?
Имели вы дело с сие явлением?
Я бог перехватов.
А где можно научиться такому же уровню?
Это очень сложная философия, такому нигде не учат.
До первой многопоточной программы, где нужно ставить и удалять хуки динамически?
Я просто посмотрел видос , мне понравилось. Хочу сделать какой-нибудь перехват
Берёшь любую либу, можешь начать с детурс. И твой код работает везде. В отличие от.
Отправляй мне такую программу, и говори что делать.
Фууу... 👎👎👎 Detours.
(Microsoft) Detours
Шаблонная страшная библиотечка для новичков, блевать тянет.
Ты снова скажешь, что если программа падает в одном проценте случаев, то это ничего, так и должно быть.
А как либу менять, контрольная сумма ругаться не будет?
1% случаев? Так-то твой Detours сам падает с наибольшим процентом 😃
Контрольная сумма если и сверяется, то при загрузке. В рантайме вычисляют только протекторы, но протекторы — это отдельная тема, они и хуки детектить умеют.
Не умеют, если это не кривоtours.
использовал его в паре проектов, в том числе в коммерческом и когда-то давно в курсовой работе. падений не обнаружено
Правильно. "У меня не ломается, а если у кого-то ломается, то это их проблемы", я такого же мнения 👍
Рептилойд
А ты то хоть мне подскажешь как сделать первый хук?
таблицу импорта правишь
Никогда не занимался этим
Ахахаха, а что, так можно было что-ли🤣
если он захочет, то разберётся
Я попытаюсь разобраться
Не, это скучно. Там ассемблер почти не нужен.
Смотри, находишь функцию-жертву, снимаешь защиту на запись (VirtualProtect), читаешь и сохраняешь первые 2-3 инструкции, а на место них ставишь "mov eax, addr \ call eax", где addr - твоя функция, внутри своей функции вставляешь эти прочитанные 2-3 инструкции оригинальные. Всё, ты перехватил функцию.
Первые две инструкции: dec jnz. Всё упало. А, и ты забыл ему сказать, что ему придётся дизасм длин с собой таскать.
😂 Я даже не знаю, что на это ответить... Ты ожидаешь, что я буду советовать ему писать шаблончики, но это не так) и нет, никакой дизассемблер не нужен, просто нужно открыть функцию-жертву в отладчике, и посмотреть глазами сколько байтиков идёт на замену)
Ну то есть ты привязался к бинарнику, бинарник обновился, всё снова упало.
Ок, писал ты хук на Detours, программа обновилась, в неё добавили протектор, всё упало, тратишь 2 года на изучение ассемблера чтобы написать узконаправленный хук.
Есть, но addr куда-то нужно положить. Есть call addr, но для него нужно считать офсет, а транзистору видимо лень было.
Стоп, куда то положить адресс это что значит?
есть call 16:32 с непосредственными значениями, если я не путаю
Ну ты спросил про indirect переход. Оно сначала читает дворд по addr и потом по этому дворду переходит. Так, например, импорты работают: ты call [ExitProcess], а там ExitProcess dd адрес_ExitProcess_внутри_kernel32_dll, оно читает и потом переходит. То же самое происходит с call eax, но адрес читается из регистра. И, наконец, у нас есть относительный джамп, там адрес кодируется как часть самой инструкции, и его нужно высчитывать, потому что это смещение от следующей инструкции, а не абсолютный адрес.
Есть, но это это нужно прочитать cs, чтобы его потом закодировать.
Да это я понимаю, я совсем не понимаю зачем это делать, если я вызываю функцию, значит, я записал ее в библиотеку , значит, я могу вызвать ее call dword [OurProcedure]
На пальцах только если
Обсуждают сегодня