germanshnayder Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 (изменено) Всем привет. Недавно мне понадобился скрипт как замена указателя, который бы самостоятельно находил нужную структуру (с координатами) и выводил все адреса оттуда. Делаю его под проектный майнкрафт (но это не сильно важно), при скане инструкций нашел всего 1 статичную, и работает она более чем с 6к адресами (теперь понятно почему), видимо главная инструкция физики, поэтому нужно сделать хороший фильтр. Перейдем сразу к делу, своял скрипт: Спойлер [ENABLE] aobscan(INJECT,01 59 48 3B 01 C5 FB 11 04 19) // should be unique alloc(newmem,$1000,INJECT) label(code) label(return) label(Value) registersymbol(Value) label(Value1) registersymbol(Value1) label(Value2) registersymbol(Value2) label(Value3) registersymbol(Value3) label(Value4) registersymbol(Value4) label(Value5) registersymbol(Value5) newmem: cmp dword ptr [rcx+8],F806436A // (hex) фильтр на порядковый номер ячейки памяти структуры (может измениться при обновлении игры или редко после краша) cmp dword ptr [rcx+40],5 // фильтр на конец структуры jne code add rcx,10 // смещение от начала структуры до 1 координат mov qword [Value],rcx // запись в метку double значения add rcx,8 // до 2 координат mov qword [Value1],rcx // запись в метку add rcx,8 // до 3 координат mov qword [Value2],rcx // запись в метку add rcx,8 // до 4 координат mov qword [Value3],rcx // запись в метку add rcx,8 // до 5 координат mov qword [Value4],rcx // запись в метку add rcx,8 // до 6 координат mov qword [Value5],rcx // запись в метку sub rcx,38 // приводим rcx в изначальное положение чтобы ничего не сломалось code: vmovsd [rcx+rbx],xmm0 jmp return Value: dq 0 0 0 0 Value1: dq 0 0 0 0 Value2: dq 0 0 0 0 Value3: dq 0 0 0 0 Value4: dq 0 0 0 0 Value5: dq 0 0 0 0 INJECT+05: jmp newmem return: registersymbol(INJECT) [DISABLE] INJECT+05: db C5 FB 11 04 19 unregistersymbol(Value) unregistersymbol(Value1) unregistersymbol(Value2) unregistersymbol(Value3) unregistersymbol(Value4) unregistersymbol(Value5) unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 19995A7A268 19995A7A245: 48 83 C4 10 - add rsp,10 19995A7A249: 41 0F B7 5D 01 - movzx ebx,word ptr [r13+01] 19995A7A24E: 48 8B 4D D0 - mov rcx,[rbp-30] 19995A7A252: C1 E3 02 - shl ebx,02 19995A7A255: 8B 54 D9 28 - mov edx,[rcx+rbx*8+28] 19995A7A259: 48 8B 5C D9 20 - mov rbx,[rcx+rbx*8+20] 19995A7A25E: C1 EA 15 - shr edx,15 19995A7A261: 83 E2 01 - and edx,01 19995A7A264: 59 - pop rcx 19995A7A265: 48 3B 01 - cmp rax,[rcx] // ---------- INJECTING HERE ---------- 19995A7A268: C5 FB 11 04 19 - vmovsd [rcx+rbx],xmm0 // ---------- DONE INJECTING ---------- 19995A7A26D: 85 D2 - test edx,edx 19995A7A26F: 0F 84 06 00 00 00 - je 19995A7A27B 19995A7A275: F0 83 44 24 C0 00 - lock add dword ptr [rsp-40],00 19995A7A27B: 41 0F B6 5D 03 - movzx ebx,byte ptr [r13+03] 19995A7A280: 49 83 C5 03 - add r13,03 19995A7A284: 49 BA 20 24 0A 74 00 00 00 00 - mov r10,jvm.dll+D72420 19995A7A28E: 41 FF 24 DA - jmp qword ptr [r10+rbx*8] 19995A7A292: 66 0F 1F 44 00 00 - nop word ptr [rax+rax+00] 19995A7A298: 00 00 - add [rax],al 19995A7A29A: 00 00 - add [rax],al } Структура, к которой надо приаттачиться выглядит следующим образом: Добавил в таблицу, включил и увидел бред: Начал разбираться что не так, подрубил трассировку на начало кода в newmem и вижу следующее: В итоге скрипт всеми силами не хочет замечать нужную структуру, аттачится вообще не туда куда нужно (все 20 раз которые я пробовал), сравнивает данные и делает прыжок на родной код. Если объясните что тут вообще происходит и поможете, буду очень признателен) P.S. Тему мог запостить в неправильный раздел, если это так, то прошу уточнить. Изменено 19 июня, 2021 пользователем germanshnayder Ссылка на комментарий Поделиться на другие сайты Поделиться
germanshnayder Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 Возможно моя грубейшая в том, что я использовал add вместо mov, поэтому исправил следующим образом: Спойлер newmem: cmp dword ptr [rcx+8],F806436A // фильтр на порядковый номер ячейки памяти структуры (может измениться при обновлении или редко после краша игры) cmp dword ptr [rcx+40],5 // фильтр на конец структуры jne code mov rcx,[rcx+10] // смещение от начала структуры до 1 координат mov qword [Value],rcx // запись в метку double значения mov rcx,[rcx+8] // до 2 координат mov qword [Value1],rcx // запись в метку mov rcx,[rcx+8] // до 3 координат mov qword [Value2],rcx // запись в метку mov rcx,[rcx+8] // до 4 координат mov qword [Value3],rcx // запись в метку mov rcx,[rcx+8] // до 5 координат mov qword [Value4],rcx // запись в метку mov rcx,[rcx+8] // до 6 координат mov qword [Value5],rcx // запись в метку mov rcx,[rcx-38] // приводим rcx в изначальное положение чтобы ничего не сломалось Но в результате получаю вылет спустя 5 секунд после активации скрипта. Я пошел дальше, и решил пересобрать скрипт по топику отсюда (спасибо imaginary) Получилось вот так: Спойлер [ENABLE] aobscan(INJECT,05 00 00 00 00 00 00 00 6A 43 06 F8 00 00 00 00 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 05) // should be unique alloc(adresspl,100) label(value) label(value1) label(value2) label(value3) label(value4) label(value5) registersymbol(adresspl) registersymbol(value) registersymbol(value1) registersymbol(value2) registersymbol(value3) registersymbol(value4) registersymbol(value5) adresspl: mov eax,INJECT mov eax,[eax+10] mov dword [value],eax mov eax,[eax+8] mov dword [value1],eax mov eax,[eax+8] mov dword [value2],eax mov eax,[eax+8] mov dword [value3],eax mov eax,[eax+8] mov qword [value4],eax mov eax,[eax+8] mov dword [value5],eax ret value: dq 0 0 0 value1: dq 0 0 0 value2: dq 0 0 0 value3: dq 0 0 0 value4: dq 0 0 0 value5: dq 0 0 0 createthread(adresspl) [DISABLE] dealloc(adresspl) unregistersymbol(adresspl) unregistersymbol(value) unregistersymbol(valuel) unregistersymbol(value2) unregistersymbol(value3) unregistersymbol(value4) unregistersymbol(value5) Но после включения скрипта во время создания потока также получаю краш. Не могу понять, в чем дело. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения