Dison Опубликовано 13 апреля, 2020 Поделиться Опубликовано 13 апреля, 2020 (изменено) В общем телепорт который я написал через препятствия с помощью LIRW не телепортирует, как сделать так, чтобы телепортировал игрока через препятствия? ЕЩЕ НЕТ В ЭТОЙ ИГРЕ МОДУЛЬНОЙ АДРЕСАЦИИ, И АДРЕС ПРИХОДИТСЯ ИСКАТЬ ПОСТОЯННО ЧЕРЕЗ СИГНАТУРУ ПОСЛЕ ПЕРЕЗАПУСКА ИГРЫ. Спойлер ТЕЛЕПОРТ СКРИПТ - С написанием скрипта помог Lirw так как мой вариант работал криво Спойлер [ENABLE] aobscanmodule(Teleport,UnityPlayer.dll,ED F3 0F 11 56 10) // should be unique alloc(Teleportmem,$1000,Teleport) registersymbol(Teleport) registersymbol(_saveCoords) registersymbol(_loadCoords) label(coordX) label(coordY) label(coordZ) label(_save) label(_load) label(_saveCoords) label(_loadCoords) label(_exit_Teleport) label(_Teleport_back_) Teleportmem: cmp dword ptr [rsi+1C],01140004 jne _exit_Teleport _save: cmp byte ptr [_saveCoords],1 jne short _load movss xmm2,dword ptr [rsi+10] movss [coordX],xmm2 movss xmm3,dword ptr [rsi+14] movss [coordY],xmm3 movss xmm4,dword ptr [rsi+18] movss [coordZ],xmm4 cmp byte ptr [_saveCoords],0 setz [_saveCoords] jmp _exit_Teleport _load: cmp [coordX],0 je _exit_Teleport cmp byte ptr [_loadCoords],1 jne short _exit_Teleport movss xmm2,dword ptr [coordX] movss [rsi+10],xmm2 movss xmm3,dword ptr [coordY] movss [rsi+14],xmm3 movss xmm4,dword ptr [coordZ] movss [rsi+18],xmm4 cmp byte ptr [_loadCoords],0 setz [_loadCoords] _exit_Teleport: movss [rsi+10],xmm2 movss [rsi+14],xmm3 movss [rsi+18],xmm4 jmp _Teleport_back_ coordX: dd 0 coordY: dd 0 coordZ: dd 0 _saveCoords: db 0 _loadCoords: db 0 Teleport+01: jmp Teleportmem db 90 90 90 90 90 90 90 90 90 90 _Teleport_back_: [DISABLE] Teleport+01: db F3 0F 11 56 10 F3 0F 11 5E 14 F3 0F 11 66 18 unregistersymbol(Teleport) unregistersymbol(_saveCoords) unregistersymbol(_loadCoords) dealloc(Teleportmem) { // ORIGINAL CODE - INJECTION POINT: "UnityPlayer.dll"+DD3A3B "UnityPlayer.dll"+DD3A0B: F3 0F 10 43 14 - movss xmm0,[rbx+14] "UnityPlayer.dll"+DD3A10: F3 0F 10 6B 10 - movss xmm5,[rbx+10] "UnityPlayer.dll"+DD3A15: F3 0F 10 4B 18 - movss xmm1,[rbx+18] "UnityPlayer.dll"+DD3A1A: F3 0F 59 13 - mulss xmm2,[rbx] "UnityPlayer.dll"+DD3A1E: F3 0F 59 5B 04 - mulss xmm3,[rbx+04] "UnityPlayer.dll"+DD3A23: F3 0F 59 63 08 - mulss xmm4,[rbx+08] "UnityPlayer.dll"+DD3A28: F3 0F 58 56 10 - addss xmm2,dword ptr [rsi+10] "UnityPlayer.dll"+DD3A2D: F3 0F 58 5E 14 - addss xmm3,dword ptr [rsi+14] "UnityPlayer.dll"+DD3A32: F3 0F 58 66 18 - addss xmm4,dword ptr [rsi+18] "UnityPlayer.dll"+DD3A37: F3 0F 59 ED - mulss xmm5,xmm5 // ---------- INJECTING HERE ---------- "UnityPlayer.dll"+DD3A3B: F3 0F 11 56 10 - movss [rsi+10],xmm2 // ---------- DONE INJECTING ---------- "UnityPlayer.dll"+DD3A40: F3 0F 11 5E 14 - movss [rsi+14],xmm3 "UnityPlayer.dll"+DD3A45: F3 0F 11 66 18 - movss [rsi+18],xmm4 "UnityPlayer.dll"+DD3A4A: 8B 03 - mov eax,[rbx] "UnityPlayer.dll"+DD3A4C: 89 02 - mov [rdx],eax "UnityPlayer.dll"+DD3A4E: 8B 43 04 - mov eax,[rbx+04] "UnityPlayer.dll"+DD3A51: 89 42 04 - mov [rdx+04],eax "UnityPlayer.dll"+DD3A54: 8B 43 08 - mov eax,[rbx+08] "UnityPlayer.dll"+DD3A57: 89 42 08 - mov [rdx+08],eax "UnityPlayer.dll"+DD3A5A: 44 89 62 0C - mov [rdx+0C],r12d "UnityPlayer.dll"+DD3A5E: 8B 43 10 - mov eax,[rbx+10] } Изменено 13 апреля, 2020 пользователем Dison 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 14 апреля, 2020 Автор Поделиться Опубликовано 14 апреля, 2020 Ребят может я не правильно вопрос поставил. Смотрю мне не кто не отвечает. Кто нибудь знает как сделать телепорт чтобы игрок не застревал у стен? На видео посмотрите что игрок не может при телепортации проскочить мимо стены. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 14 апреля, 2020 Поделиться Опубликовано 14 апреля, 2020 Попробуй найти другие координаты, эти координаты похожи на "желаемую позицию", куда игра будет перемещать персонажа, и для неё может коллизия считаться ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 15 апреля, 2020 Автор Поделиться Опубликовано 15 апреля, 2020 4 часа назад, imaginary сказал: Попробуй найти другие координаты А другие, это какие? Просто какие могут быть там еще координаты, поподробнее можно. Для проверки я замораживаю эти координати игрока, все - он не в лево, не в право никуда не движется. Что то там еще можно найти? Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 15 апреля, 2020 Поделиться Опубликовано 15 апреля, 2020 23 минуты назад, Dison сказал: А другие, это какие? Другие, которые обращаются к этим что бы измениться, попробуй поискать через инструкции обращения 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 15 апреля, 2020 Автор Поделиться Опубликовано 15 апреля, 2020 7 часов назад, imaginary сказал: Другие, которые обращаются к этим что бы измениться, попробуй поискать через инструкции обращения Ты права, не те координаты нашел, сейчас все работает! Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 15 апреля, 2020 Автор Поделиться Опубликовано 15 апреля, 2020 (изменено) У меня все так же актуален вопрос про вызов функции createthread В этой игре например скрипт на патроны, жизни, предметы начинает работать только тогда когда ты сделаешь выстрел или какое нибудь действие с предметами и.т.д. То-есть код игры начинает генерироваться после действий, инструкций постоянно считывающих нет, только когда сделаешь действие какое либо в игре. Модульной адресации тоже нет, помогите разобраться не могу понять как мне составить скрипт с вызовом функций. Скрипт на предметы: Спойлер [ENABLE] aobscan(Item.Inf,48 63 48 48 FF C9) // should be unique alloc(newmem,$1000,05D265F6) registersymbol(Item.Inf) label(code) label(return) newmem: mov [rax+48],#99 code: movsxd rcx,dword ptr [rax+48] dec ecx jmp return Item.Inf: jmp newmem db 90 return: [DISABLE] Item.Inf: db 48 63 48 48 FF C9 unregistersymbol(Item.Inf) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 05D265F6 05D265C5: 90 - nop 05D265C6: 49 BB 70 9A 8A 07 00 00 00 00 - mov r11,00000000078A9A70 05D265D0: 41 FF D3 - call r11 05D265D3: 48 8B C8 - mov rcx,rax 05D265D6: 83 39 00 - cmp dword ptr [rcx],00 05D265D9: 49 BA C8 59 27 16 01 00 00 00 - mov r10,00000001162759C8 05D265E3: 66 66 90 - nop 05D265E6: 49 BB 40 4C 8A 07 00 00 00 00 - mov r11,00000000078A4C40 05D265F0: 41 FF D3 - call r11 05D265F3: 4C 8B F8 - mov r15,rax // ---------- INJECTING HERE ---------- 05D265F6: 48 63 48 48 - movsxd rcx,dword ptr [rax+48] 05D265FA: FF C9 - dec ecx // ---------- DONE INJECTING ---------- 05D265FC: 89 48 48 - mov [rax+48],ecx 05D265FF: 49 63 47 48 - movsxd rax,dword ptr [r15+48] 05D26603: 83 F8 01 - cmp eax,01 05D26606: 0F 8D CC 00 00 00 - jnl 05D266D8 05D2660C: 48 8B 47 48 - mov rax,[rdi+48] 05D26610: 48 89 45 A0 - mov [rbp-60],rax 05D26614: B9 A8 B2 EB 0E - mov ecx,0EEBB2A8 05D26619: 48 8D 64 24 00 - lea rsp,[rsp+00] 05D2661E: 49 BB 60 0F 86 06 00 00 00 00 - mov r11,0000000006860F60 05D26628: 41 FF D3 - call r11 } Сама функция в полном обБёме Спойлер 09853C7F - 00 55 48 - add [rbp+48],dl 09853C82 - 8B EC - mov ebp,esp 09853C84 - 48 81 EC 80000000 - sub rsp,00000080 { 128 } 09853C8B - 48 89 5D D0 - mov [rbp-30],rbx 09853C8F - 48 89 75 D8 - mov [rbp-28],rsi 09853C93 - 48 89 7D E0 - mov [rbp-20],rdi 09853C97 - 4C 89 65 E8 - mov [rbp-18],r12 09853C9B - 4C 89 6D F0 - mov [rbp-10],r13 09853C9F - 4C 89 7D F8 - mov [rbp-08],r15 09853CA3 - 48 8B F9 - mov rdi,rcx 09853CA6 - 48 8B F2 - mov rsi,rdx 09853CA9 - 48 8B 47 28 - mov rax,[rdi+28] 09853CAD - 48 8B C8 - mov rcx,rax 09853CB0 - 48 8B D6 - mov rdx,rsi 09853CB3 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853CB6 - 49 BB B0A0EA0700000000 - mov r11,0000000007EAA0B0 { (-326416299) } 09853CC0 - 41 FF D3 - call r11 09853CC3 - 48 8B D0 - mov rdx,rax 09853CC6 - 48 8B CF - mov rcx,rdi 09853CC9 - 48 8D 64 24 00 - lea rsp,[rsp+00] 09853CCE - 49 BB D040850900000000 - mov r11,00000000098540D0 { (-326416299) } 09853CD8 - 41 FF D3 - call r11 09853CDB - 48 8B F0 - mov rsi,rax 09853CDE - 83 F8 FF - cmp eax,-01 { 255 } 09853CE1 - 0F84 24030000 - je 0985400B 09853CE7 - 48 8B 47 48 - mov rax,[rdi+48] 09853CEB - 4C 8B E0 - mov r12,rax 09853CEE - 48 8B DE - mov rbx,rsi 09853CF1 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853CF4 - 49 63 44 24 18 - movsxd rax,dword ptr [r12+18] 09853CF9 - 3B D8 - cmp ebx,eax 09853CFB - 0F83 28030000 - jae 09854029 09853D01 - 49 8B 44 24 10 - mov rax,[r12+10] 09853D06 - 48 63 CB - movsxd rcx,ebx 09853D09 - 48 8D 44 C8 20 - lea rax,[rax+rcx*8+20] 09853D0E - 48 8B 00 - mov rax,[rax] 09853D11 - 0FB6 40 35 - movzx eax,byte ptr [rax+35] 09853D15 - 85 C0 - test eax,eax 09853D17 - 0F84 16020000 - je 09853F33 09853D1D - 48 8B 47 50 - mov rax,[rdi+50] 09853D21 - 4C 8B E8 - mov r13,rax 09853D24 - 89 75 B0 - mov [rbp-50],esi 09853D27 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853D2A - 49 63 45 18 - movsxd rax,dword ptr [r13+18] 09853D2E - 39 45 B0 - cmp [rbp-50],eax 09853D31 - 0F83 09030000 - jae 09854040 09853D37 - 49 8B 45 10 - mov rax,[r13+10] 09853D3B - 48 63 4D B0 - movsxd rcx,dword ptr [rbp-50] 09853D3F - 48 63 C9 - movsxd rcx,ecx 09853D42 - 48 8D 44 C8 20 - lea rax,[rax+rcx*8+20] 09853D47 - 48 8B 00 - mov rax,[rax] 09853D4A - 48 8B C8 - mov rcx,rax 09853D4D - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853D50 - 48 8D 64 24 00 - lea rsp,[rsp+00] 09853D55 - 90 - nop 09853D56 - 49 BB 0095730700000000 - mov r11,0000000007739500 { (-326416299) } 09853D60 - 41 FF D3 - call r11 09853D63 - 48 8B C8 - mov rcx,rax 09853D66 - 83 39 00 - cmp dword ptr [rcx],00 { 0 } 09853D69 - 41 BA E0B2CDF2 - mov r10d,F2CDB2E0 { (0EF97788) } 09853D6F - 48 8D AD 00000000 - lea rbp,[rbp+00000000] 09853D76 - 49 BB 80BE170800000000 - mov r11,000000000817BE80 { (58394.28) } 09853D80 - 41 FF D3 - call r11 09853D83 - 4C 8B F8 - mov r15,rax 09853D86 - 48 63 48 48 - movsxd rcx,dword ptr [rax+48] 09853D8A - FF C9 - dec ecx 09853D8C - 89 48 48 - mov [rax+48],ecx 09853D8F - 49 63 47 48 - movsxd rax,dword ptr [r15+48] 09853D93 - 83 F8 01 - cmp eax,01 { 1 } 09853D96 - 0F8D CC000000 - jnl 09853E68 09853D9C - 48 8B 47 48 - mov rax,[rdi+48] 09853DA0 - 48 89 45 A0 - mov [rbp-60],rax 09853DA4 - B9 A8A1FA0E - mov ecx,0EFAA1A8 { (0ECA9468) } 09853DA9 - 48 8D 64 24 00 - lea rsp,[rsp+00] 09853DAE - 49 BB 600F860600000000 - mov r11,0000000006860F60 { (-326416299) } 09853DB8 - 41 FF D3 - call r11 09853DBB - 4C 8B C0 - mov r8,rax 09853DBE - 48 8B 45 A0 - mov rax,[rbp-60] 09853DC2 - 41 C7 40 30 FFFFFFFF - mov [r8+30],FFFFFFFF { (0) } 09853DCA - 48 8B C8 - mov rcx,rax 09853DCD - 48 8B D6 - mov rdx,rsi 09853DD0 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853DD3 - 66 66 90 - nop 09853DD6 - 49 BB C0AC730700000000 - mov r11,000000000773ACC0 { (58394.28) } 09853DE0 - 41 FF D3 - call r11 09853DE3 - 48 8B 47 50 - mov rax,[rdi+50] 09853DE7 - 4C 8B F8 - mov r15,rax 09853DEA - 89 75 A8 - mov [rbp-58],esi 09853DED - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853DF0 - 49 63 47 18 - movsxd rax,dword ptr [r15+18] 09853DF4 - 39 45 A8 - cmp [rbp-58],eax 09853DF7 - 0F83 5B020000 - jae 09854058 09853DFD - 49 8B 47 10 - mov rax,[r15+10] 09853E01 - 48 63 4D A8 - movsxd rcx,dword ptr [rbp-58] 09853E05 - 48 63 C9 - movsxd rcx,ecx 09853E08 - 48 8D 44 C8 20 - lea rax,[rax+rcx*8+20] 09853E0D - 48 8B 00 - mov rax,[rax] 09853E10 - 48 8B C8 - mov rcx,rax 09853E13 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853E16 - 49 BB 0095730700000000 - mov r11,0000000007739500 { (-326416299) } 09853E20 - 41 FF D3 - call r11 09853E23 - 48 8B C8 - mov rcx,rax 09853E26 - 33 D2 - xor edx,edx 09853E28 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853E2B - 66 66 90 - nop 09853E2E - 49 BB A0C5730700000000 - mov r11,000000000773C5A0 { (-326416299) } 09853E38 - 41 FF D3 - call r11 09853E3B - 48 89 45 C0 - mov [rbp-40],rax 09853E3F - 48 8B C8 - mov rcx,rax 09853E42 - 83 38 00 - cmp dword ptr [rax],00 { 0 } 09853E45 - 90 - nop 09853E46 - 49 BB 203A720700000000 - mov r11,0000000007723A20 { (-326416299) } 09853E50 - 41 FF D3 - call r11 09853E53 - 48 8B C8 - mov rcx,rax 09853E56 - 49 BB 4045C60600000000 - mov r11,0000000006C64540 { (-326416299) } 09853E60 - 41 FF D3 - call r11 09853E63 - E9 A3010000 - jmp 0985400B 09853E68 - 49 63 47 48 - movsxd rax,dword ptr [r15+48] 09853E6C - 83 F8 01 - cmp eax,01 { 1 } 09853E6F - 0F85 4C000000 - jne 09853EC1 09853E75 - 49 8B CF - mov rcx,r15 09853E78 - 41 83 3F 00 - cmp dword ptr [r15],00 { 0 } 09853E7C - 66 90 - nop 09853E7E - 49 BB 1647720700000000 - mov r11,0000000007724716 { (232) } 09853E88 - 41 FF D3 - call r11 09853E8B - 48 8B C8 - mov rcx,rax 09853E8E - 83 39 00 - cmp dword ptr [rcx],00 { 0 } 09853E91 - 41 BA 989ECBF2 - mov r10d,F2CB9E98 { (0EF97788) } 09853E97 - 48 8D AD 00000000 - lea rbp,[rbp+00000000] 09853E9E - 49 BB B249730700000000 - mov r11,00000000077349B2 { (232) } 09853EA8 - 41 FF D3 - call r11 09853EAB - 48 8B C8 - mov rcx,rax 09853EAE - BA 80081306 - mov edx,06130880 { (062210B8) } 09853EB3 - 48 8B 00 - mov rax,[rax] 09853EB6 - FF 90 C8020000 - call qword ptr [rax+000002C8] 09853EBC - E9 4A010000 - jmp 0985400B 09853EC1 - 49 8B CF - mov rcx,r15 09853EC4 - 41 83 3F 00 - cmp dword ptr [r15],00 { 0 } 09853EC8 - 48 8D 64 24 00 - lea rsp,[rsp+00] 09853ECD - 90 - nop Изменено 15 апреля, 2020 пользователем Dison Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 15 апреля, 2020 Поделиться Опубликовано 15 апреля, 2020 Похоже игра на Mono и Unity. Найти метод по некоторому названию (где-то выше по коду) в CE и скомпилировать это метод по названию (перед активацией скрипта АА) Спойлер https://wiki.cheatengine.org/index.php?title=Mono:Lua:mono_compile_method Пример если название функции "TakeDamage" (здесь просто нопинг) Спойлер {$STRICT} define(bytes,89 47 60) //// //// ------------------------------ ENABLE ------------------------------ [ENABLE] {$lua} if syntaxcheck then return end if LaunchMonoDataCollector() ~= 0 then local mId = mono_findMethod('Assembly-CSharp', 'PlayerStatsManager', 'TakeDamage') --local mId = mono_findMethod('', 'PlayerStatsManager', 'TakeDamage') ---- This also works mono_compile_method(mId) end {$asm} assert(PlayerStatsManager:TakeDamage+8A, bytes) PlayerStatsManager:TakeDamage+8A: nop nop nop //// //// ------------------------------ DISABLE ------------------------------ [DISABLE] PlayerStatsManager:TakeDamage+8A: db bytes // mov [edi+60],eax Вообще, у @Xipho было видео по Subnautica на канале Gamehacklab[RU]. Там monodessector и там разные подходы. У меня в блоге тоже можно поискать как ломать игры на Unity. Если движок знаешь, да еще и игра на Моно, да еще и без обфускации, то можно что хочешь с ней делать. Документация Unity функций. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения