Как при отключении скрипта вернуть или (записать) в адрес значение ?
-
@Asusih без кода игры (хотя бы логов. которые создает СЕ по умолчанию, при создании скрипта) тяжело что-то посоветовать. Но попробуй не записывать в нужный адрес игры значение, а подгружать его извне, короче попробуй так и отпишись о результатах.
[ENABLE] alloc(newmem,2048,Player:UpdatePlacement+b23) label(returnhere) label(originalcode) label(exit) label(odin) newmem: //mov [rdi+00000790] ,#1 originalcode: //movzx eax,byte ptr [rdi+00000790] movzx eax,byte ptr [odin] exit: jmp returnhere odin: dd 1 Player:UpdatePlacement+b23: jmp newmem nop 2 returnhere: [DISABLE] dealloc(newmem) Player:UpdatePlacement+b23: db 0F B6 87 90 07 00 00
-
@garik66, в общем не сработало. В основном мне надо,чтобы при выключении скрипта значение в адресе было 0. Так-как тип функции это boolean, поэтому при включении должно быть 1, а при выключении 0. Буду благодарен, если поможешь мне.
Как и просили с логами вроде.
define(address,Player:UpdatePlacement+b23)
define(bytes,0F B6 87 90 07 00 00)[ENABLE]
assert(address,bytes)
alloc(newmem,$1000,Player:UpdatePlacement+b23)label(code)
label(return)newmem:
mov [rdi+00000790],#1code:
movzx eax,byte ptr [rdi+00000790]
jmp returnaddress:
jmp newmem
nop 2
return:[DISABLE]
address:
db bytes
// movzx eax,byte ptr [rdi+00000790]dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Player:UpdatePlacement+b23Player:UpdatePlacement+aee: 49 BB 5C 35 61 23 DA 02 00 00 - mov r11,000002DA2361355C
Player:UpdatePlacement+af8: 41 FF D3 - call r11
Player:UpdatePlacement+afb: E9 33 03 00 00 - jmp Player:UpdatePlacement+e33
Player:UpdatePlacement+b00: 48 8B 8F 38 06 00 00 - mov rcx,[rdi+00000638]
Player:UpdatePlacement+b07: 33 D2 - xor edx,edx
Player:UpdatePlacement+b09: 48 8D 64 24 00 - lea rsp,[rsp+00]
Player:UpdatePlacement+b0e: 49 BB 10 07 AE 93 DB 02 00 00 - mov r11,UnityEngine.Object:op_Inequality
Player:UpdatePlacement+b18: 41 FF D3 - call r11
Player:UpdatePlacement+b1b: 85 C0 - test eax,eax
Player:UpdatePlacement+b1d: 0F 84 10 03 00 00 - je Player:UpdatePlacement+e33
// ---------- INJECTING HERE ----------
Player:UpdatePlacement+b23: 0F B6 87 90 07 00 00 - movzx eax,byte ptr [rdi+00000790]
// ---------- DONE INJECTING ----------
Player:UpdatePlacement+b2a: 85 C0 - test eax,eax
Player:UpdatePlacement+b2c: 75 25 - jne Player:UpdatePlacement+b53
Player:UpdatePlacement+b2e: 48 8B CF - mov rcx,rdi
Player:UpdatePlacement+b31: 48 8B 95 C8 FE FF FF - mov rdx,[rbp-00000138]
Player:UpdatePlacement+b38: 45 33 C0 - xor r8d,r8d
Player:UpdatePlacement+b3b: 66 66 90 - nop 3
Player:UpdatePlacement+b3e: 49 BB 50 41 1B 25 DA 02 00 00 - mov r11,Player:HaveRequirements
Player:UpdatePlacement+b48: 41 FF D3 - call r11
Player:UpdatePlacement+b4b: 85 C0 - test eax,eax
Player:UpdatePlacement+b4d: 0F 84 95 02 00 00 - je Player:UpdatePlacement+de8
} -
@Asusih попробуй так
define(address,Player:UpdatePlacement+b23) define(bytes,0F B6 87 90 07 00 00) [ENABLE] assert(address,bytes) alloc(newmem,$1000,Player:UpdatePlacement+b23) label(code) label(return) newmem: code: jmp Player:UpdatePlacement+b53 jmp return address: jmp newmem nop 2 return: [DISABLE] address: db bytes // movzx eax,byte ptr [rdi+00000790] dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Player:UpdatePlacement+b23 Player:UpdatePlacement+aee: 49 BB 5C 35 61 23 DA 02 00 00 - mov r11,000002DA2361355C Player:UpdatePlacement+af8: 41 FF D3 - call r11 Player:UpdatePlacement+afb: E9 33 03 00 00 - jmp Player:UpdatePlacement+e33 Player:UpdatePlacement+b00: 48 8B 8F 38 06 00 00 - mov rcx,[rdi+00000638] Player:UpdatePlacement+b07: 33 D2 - xor edx,edx Player:UpdatePlacement+b09: 48 8D 64 24 00 - lea rsp,[rsp+00] Player:UpdatePlacement+b0e: 49 BB 10 07 AE 93 DB 02 00 00 - mov r11,UnityEngine.Object:op_Inequality Player:UpdatePlacement+b18: 41 FF D3 - call r11 Player:UpdatePlacement+b1b: 85 C0 - test eax,eax Player:UpdatePlacement+b1d: 0F 84 10 03 00 00 - je Player:UpdatePlacement+e33 // ---------- INJECTING HERE ---------- Player:UpdatePlacement+b23: 0F B6 87 90 07 00 00 - movzx eax,byte ptr [rdi+00000790] // ---------- DONE INJECTING ---------- Player:UpdatePlacement+b2a: 85 C0 - test eax,eax Player:UpdatePlacement+b2c: 75 25 - jne Player:UpdatePlacement+b53 Player:UpdatePlacement+b2e: 48 8B CF - mov rcx,rdi Player:UpdatePlacement+b31: 48 8B 95 C8 FE FF FF - mov rdx,[rbp-00000138] Player:UpdatePlacement+b38: 45 33 C0 - xor r8d,r8d Player:UpdatePlacement+b3b: 66 66 90 - nop 3 Player:UpdatePlacement+b3e: 49 BB 50 41 1B 25 DA 02 00 00 - mov r11,Player:HaveRequirements Player:UpdatePlacement+b48: 41 FF D3 - call r11 Player:UpdatePlacement+b4b: 85 C0 - test eax,eax Player:UpdatePlacement+b4d: 0F 84 95 02 00 00 - je Player:UpdatePlacement+de8 }
-
@Asusih да и забыл, все-таки проверь первый мой скрипт, загрузив игру заново, есть подозрение, что ты проверял его с уже измененным значением в адресе игры.
-
на прямую пиши mov eax,00000001 под патч или этим же хуком..
если перезаписывает что то... патчи его.. либо флаго dd 00 - 01
newmem:originalcode:
mov eax,00000001exit:
jmp returnhere -
@LIRW первый скрипт, это и есть запись напрямую, со слов ТС это не сработало, видимо дальше по коду перезаписывается.
с флагами более большой скрипт планировал предложить 3 вариантом.
Второй мой скрипт это уже прыжок куда-надо, но ТС пока не отписался сработало или нет. -
@garik66 Игорь понял тебя. Пусть пробует тогда.
-
@garik66 ,это включает пол функции в игре. То есть вообще функция открывает все рецепты и бесплатный крафт, тут же не появляются все рецепты и крафт тоже не работает . С первым скриптом такая же ситуация (
-
Это сообщение удалено! -
@garik66, он получается не меняет значение. То есть если добавить адрес в таблицу, то значение остается неизменным. Просто не совсем понимаю, почему просто нельзя в автоассемблере записать при выключении скрипта значение, или это делается через флаги ?
-
@Asusih судя, по описанному тобой, скрипт с флагом тоже скорее всего тебе не поможет.
Но давай попробуем- добавь скрипт в таблицу
[ENABLE] alloc(newmem,2048,Player:UpdatePlacement+b23) label(returnhere) label(originalcode) label(exit) label(Flag) registersymbol(Flag) newmem: cmp [Flag],1 jne @f mov [rdi+00000790] ,#1 jmp originalcode @@: mov [rdi+00000790] ,0 originalcode: movzx eax,byte ptr [rdi+00000790] exit: jmp returnhere Flag: dd 1 Player:UpdatePlacement+b23: jmp newmem nop 2 returnhere: [DISABLE] unregistersymbol(Flag) dealloc(newmem) Player:UpdatePlacement+b23: db 0F B6 87 90 07 00 00
- теперь нужно добавить в таблицу адрес Flag, после активации скрипта.
По умолчанию будет в нем 1, перед отключением скрипта в адресе нужно поставить в адресе Flag 0.
-
@Asusih отпишись, после проверки - интересно.
-
@garik66 ,хорошо , чуть позже проверю
-
@garik66 ,спасибо, это работает. Благодарен, вообще хотелось как писал, но думаю что так не получится, а так большое спасибо !
-
@Asusih для того чтобы сделать все в одном скрипте нужно изучать игровой код. В этом случае СЕ-ных логов не достаточно.
-
@Asusih и еще вариант:
Найти указатели на адрес и написать простейший скрипт[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat mov[адрес с указателями],1 [DISABLE] //code from here till the end of the code will be used to disable the cheat mov[адрес с указателями],0
-
@garik66, оо, попытаюсь сделать,спасибо большое.