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

Вопрос Asm jit

Energy Reload
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции
330
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кто сталкивался с asm jit?
Надо инструкцию заменить на свой вызов, знаю как это сделать в х86.
А в х64 знаю что есть данная(дополнительная) библиотека.
Но не когда с ней не работал.
есть оригинал
call 0x123456789
mov r14, rax

а нужно заменить вызов на свой адрес
call Myadress
mov r14, rax
 
Кто сталкивался с asm jit?
Надо инструкцию заменить на свой вызов, знаю как это сделать в х86.
А в х64 знаю что есть данная(дополнительная) библиотека.
Но не когда с ней не работал.
есть оригинал
call 0x123456789
mov r14, rax

а нужно заменить вызов на свой адрес
call Myadress
mov r14, rax
Пожалуйста, авторизуйтесь для просмотра ссылки.
ну я так костылил, а вообще можно было просто адрес возврата проверять и все, или ты про чето другое ? codecave не обязательно, можно память рядом выделить
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
ну я так костылил, а вообще можно было просто адрес возврата проверять и все, или ты про чето другое ? codecave не обязательно, можно память рядом выделить
1660941655516.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а ну скуб закрыл щя должна заработать
мы не о том
__asm.....
{
cal 0x12345678
mov r14, rax
}
типо такого в х64 реализовать
поставив хук на нужный адрес
DetourCreate проблем нету.

проблема как записать в память
__asm.....
{
cal 0x12345678
mov r14, rax
}
ти
 
мы не о том
__asm.....
{
cal 0x12345678
mov r14, rax
}
типо такого в х64 реализовать
поставив хук на нужный адрес
DetourCreate проблем нету.

проблема как записать в память
__asm.....
{
cal 0x12345678
mov r14, rax
}
ти
с llvm можно вставки делать , можно и так , но я так понял я вообще не про то сейчас
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
так а все таки в чем проблема байтами написать, типо делаешь буфер и пишишь туда что тебе надо, или в теории можно constexpr & сделать, тогда править не надо будет , но я не чекал завтра чекну даже интересно стало , вплане идут байты call , потом идет contexpr int который равен &qword, и дальше снова байты
S20820-04121081.jpg
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
так а все таки в чем проблема байтами написать, типо делаешь буфер и пишишь туда что тебе надо, или в теории можно constexpr & сделать, тогда править не надо будет , но я не чекал завтра чекну даже интересно стало , вплане идут байты call , потом идет contexpr int который равен &qword, и дальше снова байты
S20820-04121081.jpg
Байтами думал, но вызов идёт моей функции с мой длл. Я не знаю как это можно реализовать
 
жеесть:
Expand Collapse Copy
#include <iostream>
#pragma region Shell
int dummy()
{
    std::cout << "Hello World!\n";
    return 1;
}
#pragma section(".text")
__declspec(allocate(".text"))
void* testptr[] = { &dummy };
#pragma section(".text")
__declspec(allocate(".text"))
__int8 shell[] = {  0x90, 0x90, 0xFF ,0x25 ,0x00, 0x00 ,0x00, 0x00}; // JMP
#pragma endregion Shell
int main()
{
    reinterpret_cast<void(*)()>(&shell[0])();
}
call meme:
Expand Collapse Copy
#pragma region Shell
int dummy()
{
    std::cout << "Hello World!\n";
    return 1;
}

#pragma section(".text")
__declspec(allocate(".text"))
__int8 shelld[] = { 0x90 ,0x90 ,0x90, 0x90 ,0x90, 0x90, 0x90, 0xC3 };
__declspec(allocate(".text"))
void* testptr[] = { &dummy };
__declspec(allocate(".text"))
__int8 shell[] = {  0xFF ,0x15 ,0x02, 0x00 ,0x00, 0x00, 0xEB, 0x08 }; //call 0xFF ,0x15 ,0x02, 0x00 ,0x00, 0x00, 0xEB, 0x08  
#pragma endregion Shell
int main()
{
    reinterpret_cast<int(*)()>(&shell[0])();
}


просто прикол , но слишком запарно как-то
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
жеесть:
Expand Collapse Copy
#include <iostream>
#pragma region Shell
int dummy()
{
    std::cout << "Hello World!\n";
    return 1;
}
#pragma section(".text")
__declspec(allocate(".text"))
void* testptr[] = { &dummy };
#pragma section(".text")
__declspec(allocate(".text"))
__int8 shell[] = {  0x90, 0x90, 0xFF ,0x25 ,0x00, 0x00 ,0x00, 0x00}; // JMP
#pragma endregion Shell
int main()
{
    reinterpret_cast<void(*)()>(&shell[0])();
}
call meme:
Expand Collapse Copy
#pragma region Shell
int dummy()
{
    std::cout << "Hello World!\n";
    return 1;
}

#pragma section(".text")
__declspec(allocate(".text"))
__int8 shelld[] = { 0x90 ,0x90 ,0x90, 0x90 ,0x90, 0x90, 0x90, 0xC3 };
__declspec(allocate(".text"))
void* testptr[] = { &dummy };
__declspec(allocate(".text"))
__int8 shell[] = {  0xFF ,0x15 ,0x02, 0x00 ,0x00, 0x00, 0xEB, 0x08 }; //call 0xFF ,0x15 ,0x02, 0x00 ,0x00, 0x00, 0xEB, 0x08 
#pragma endregion Shell
int main()
{
    reinterpret_cast<int(*)()>(&shell[0])();
}


просто прикол , но слишком запарно как-то
Это не пойдет.
Мне то надо вернуть значение оригинальной функции.
call Myadress
mov r14, rax
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Есть функция
cal 0x12345678
mov r14, rax

Тут ставим детур на эту строчку
cal 0x12345678

и возвращаемся обратно в функцию
mov r14, rax

А вызов в функции нужно заменить на свой адрес.
 
Есть функция
cal 0x12345678
mov r14, rax

Тут ставим детур на эту строчку
cal 0x12345678

и возвращаемся обратно в функцию
mov r14, rax

А вызов в функции нужно заменить на свой адрес.

Вообще, как вариант можешь поставить хук в начало 0x12345678 , из хука вызвать свою же функцию и сделать return
 
почему нельзя просто поменять
Пожалуйста, авторизуйтесь для просмотра ссылки.
так что бы он на твою функцию попадал? (или на jmp к твоей функции) и когда она выполнится то ret вернет туда куда надо.
unknown.png

если тебе регистр надо поменять то можно внутри твой функции вызвать mov r14,rcx кастануть его к void(*)(__int64 a1).
 
Назад
Сверху Снизу