Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

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

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Окт 2022
Сообщения
103
Реакции
15
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
можешь поставить хук на winapi функции которые всегда вызываются ( пример: kernel32.dll : "LocalAlloc" , можешь сам посидеть в дебагере и найти что то другое)
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 1 раз )\
upd:
@invers1on можешь предложить что то другое?
 
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?

По этому тонна инфы в интернете, на том же юц, основная логика -> написать шелл для вызова этой функции, записать в память, передать управление на выделенную память
можешь поставить хук на winapi функции которые всегда вызываются ( пример: kernel32.dll : "LocalAlloc" , можешь сам посидеть в дебагере и найти что то другое)
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 1 раз )\
upd:
@invers1on можешь предложить что то другое?

Могу предложить прочитать вопрос тс'а и свой ответ, дальше немного анализа и ты всё поймёшь :seemsgood:
 
Последнее редактирование:
По этому тонна инфы в интернете, на том же юц, основная логика -> написать шелл для вызова этой функции, записать в память, передаеть управление на выделенную память


Могу предложить прочитать вопрос тс'а и свой ответ, дальше немного анализа и ты всё поймёшь :seemsgood:
Как найти функцию которая сможет ее сама вызвать?
 
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
Если это какая-то простая функция ( по типу математических, например: магических крипто-операций с числом), то можешь просто её скопировать, и вызывать в своём процессе.
В ином случае тебе придётся что-то перезаписать / выделить, и сделать так, чтобы оно исполнилось.
 


Выше ответ есть, ты ещё смотри на то что функция делает, обязательно ли тебе ее выполнять в таргет процессе, или ты можешь её отревёрсить, вставить в свой проект и вызывать у себя.
 
Я записал, а вызвать как-то можно ее?
1706864848962.png

CreateRemoteThread в частности, не подходит - ищи другие варианты
 
в хуке вызываешь то что тебе надо и в нем же убираешь хук ( что бы вызвалось 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 и пишет куда либо)
 
CreateRemoteThread не варик, надо найти функцию в памяти с помощью сигнатуры и вызвать её с определенными агрументами, как можно такое сделать?
Не знаю как некоторых людей свыше обидел человек "инверсация" ( божий одуванчик на фактах ), но да ладно. Не об этом же речь !

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

Это первая идея, что пришла в голову, возможно есть варианты проще, но я о них не знаю, либо не додумался.
 
Посмотреть вложение 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 ( или любое другое место в исполняемом коде ) чтобы запустить свой луп/ поменять контекст потока, море вариантов, дело в реализации.
 
Без понимания как работают программы в винде не сделаешь просто так.
Исходя из того что ты задаешь такой вопрос сам ты врядли ближайшее время осилишь свою задачу.
Так что обратись к ребяткам выше может за денежное вознаграждение помогут сделать. Если плата не смешнявая будет.
 
Назад
Сверху Снизу