• XSS.stack #1 – первый литературный журнал от юзеров форума

подмена указателя на функцию

Так иди учи С, иди учи PE-формат, что такое RVA, что такое VA, что такое Raw Offset и как они связаны между собой.
Спасибо! Это именно то что я расчитывал услышать обратившись за помощью. Учить обязательно нужно, чем и занимаюсь. Тему завел правда расчитывая что найду человека который на пальцах объяснит как это работает, а не буду послан курить коран. Стоит задачка и ее хочется решить. А не затянуть решение на месяц пока изучаю документацию. Или форум для того чтобы знающие тыкали носом. Я не против чтобы меня подзатыльниками потчевали, но ведь к решению это не приблизило. Наступать на грабли самому это хорошо и полезно. Но если вы нашли время дать подзатыльник необразованному нубу, то может и покажете как это делается правильно? Так сказать на практике
 
Напрашивается аналогия, что по вопросу "Как лечить простуду в домашних условиях?" меня должны послать учиться в мед. Если решение на самом деле сложное, то это одно. А ведь вы и решения не показали, не сказали что это сложно. Я же не против например оплатить ваше время, чтобы сэкономить свое.
0x140c00920 - то самое смещение от базового адреса которое пишет IDA
0xfffff80465800000 - базовый адрес ntoskrnl
0xfffff805a6400920 - логично что я предположил что сумма выше указанных это адрес в памяти где на самом деле лежит указатель.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
0x140c00920 - то самое смещение от базового адреса которое пишет IDA
Это не смещение.
 
Это виртуальный адрес, просто даже логически подумайте, этот адрес находится за пределами 5 гигов...)

А вы еще складываете его с ахренительным числом, это какой оператос нужно иметь тогда...)))

Вот, тут посмотрите, как получить адрес, как-раз решение вашей проблемы:https://github.com/btbd/modmap/blob/master/driver/main.c
 
Это виртуальный адрес, просто даже логически подумайте, этот адрес находится за пределами 5 гигов...)

А вы еще складываете его с ахренительным числом, это какой оператос нужно иметь тогда...)))

Вот, тут посмотрите, как получить адрес, как-раз решение вашей проблемы:https://github.com/btbd/modmap/blob/master/driver/main.c
Смотрю. Спасибо!
Пока вот что имею. Базовый адрес ntoskrnl верный. Проверил. Меня все устраивает. Если судить по
snap1.png

то в моем ntoskrnl.exe по адресу 0x9F0520 как раз лежат три одинаковых указателя. Но когда я пытаюсь прочитать из драйвера это место base+0x9F0520, base+0x9F0528, base+0x9F0530 там лежат ну прям совсем не указатели а мусор. И именно это меня в ступор вгоняет.
snap2.png

я расчитывал что и в памяти увижу одинаковые значения. Вероятно снова ошибся в смещении. Буду разбирать пример. Еще раз спасибо.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
0x9F0520
Откуда ты блин взял это смещение? Я отсюда вижу, что оно неверное.
 
Откуда ты блин взял это смещение? Я отсюда вижу, что оно неверное.
snap1.png

из блокнота. И да. Винда обновилась а я и не заметил. теперь это 0x9F0320 хотя все равно там ересь лежит на указатели не похожая, значит снова я не прав.
snap2.png

А вот теперь что показывает IDA в новом ядре
snap3.png

snap4.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Минутку. в бинарнике 0x1403CBDE0 это из него надо вычесть что ли?
Конечно. Если бы ты пошел читать то, о чем я тебе говорил, возможно такое просветление возникло бы раньше. Теперь давай пиши, что ты будешь из этого числа вычитать.
 
0x1403CBDE0
это и есть указатель на функцию пусть и виртуальный.
snap1.png

Вот теперь как в сказке все интереснее и интереснее. С вашего позволения побуду шутом еще немного.
Итак я вижу 3 подряд адреса где лежит указатель на функцию и это согласно IDA
0x140C00920
0x140C00928
0x140C00930
в бинарнике физическое смещение от начала файла это
0x9F0320
0x9F0328
0x9F0330
Дай дураку потыкаться в ядре так он руки порежет. В итоге при попытке прочитать что-то по этим адресам, учитывая смещение ntoskrnl.exe дают мусор.
Если физическое смещение брешет, то глядя на виртуальные в IDA хочется отнять 140000000
0xС00920
0xС00928
0xС00930
что в памяти очень похоже на правду ибо значения уж очень похожи на искомые указатели
snap4.png

Но и тут облом. Ибо я ожидаю что указатели будут одинаковые. Продолжение следует видимо.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Но и тут облом. Ибо я ожидаю что указатели будут одинаковые. Продолжение следует видимо.
Ну это они и есть, с чего ты взял, что они должны быть одинаковые?
 
Ну это они и есть, с чего ты взял, что они должны быть одинаковые?
Это содержимое трех указателей на одну и ту же функцию. И оно пляшет на сотни байт. Это и сбивает с толку
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это содержимое трех указателей на одну и ту же функцию. И оно пляшет на сотни байт. Это и сбивает с толку
Ну ты можешь объяснить, почему эти указатели должны указывать на одну и ту же функцию? Если да, то почему их три, а не один?
 
Ну ты можешь объяснить, почему эти указатели должны указывать на одну и ту же функцию? Если да, то почему их три, а не один?
не могу. Про третий вообще ничего сказать не могу. Про первые 2... впрочем тоже. По тексту таких мест много больше. Но ведь ведут все в одно и то же место xKdEnumerateDebuggingDevices а там вообще возврат константы 8 байт 0xC0000002 вероятно тоже адрес. Глубже еще не искал. Может хоть это расскажешь почему указатели на одну и ту же функцию содержат разные значения? Почему указателей много, это понимаю. Вероятно для поддержки 64 и 32 процессов, но все равно все стекается к одной функции же. Без параметров. В итоге каким то пока непостижимым образом мы приходим к вызову NtSetInformationProcess. Как это происходит из константы я пока не разобрался.
И тут настало время послать меня на другие 3 буквы... на RVA я уже ходил.

Или не отходя с места просвятишь хотя бы приблизительно как это работает?

Что то вроде интерфейса или полиморфизм разве что в голову приходит. Отсюда и множество указателей. А вот почему они не одинаковые - хоть режь не скажу
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
И тут настало время послать меня на другие 3 буквы... на RVA я уже ходил.
Ну тебе бы не помешало знать, что такое VA, RVA и Raw Offset, но ты же не пошел в этом разбираться по моему совету, поэтому, чтобы решить проблему, понадобилось еще десяток сообщений на форуме расписать.

Но ведь ведут все в одно и то же место xKdEnumerateDebuggingDevices а там вообще возврат константы 8 байт 0xC0000002 вероятно тоже адрес.
Нет, это не адрес. Я вангую, что это NTSTATUS, который означает STATUS_NOT_IMPLEMENTED, что все вместе означает, что это просто заглушка, а реальные функции проставляются в рантайме.

Да и вообще тебе так рано в ядро лезть, нужно ходить научится, прежде чем учится бегать.
 
Ну тебе бы не помешало знать, что такое VA, RVA и Raw Offset
Пошел. Иначе так и блуждал бы.

STATUS_NOT_IMPLEMENTED
Точно! Где то я уже натыкался на упоминание об этом, а из головы вылетело. Одно читаю другое вглубь двигается.

Да и вообще тебе так рано в ядро лезть
На практике интереснее разбираться. Как ни крути без ваших советов я еще не один день блуждал бы. Сухая документация без применения сложно заходит. Да и если б не античит с его банами, я б в ядро еще не скоро полез. Сам знаю что рано, вслепую лезу в бурелом. Попутно изучая и набивая шишки. Тема еще не закрыта, ибо теперь подменю указатели и думаю нужно подвести итог. А то уже среди поисковых запросов этот мой позор мелькает. Если такой как я наткнется, то полезно будет. Спасибо за помощь.
 
Тебе нечего делать в ядре с твоими знаниями.
ну мы тут не америку открываем. То что я ничерта не знаю я писал в самом начале. Это накладывает определенные трудности. Я учусь. Но так же это не мешает мне сделать задуманное и вернуть чит в продажу.
Вы же пытаетесь самоутвердиться, лезть туда куда вас не просят. Тема не "выскажите ваше мнение о моих скудных знаниях". Так и я. Весьма любознателен, способен и на мой взгляд крайне усидчив. Вот и лезу в том числе в ядро, ибо на текущий момент это лучшее решение для меня. Но это абсолютно неизведанная территория для меня, так что зря вы обращаете внимание на мои неуклюжие первые шаги в эту сторону.
Вы зачем в тему то зашли? Блеснул знанием, и подвел итог. Для решения проблемы это ничего не значит. Просто пустые посты. Давайте не разводить холивар какой я программист. Как минимум не здесь.

А все эти материалы я изучил. Спасибо. На текущий момент не актуальны многие из них касаемо Battleye.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх