Rest0rer Опубликовано 3 октября, 2020 Поделиться Опубликовано 3 октября, 2020 Делаю разные виды телепорта в serious sam 4. Получилось написать телепорт к сохраненной точке, а вот при телепортации в место прицеливания происходит телепорт, затем через пару секунд вылет с игры(Код такой же, как телепорт в сохраненные координаты, за исключением подставления координат прицеливания). В чем может быть проблема?(3й день сижу над ней) код(много букаф) : Спойлер { Game : Sam4.exe Version: Date : 2020-10-02 Author : vlad This script does blah blah blah } [ENABLE] aobscanmodule(testnewtp,Sam4.exe,C3 CC CC CC 48 83 EC 28 48 8D 0D * * * * E8 C8 9E) // should be unique alloc(newmem,$1000,"Sam4.exe"+BEE6F4) alloc(store_coord,256) label(code) label(return) label(xpos) label(ypos) label(zpos) label(en_save) label(en_load) label(en_load_aim) label(increasey) label(incr) label(save) label(load) label(popRDX) label(load_aim) registersymbol(en_load) registersymbol(en_save) registersymbol(en_load_aim) registersymbol(xpos) registersymbol(ypos) registersymbol(zpos) //место для сохранения координат store_coord: xpos: dd 0 ypos: dd 0 zpos: dd 0 en_save: dd 0 en_load: dd 0 en_load_aim: dd 0 //фильтр на проверку игрока и проверка флагов newmem: push rdx mov rdx,[pbase] cmp rcx,rdx jne popRDX pop rdx cmp [en_save],1 je save cmp [en_load],1 je load cmp [en_load_aim],1 je load_aim jmp code popRDX: pop rdx jmp code //сохранить координаты save: mov [en_save],0 push rdx mov rdx,[rcx+4c] mov [xpos],rdx mov rdx,[rcx+50] mov [ypos],rdx mov rdx,[rcx+54] mov [zpos],rdx pop rdx jmp code //телепорт к созраненным координатам load: mov [en_load],0 push rdx mov rdx,[xpos] mov [rcx+4c],rdx mov rdx,[ypos] mov [rcx+50],rdx mov rdx,[zpos] mov [rcx+54],rdx pop rdx jmp code //телепорт к координатам прицеливания(вылет с игры после телепорта) load_aim: mov [en_load_aim],0 push rdx mov rdx,[x_aim] mov [rcx+4c],rdx call increasey mov rdx,[z_aim] mov [rcx+54],rdx pop rdx jmp code //увеличение y при телепорте в место прицеливания increasey: movss xmm10,[y_aim] addss xmm10,[incr] movss [rcx+50],xmm10 xorps xmm10,xmm10 ret code: ret int 3 int 3 int 3 sub rsp,28 jmp return incr: dd (float)1 testnewtp: jmp newmem nop 3 return: registersymbol(testnewtp) [DISABLE] testnewtp: db C3 CC CC CC 48 83 EC 28 unregistersymbol(testnewtp) unregistersymbol(en_save) unregistersymbol(en_load) unregistersymbol(en_load_aim) unregistersymbol(xpos) unregistersymbol(ypos) unregistersymbol(zpos) dealloc(newmem) dealloc(store_coord { // ORIGINAL CODE - INJECTION POINT: "Sam4.exe"+BEE6F4 "Sam4.exe"+BEE6C5: 41 0F 28 7B E0 - movaps xmm7,[r11-20] "Sam4.exe"+BEE6CA: 45 0F 28 43 D0 - movaps xmm8,[r11-30] "Sam4.exe"+BEE6CF: 45 0F 28 4B C0 - movaps xmm9,[r11-40] "Sam4.exe"+BEE6D4: 45 0F 28 53 B0 - movaps xmm10,[r11-50] "Sam4.exe"+BEE6D9: 45 0F 28 5B A0 - movaps xmm11,[r11-60] "Sam4.exe"+BEE6DE: 45 0F 28 63 90 - movaps xmm12,[r11-70] "Sam4.exe"+BEE6E3: 45 0F 28 6B 80 - movaps xmm13,[r11-80] "Sam4.exe"+BEE6E8: 45 0F 28 B3 70 FF FF FF - movaps xmm14,[r11-00000090] "Sam4.exe"+BEE6F0: 49 8B E3 - mov rsp,r11 "Sam4.exe"+BEE6F3: 5D - pop rbp // ---------- INJECTING HERE ---------- "Sam4.exe"+BEE6F4: C3 - ret "Sam4.exe"+BEE6F5: CC - int 3 "Sam4.exe"+BEE6F6: CC - int 3 "Sam4.exe"+BEE6F7: CC - int 3 "Sam4.exe"+BEE6F8: 48 83 EC 28 - sub rsp,28 // ---------- DONE INJECTING ---------- "Sam4.exe"+BEE6FC: 48 8D 0D 5D 08 22 01 - lea rcx,[Sam4.exe+1E0EF60] "Sam4.exe"+BEE703: E8 C8 9E 4D 00 - call Sam4.exe+10C85D0 "Sam4.exe"+BEE708: 48 83 C4 28 - add rsp,28 "Sam4.exe"+BEE70C: C3 - ret "Sam4.exe"+BEE70D: CC - int 3 "Sam4.exe"+BEE70E: CC - int 3 "Sam4.exe"+BEE70F: CC - int 3 "Sam4.exe"+BEE710: 48 8B 01 - mov rax,[rcx] "Sam4.exe"+BEE713: 83 61 60 FB - and dword ptr [rcx+60],-05 "Sam4.exe"+BEE717: 48 FF 60 38 - jmp qword ptr [rax+38] } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 В 03.10.2020 в 10:18, Rest0rer сказал: В чем может быть проблема? Где объявление переменных x_aim, y_aim иz_aim? И откуда ты их берешь? В другом скрипте? Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 13 минут назад, Garik66 сказал: Где объявление переменных x_aim, y_aim иz_aim? И откуда ты их берешь? В другом скрипте? Да, в другом. Вот: Спойлер [ENABLE] aobscanmodule(AimCoords,Sam4.exe,F2 0F 10 87 60 21 00 00) // should be unique alloc(newmem,$1000,"Sam4.exe"+11EA1F) alloc(store_aimcoords,24) label(code) label(return) label(x_aim) label(y_aim) label(z_aim) registersymbol(x_aim) registersymbol(y_aim) registersymbol(z_aim) store_aimcoords: x_aim: dd 0 y_aim: dd 0 z_aim: dd 0 newmem: push rbx mov rbx,[rdi+00002160] mov [x_aim],rbx mov rbx,[rdi+00002164] mov [y_aim],rbx mov rbx,[rdi+00002168] mov [z_aim],rbx pop rbx jmp code code: movsd xmm0,[rdi+00002160] jmp return AimCoords: jmp newmem nop 3 return: registersymbol(AimCoords) [DISABLE] AimCoords: db F2 0F 10 87 60 21 00 00 unregistersymbol(AimCoords) unregistersymbol(x_aim) unregistersymbol(y_aim) unregistersymbol(z_aim) dealloc(newmem) dealloc(store_aimcoords) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 23 минуты назад, Rest0rer сказал: Да, в другом. Попробуй сделать без call: Спойлер load_aim: mov [en_load_aim],0 push rdx mov rdx,[x_aim] mov [rcx+4c],rdx movss xmm10,[y_aim] addss xmm10,[incr] movss [rcx+50],xmm10 xorps xmm10,xmm10 mov rdx,[z_aim] mov [rcx+54],rdx pop rdx jmp code отпишись 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 33 минуты назад, Rest0rer сказал: Вот: ну что? без вылета? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 В 03.10.2020 в 10:18, Rest0rer сказал: increasey: И вопрос - для чего тебе эта функция? Если для подъема на высоту. то ее лучше писать отдельно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 3 минуты назад, Garik66 сказал: ну что? без вылета? я отъехал, чуть позже буду Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 4 часа назад, Garik66 сказал: И вопрос - для чего тебе эта функция? Если для подъема на высоту. то ее лучше писать отдельно. Функция для того чтобы при восстановлении координат увеличить Y, чтобы не провалиться под карту. Я пробовал без нее, вообще не увеличивая, проблема такая-же. Еще пробовал в другие места инжектить, на чтении тоже - проблема сохраняется: в сохраненные тепается нормально, а в координаты прицела с вылетом. Может быть координаты прицела записываются слишком далеко в памяти или что то типа такого? Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 4 часа назад, Garik66 сказал: Попробуй сделать без call: Показать контент load_aim: mov [en_load_aim],0 push rdx mov rdx,[x_aim] mov [rcx+4c],rdx movss xmm10,[y_aim] addss xmm10,[incr] movss [rcx+50],xmm10 xorps xmm10,xmm10 mov rdx,[z_aim] mov [rcx+54],rdx pop rdx jmp code отпишись Краш Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 12 минут назад, Rest0rer сказал: Краш проверяй что у тебя в x_aim, y_aim иz_aim. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 15 минут назад, Rest0rer сказал: Краш а ... подожди а почему ты не разово записываешь координаты прицела? у тебя же постоянно значение меняется Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 2 минуты назад, Garik66 сказал: проверяй что у тебя в x_aim, y_aim иz_aim. там все норм. Сейчас проверил, координаты подставляются нормально а дальше хрен знает где по инструкции вылет. Сейчас еще поймаю, отпишусь Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 Только что, Garik66 сказал: а ... подожди а почему ты не разово записываешь координаты прицела? у тебя же постоянно значение меняется Упс, а это влияет как то? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 5 минут назад, Rest0rer сказал: Упс, а это влияет как то? хотя нет - ты же один раз читаешь - не - не должно влиять Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 4 октября, 2020 Автор Поделиться Опубликовано 4 октября, 2020 А можно как то быстро узнать на какой инструкции происходит краш? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 7 минут назад, Rest0rer сказал: А можно как то быстро узнать на какой инструкции происходит краш? бряк ставить нужно и пошагово смотреть Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 Можно установить бряк, перед инструкцией на которую делается инжект. Затем активировать скрипт телепорта и клавишей F7 двигаться по коду. Еще можно перейти на FPU иструкции и избавиться от CALL. Еще смотреть на значение RSP. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 10 минут назад, Rest0rer сказал: А можно как то быстро узнать на какой инструкции происходит краш? а координаты и координаты прицела в одном типе Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 4 октября, 2020 Поделиться Опубликовано 4 октября, 2020 На метро я делал что то типа такого! Спойлер loadcrosshaircoordinatehook: mov rax,[rbx + 1B58h] // загружка значения координат в пределах карты mov [loadmaxaddr],eax // загружаем его... что бы в некуда не улететь mov edx,[rbx + 1B30h] // далее загружаем коориднаты прицела mov [crosshairX],edx mov edx,[rbx + 1B34h] mov [crosshairY],edx mov edx,[rbx + 1B38h] mov [crosshairZ],edx mov rax,[rbx] // оригинал код.... lea rdx,[rsp + 20h + 8] ret pointerplayercoordinatehook: movss [rax + 18h],xmm0 sub rax,30h mov [loadaddrpointer],rax // поинтер - проще говоря фильтр mov eax,[rbx + 0Ch] ret baseplatercoordinatehook: cmp [loadaddrpointer],rcx // смотрим ровно ли - перс или нет jne @f movss xmm0,[loadmaxaddr] // проверям координаты прицела с максимально допустимым расстоянием comiss xmm0,[maxaddr] // если всё норм то под флаг je @f cmp [enableteleport],0 // ну и сам флаг на запись данных в коориднаны персонажа jz @f mov eax,[crosshairX] mov [rcx + 40h],eax mov eax,[crosshairY] mov [rcx + 44h],eax mov eax,[crosshairZ] mov [rcx + 48h],eax @@: mov eax,[rcx + 48h] // оригинал mov [rcx + F8h],eax ret Зачем загружал максимально допустимое значение ? Хм.... игры разные... у меня перс улетал просто в некуда - это если без них! В другой игре к примеру, если улететь так же в не куда, она просто зависала и вылетала. Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 5 октября, 2020 Автор Поделиться Опубликовано 5 октября, 2020 1 час назад, LIRW сказал: На метро я делал что то типа такого! Скрыть контент loadcrosshaircoordinatehook: mov rax,[rbx + 1B58h] // загружка значения координат в пределах карты mov [loadmaxaddr],eax // загружаем его... что бы в некуда не улететь mov edx,[rbx + 1B30h] // далее загружаем коориднаты прицела mov [crosshairX],edx mov edx,[rbx + 1B34h] mov [crosshairY],edx mov edx,[rbx + 1B38h] mov [crosshairZ],edx mov rax,[rbx] // оригинал код.... lea rdx,[rsp + 20h + 8] ret pointerplayercoordinatehook: movss [rax + 18h],xmm0 sub rax,30h mov [loadaddrpointer],rax // поинтер - проще говоря фильтр mov eax,[rbx + 0Ch] ret baseplatercoordinatehook: cmp [loadaddrpointer],rcx // смотрим ровно ли - перс или нет jne @f movss xmm0,[loadmaxaddr] // проверям координаты прицела с максимально допустимым расстоянием comiss xmm0,[maxaddr] // если всё норм то под флаг je @f cmp [enableteleport],0 // ну и сам флаг на запись данных в коориднаны персонажа jz @f mov eax,[crosshairX] mov [rcx + 40h],eax mov eax,[crosshairY] mov [rcx + 44h],eax mov eax,[crosshairZ] mov [rcx + 48h],eax @@: mov eax,[rcx + 48h] // оригинал mov [rcx + F8h],eax ret Зачем загружал максимально допустимое значение ? Хм.... игры разные... у меня перс улетал просто в некуда - это если без них! В другой игре к примеру, если улететь так же в не куда, она просто зависала и вылетала. вроде загрузка, выгрузка такая же.. Завтра попробую все сначала сделать Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 9 октября, 2020 Автор Поделиться Опубликовано 9 октября, 2020 Пока что решение данной проблемы не найдено Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 9 октября, 2020 Автор Поделиться Опубликовано 9 октября, 2020 В 04.10.2020 в 17:21, Garik66 сказал: а координаты и координаты прицела в одном типе да Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 9 октября, 2020 Поделиться Опубликовано 9 октября, 2020 5 часов назад, Rest0rer сказал: Пока что решение данной проблемы не найдено если всё сделано верно, значит игре не нравится что-то ещё. Может стоит попробовать при телепорте сначала сохранять координаты прицеливания, потом изменять их и перемещаться на сохранённые? Ссылка на комментарий Поделиться на другие сайты Поделиться
Rest0rer Опубликовано 10 октября, 2020 Автор Поделиться Опубликовано 10 октября, 2020 6 часов назад, youneuoy сказал: если всё сделано верно, значит игре не нравится что-то ещё. Может стоит попробовать при телепорте сначала сохранять координаты прицеливания, потом изменять их и перемещаться на сохранённые? Тоже не прокатило Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 10 октября, 2020 Поделиться Опубликовано 10 октября, 2020 2 минуты назад, Rest0rer сказал: Тоже не прокатило Делись тогда самими координатами и координатами прицела.. у мня заработает. Мне функция не нужна искать лень, по этому и спрашиваю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения