elvis66666 Опубликовано 16 ноября, 2015 Поделиться Опубликовано 16 ноября, 2015 Столкнулся с проблемой , никак не могу расчитать прыжок с адреса до кейва и обратно.Смотрел давно-давно, помоймку Coder выкладывал видео по расчету, сделал функцию, в x86 все работало как часы, а вот в x64 по отладке смотрю,выдает фигню... И так:0x7ff7cf646f3c //Адрес в процессе игры0x7ffe4e052730 //Адрес куда я хочу прыгнуть (тут кейв)//Начинаю расчитывать:0 - (0x7ff7cf646f3c - 0x7ffe4e052730) - 5 //5б прыжкаDWORD64 jmpAdress = 0 - (target - (DWORD64)ptr) - 5; //Как у меня в коде//Получаю на выходе:0x67EA0B7EF//Дописываю: E9 и переворачиваю и дописываю 4байта, получаю:E9 EF B7 A0 7E//Вписываю ручками в CE... и получаю:jmp 7FF84E052730 //Что получилосьjmp 7FFe4E052730 //Это правильный(Куда мне нужно)Подскажите, где собака зарыта? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 ноября, 2015 Поделиться Опубликовано 16 ноября, 2015 (0x7ff7cf646f3c - 0x7ffe4e052730) их местами поменяй. Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 16 ноября, 2015 Поделиться Опубликовано 16 ноября, 2015 (изменено) elvis66666, наверное, нужна другая формула для расчета, для x64. Попробуй поменять 5 на другое число.use64mov rax ,123456789h;offset of hookjmp raxСгерененый код:0x48, 0xB8, 0x89, 0x67, 0x45, 0x23, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xE0Пока нашел такое решение. С http://wasm.ru/forum/viewtopic.php?id=39109 Изменено 16 ноября, 2015 пользователем 2zolo2 Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 16 ноября, 2015 Автор Поделиться Опубликовано 16 ноября, 2015 (0x7ff7cf646f3c - 0x7ffe4e052730) их местами поменяй. jmp 7FF7E558B748 - тоже не то Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 16 ноября, 2015 Поделиться Опубликовано 16 ноября, 2015 Во тут обсуждают HOOK х64, две ссылки одна на русском, другая на английском http://www.rohitab.com/discuss/topic/41624-x64-iat-hook/ http://ru.vingrad.com/Perekhvat-vyzova-API-pod-x64-id51dec9da6ccc19d02b000002 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 16 ноября, 2015 Автор Поделиться Опубликовано 16 ноября, 2015 Во тут обсуждают HOOK х64, две ссылки одна на русском, другая на английском http://www.rohitab.com/discuss/topic/41624-x64-iat-hook/ http://ru.vingrad.com/Perekhvat-vyzova-API-pod-x64-id51dec9da6ccc19d02b000002увы, но ничего там не углядел полезного( Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 16 ноября, 2015 Поделиться Опубликовано 16 ноября, 2015 rax <- место патчаmov word[rax],0x15FF ;call qword[xxx]mov dword[rax+2],0x2 ;skip jmpmov word[rax+6],0x0AEB ;jmp word+qword+trashlea rcx,[InfiniteNitroHook]mov [rax+8],rcxна jmp неудобно. иногда надо все регистры сохр...NullAlex: Для кода необходимо использовать специальный тег. Читай правила и FAQ. Ссылка на комментарий Поделиться на другие сайты Поделиться
elvis66666 Опубликовано 16 ноября, 2015 Автор Поделиться Опубликовано 16 ноября, 2015 Сделал!Вот такое вот решение:VirtualProtect(ptr, 12, PAGE_EXECUTE_READWRITE, &old_protection);memcpy(ptr, "\x48\xB8\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xE0", 12);memcpy((BYTE*)ptr + 2, &target, sizeof(void*));VirtualProtect(ptr, 12, old_protection, &old_protection);Собственно ptr - начальный адресс куда мы будем писать JMP...\x48\xB8 - на асме это MOV RAX,дальше 8 байт (8 нопов), которые мы запишем адресом.А вконце у нас \xFF\xE0 - это на асме JMP RAX в сумме имеем mov rax, адрессjmp rax fuck yeah) пару чашек кофе и дезасемблер помогли... А насчет формулы, я бы все же не отказался, если кто ее имеет! 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 17 ноября, 2015 Поделиться Опубликовано 17 ноября, 2015 Вот еще нашел, ссылка https://bitbucket.org/NtQuery/scyllahide/src/540ec6e2d29b9e9fd4355c7a9c7e3a1099da298a/HookLibrary/Hook.cpp?at=master&fileviewer=file-view-default.Как понял, там без формулы, просто, берут адрес функций хука и вставляют.Пример: 1. 2 байта: на JMP ( FF 25 ). 2. 4 байта: это 0. 3. 8 байта: на HOOK функцию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 21 ноября, 2015 Поделиться Опубликовано 21 ноября, 2015 Прыгнуть так просто не получится.Самый простой вариантmov rax, [address_x64]jmp rax Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 ноября, 2015 Поделиться Опубликовано 21 ноября, 2015 Пример для jmp far 000007FEF5822000Через qword ptr на указатель 03A90000 - FF 25 00000000 - jmp qword ptr [03A90006]03A90006 - указатель на адрес, по которому будет прыжок с перевернутыми байтами 000007FEF5822000 03A90006: 00 20 82 F5 FE 07 00 00*Только вот адрес в квадратных скобках не может быть больше 4-х байт. А насчет формулы, я бы все же не отказался, если кто ее имеет! Как я понял по документации от интелов длинные прыжки на 8-ми байтный адрес не поддерживаются. Если интересно вбей в Гугл "64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf" 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения