Assembly code, verifica di un codice.

di il
2 risposte

Assembly code, verifica di un codice.

Salve a tutti, vorrei un consiglio se è possibile, ho un codice, che non mi verifica se l'ID inserito in un programma, il codice è scritto per Cheat Engine, ma non è lì la differenza del problema, nel trovare l'errore.

[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(ItemSummonRaid)
label(checkcountry)
label(failed)
label(exit)

newmem:
call ps_game.exe+4ECF0
//esi=target player,edi=source player
//check map
originalcode:
pushad
movzx eax,word ptr [esi+0x160]
movzx ebx,word ptr [edi+0x160]
cmp eax,(int)45
je checkcountry
cmp ebx,(int)45
je checkcountry

jmp ItemSummonRaid

//checkcountry and check if same map
checkcountry:
cmp eax,ebx        //if they are in the same map which we speicifys
je ItemSummonRaid

movzx eax,byte ptr [esi+0x12d]
movzx ebx,byte ptr [edi+0x12d]
cmp eax,ebx
jne failed


push eax               //party table
push ecx               //leader id
mov eax,[edi+17f4]
mov ecx,[eax+0c]       //leader id
imul ecx,ecx,8
add  ecx,18
mov  ecx,[eax+ecx]   //leader address
cmp edi,ecx          //compare address check is leader
pop ecx
pop eax
jne failed        //if yes


ItemSummonRaid:

mov eax,dword ptr ds:[edi+0x58FC]
mov ecx,dword ptr ds:[edi+0x5900]
lea eax,dword ptr ds:[eax+eax*2]     // eax=bag,ecx=slot
lea edx,dword ptr ds:[ecx+eax*8]
imul edx,edx,4
mov eax,dword ptr ds:[edi+edx+0x1C0]
mov eax,dword ptr ds:[eax+30]
cmp [eax],(int)100045                 //orginal item id
popad
jne 0049e4ea   //success addr
/*
mov eax,dword ptr ds:[eax+0x30]
cmp byte ptr ds:[eax+0x46],0x1F
*/



exit:
jmp returnhere

failed:
popad
jmp 0049E517



"ps_game.exe"+9E4E1:

jmp newmem

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

"ps_game.exe"+9E4E1:

call ps_game.exe+4ECF0

//Alt: db E8 0A 08 FB FF
Il codice è abbastanza lungo, la parte che a me interessa di più è la seguente:


push eax               //party table
push ecx               //leader id
mov eax,[edi+17f4]
mov ecx,[eax+0c]       //leader id
imul ecx,ecx,8
add  ecx,18
mov  ecx,[eax+ecx]   //leader address
cmp edi,ecx          //compare address check is leader
pop ecx
pop eax
jne failed        //if yes

ora mi spiego meglio qual'è il problema, e cosa dovrebbe fare il codice, si tratta di un gioco creato da me, tramite un oggetto, dovrei "Summare un Raid" però solo se il personaggio che lo usa è leader, funziona tutto, tranne il codice inserito sotto, cioè non viene la verifica di esso, io penso perchè lui confronta prima qualcosa che un'altra, però non ne sono sicuro, è possible sapere dove sia l'errore e casomai come sistemarlo?
Grazie a tutti!
Saluti

2 Risposte

  • Re: Assembly code, verifica di un codice.

    Forse non sono sicuro

    
    mov ecx,18
    add ecx,[eax+ecx]  
    oppure
    
    add ecx,18
    add ecx,[eax+ecx]  
  • Re: Assembly code, verifica di un codice.

    Spiego meglio, va direttamente a itemsummonraid senza fare il continuo, mi conviene mettere alla fine quello? Oppure se esiste qualche altra cosa invece di je che mi controlla quello sotto e salta? Non sono molto esperto in merito
Devi accedere o registrarti per scrivere nel forum
2 risposte