во втором случае
movq xmm0,[edi+28]
pxor xmm0, xmm0
jmp FastWork+e
jmp return
во втором случае
movq xmm0,[edi+28]
pxor xmm0, xmm0
jmp FastWork+e
jmp return
@DieVis я не правильно посчитал прыжок
movq xmm0,[edi+28]
movq xmm1,[edi+28]
jmp FastWork+A
jmp return
@DieVis я не правильно посчитал прыжок
в первом скрипте нужно
@DieVis попробуй так:
[ENABLE]
aobscan(FastWork,F3 0F 7E 47 28 F3 0F 7E 4D)
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(FastWork)
newmem:
code:
movq xmm0,[edi+28]
pxor xmm0, xmm0
jmp FastWork+13
jmp return
FastWork:
jmp newmem
return:
[DISABLE]
FastWork:
db F3 0F 7E 47 28
unregistersymbol(*)
dealloc(*)
но, если не получиться, сегодня уже не смогу помочь, нужно разбираться и задавать доп вопросы, а я после работы и завтра на работу, нужно в 5 утра встать.
@DieVis Доброе.
С наступившим и наступающим!!!
Как я понял из описанного, попробуй так:
[ENABLE]
aobscan(FastWork,F3 0F 7E 47 28 F3 0F 7E 4D)
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(FastWork)
newmem:
code:
movq xmm0,[edi+28]
movq xmm1,[edi+28]
jmp FastWork+5
jmp return
FastWork:
jmp newmem
return:
[DISABLE]
FastWork:
db F3 0F 7E 47 28
unregistersymbol(*)
dealloc(*)
@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
@Asusih для того чтобы сделать все в одном скрипте нужно изучать игровой код. В этом случае СЕ-ных логов не достаточно.
@Asusih отпишись, после проверки - интересно.
@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
@LIRW первый скрипт, это и есть запись напрямую, со слов ТС это не сработало, видимо дальше по коду перезаписывается.
с флагами более большой скрипт планировал предложить 3 вариантом.
Второй мой скрипт это уже прыжок куда-надо, но ТС пока не отписался сработало или нет.
@Asusih да и забыл, все-таки проверь первый мой скрипт, загрузив игру заново, есть подозрение, что ты проверял его с уже измененным значением в адресе игры.
@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 без кода игры (хотя бы логов. которые создает СЕ по умолчанию, при создании скрипта) тяжело что-то посоветовать. Но попробуй не записывать в нужный адрес игры значение, а подгружать его извне, короче попробуй так и отпишись о результатах.
[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
@LIRW а я думал, почему он не обновляется, предполагал, что это у меня локально.
ну жаль, удобный был.
@CoinsDMG ну не видя всего кода игры приходится предполагать :)))
@CoinsDMG хотя прыжок нужен, меня сбила твоя фраза "мне нужно, чтобы после каждого повышения уровня у меня был текущий опыт на единицу меньше от максимального". Иначе всегда опыт меньше на 1 будет.
newmem:
pash ebx
mov ebx,[rax+00000628]
sub ebx,1
cmp [rax+00000624]ebx
jnl code
mov [rax+00000624]ebx
code:
pop ebx
movss xmm1,[rax+00000624]
@CoinsDMG так как 1 целая и флоат равны, а в квадратных скобках в СЕ по-умолчанию 4 байта, то думаю можно сделать так, попробуй:
`newmem:
pash ebx
mov ebx,[rax+00000628]
sub ebx,1
mov [rax+00000624]ebx
pop ebx
code:
movss xmm1,[rax+00000624]
``