C++ Вопрос Вызов функции external

Начинающий
Статус
Оффлайн
Регистрация
22 Окт 2022
Сообщения
94
Реакции[?]
14
Поинты[?]
15K
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
 
Начинающий
Статус
Оффлайн
Регистрация
31 Май 2023
Сообщения
54
Реакции[?]
16
Поинты[?]
15K
можешь поставить хук на winapi функции которые всегда вызываются ( пример: kernel32.dll : "LocalAlloc" , можешь сам посидеть в дебагере и найти что то другое)
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 1 раз )\
upd:
qqqqqq111111 можешь предложить что то другое?
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
По этому тонна инфы в интернете, на том же юц, основная логика -> написать шелл для вызова этой функции, записать в память, передать управление на выделенную память
можешь поставить хук на winapi функции которые всегда вызываются ( пример: kernel32.dll : "LocalAlloc" , можешь сам посидеть в дебагере и найти что то другое)
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 1 раз )\
upd:
qqqqqq111111 можешь предложить что то другое?
Могу предложить прочитать вопрос тс'а и свой ответ, дальше немного анализа и ты всё поймёшь :seemsgood:
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
22 Окт 2022
Сообщения
94
Реакции[?]
14
Поинты[?]
15K
По этому тонна инфы в интернете, на том же юц, основная логика -> написать шелл для вызова этой функции, записать в память, передаеть управление на выделенную память


Могу предложить прочитать вопрос тс'а и свой ответ, дальше немного анализа и ты всё поймёшь :seemsgood:
Как найти функцию которая сможет ее сама вызвать?
 
Начинающий
Статус
Оффлайн
Регистрация
22 Окт 2022
Сообщения
94
Реакции[?]
14
Поинты[?]
15K
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,602
Реакции[?]
882
Поинты[?]
117K
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
Если это какая-то простая функция ( по типу математических, например: магических крипто-операций с числом), то можешь просто её скопировать, и вызывать в своём процессе.
В ином случае тебе придётся что-то перезаписать / выделить, и сделать так, чтобы оно исполнилось.
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K

Выше ответ есть, ты ещё смотри на то что функция делает, обязательно ли тебе ее выполнять в таргет процессе, или ты можешь её отревёрсить, вставить в свой проект и вызывать у себя.
 
40, 40, 40 blackout XD
Участник
Статус
Оффлайн
Регистрация
15 Янв 2020
Сообщения
467
Реакции[?]
234
Поинты[?]
28K
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
676
Реакции[?]
284
Поинты[?]
22K
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 1 раз )\
1706865744401.png
осталось всего лишь написать мьютекс на ассемблере что бы твоя пидорская конструкция не увела левые треды в затертую память/неконсистентность по итогу убивая поток вместе с последними шансами на твое последующее обитание тут :innocent:
По этому тонна инфы в интернете, на том же юц, основная логика -> написать шелл для вызова этой функции, записать в память, передаеть управление на выделенную память
ну и ты тоже как то мимо ответил
1706866186772.png
вопрос как раз таки в передачи управление без CreateRemoteThread из юм, а это не совсем обычная задача о которой тонна инфы в инете.
тут всё ОЧЕНЬ зависит от контекста.алгоритм является чистым?x64dbg -> выделяешь пул инструкций -> Edit -> Copy data -> аллоцируешь в свой процесс через VirtualAlloc с PAGE_EXECUTE_READWRITE -> вызываешь.
на практике такое скорее всего не случится.из личного опыта - патчил готовый алгоритм предварительно аллоцируя нужные данные и передавая один из виртуальных адресов(byte-sequence ключ)(на который был реф) через аргумент метода.(lea reg, address -> mov reg, r9).как пища для размышления.

для дальнейшей помощи, вкинь НАМНОГО больше информации чем то, что ты отставил в хедере.асм листинг, ХОТЯ БЫ.

P.S а так...не совсем ясен смысл вызова чего либо извне.race condition на то и является основной проблемой параллелизма в процах, что shared-memory данные очень часто оказываются вне консистентного состояния и всё кроме иммутабельных значений может привести к bruh моменту -> получению хуя вместо результата функции(это дай бог что б она ещё какой нибудь основной поток игры не отъебнула, если не является const и пишет куда либо)
 
Участник
Статус
Оффлайн
Регистрация
15 Янв 2021
Сообщения
500
Реакции[?]
311
Поинты[?]
101K
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
Не знаю как некоторых людей свыше обидел человек "инверсация" ( божий одуванчик на фактах ), но да ладно. Не об этом же речь !

Для вызова функции из под экстернала, тебе не обойтись без некоторого патчинга. Если у тебя нет никакого желания вызывать VirtualAllocEx, то можешь обойтись поиском пустого места в .text секции любой длл процесса, так как там всегда свободно несколько сотен байт из-за выравнивания. Так как ты не хочешь использовать CreateRemoteThread, есть 2 пути. Первый это метод NtQueueApcThread, благодарая которому ты передашь управление на твой шеллкод ( его записывать так или иначе придётся, но там стоит учитывать много нюансов, на практике сталкивался, что некоторые потоки из-за некоторый флагов в TEB'е не могут нормально вызывать nt'шные функции, так что поиск подходящего потока тоже затея немного геморная ( пример есть в BlackBone или GHInjector'е ). Второй же метод, это поставить jmp к твоему коду из какой-то функции. Как бы тот же инлайн хукинг, логика такова ( при условии, что всё что надо уже записано где-то ). Патчишь часто вызываемую функцию ( желательно из ntdll, так как всё сводится к их вызову ) на jmp <code_cave_address>, по твоему адресу <code_cave_address> будет лежать сохранение регистров в стеке, вызов нужной тебе функции с аргументами, запись результата куда твоей душе угодно, возвращение сохраненных регистров и стека, выход из области шеллкода через инструкцию ret. Если вызов единоразовый, то можешь заполнить вызов нужной тебе функции в шеллкоде nop'ами или вернуть оригинальные байты функции которую ты изначально патчил ( изначально остановив все потоки, чтобы никто не попал на твой хук во время восстановления и не получить exception'ом по лицу ).

Это первая идея, что пришла в голову, возможно есть варианты проще, но я о них не знаю, либо не додумался.
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
695
Реакции[?]
326
Поинты[?]
12K
Посмотреть вложение 269744
осталось всего лишь написать мьютекс на ассемблере что бы твоя пидорская конструкция не увела левые треды в затертую память/неконсистентность по итогу убивая поток вместе с последними шансами на твое последующее обитание тут :innocent:

ну и ты тоже как то мимо ответил
Посмотреть вложение 269745
вопрос как раз таки в передачи управление без CreateRemoteThread из юм, а это не совсем обычная задача о которой тонна инфы в инете.
тут всё ОЧЕНЬ зависит от контекста.алгоритм является чистым?x64dbg -> выделяешь пул инструкций -> Edit -> Copy data -> аллоцируешь в свой процесс через VirtualAlloc с PAGE_EXECUTE_READWRITE -> вызываешь.
на практике такое скорее всего не случится.из личного опыта - патчил готовый алгоритм предварительно аллоцируя нужные данные и передавая один из виртуальных адресов(byte-sequence ключ)(на который был реф) через аргумент метода.(lea reg, address -> mov reg, r9).как пища для размышления.

для дальнейшей помощи, вкинь НАМНОГО больше информации чем то, что ты отставил в хедере.асм листинг, ХОТЯ БЫ.

P.S а так...не совсем ясен смысл вызова чего либо извне.race condition на то и является основной проблемой параллелизма в процах, что shared-memory данные очень часто оказываются вне консистентного состояния и всё кроме иммутабельных значений может привести к bruh моменту -> получению хуя вместо результата функции(это дай бог что б она ещё какой нибудь основной поток игры не отъебнула, если не является const и пишет куда либо)

1706869549687.png

"Тонна инфы" было скорее про вызов функций с внешнего процесса, из контекста понял, что в этом также проблема помимо CreateRemoteThread.На счёт передачи управления, также есть много инфы ) Те же APC , можно изъебнутся и пропатчить любой API ( или любое другое место в исполняемом коде ) чтобы запустить свой луп/ поменять контекст потока, море вариантов, дело в реализации.
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
674
Реакции[?]
106
Поинты[?]
69K
Пользователь
Статус
Оффлайн
Регистрация
26 Окт 2017
Сообщения
520
Реакции[?]
95
Поинты[?]
2K
Без понимания как работают программы в винде не сделаешь просто так.
Исходя из того что ты задаешь такой вопрос сам ты врядли ближайшее время осилишь свою задачу.
Так что обратись к ребяткам выше может за денежное вознаграждение помогут сделать. Если плата не смешнявая будет.
 
Сверху Снизу