01.02.2018, 04:22
(
Последний раз редактировалось Jelly23; 10.02.2018 в 02:51.
)
• Encontrando os IDs de RPCs, com IDA Pro.
IDA й um disassembler e debugger, certifique-se de que vocк o tem instalado, pois ele serб utilizado para conseguir os IDs das chamadas de procedimento remoto (RPC) de funзхes nativas.• Comeзando com o IDA Pro.
Deve-se levar em consideraзгo que algumas funзхes nгo tem RPCs. Um exemplo й SetPlayerVirtualWorld, que nгo manda nenhum RPC ao jogador, apenas muda o valor de dwVirtualWorld nas estruturas internas do servidor (em CPlayerPool). O servidor verifica se o mundo virtual do jogador й o mesmo que outros jogadores ou veнculos, caso contrбrio o servidor manda RPCs como WorldVehicleRemove e WorldPlayerRemove para o cliente, removendo veнculos e jogadores de mundos virtuais diferentes.
-Ao iniciar o IDA pro, vocк verб as seguintes opзхes:• Encontrando RPCs que vem do servidor ao cliente - Outcoming RPCs.
-Clique em "Go - Work on your own". Apуs, clique na aba "file" e abra seu samp-server.exe, entгo vocк verб o seguinte:
-Apenas clique em "Ok", e logo vocк verб o seguinte:
-Entгo, clique com o botгo direito do mouse e selecione "Text view". Lуgo, vocк verб o seguinte:
Se vocк chegou aqui, vamos nos certificar que vocк jб seguiu os passos em "Comeзando com o IDA Pro.".• Encontrando RPCs que vem do cliente ao servidor - Incoming RPCs.
-Aperte SHIFT+F12 para mostrar "Strings window":
-Apуs ter aberto a janela de strings (Strings window), pressione ALT+T para procurar uma string. Nesse caso vamos procurar por SetPlayerFightingStyle:
-Ao clicar em "OK", vocк jб terб seu resultado:
-Clique duas vezes no resultado e vocк verб o seguinte:
-Podemos ver que as referкncias de dados estгo marcadas com a sequкncia "DATA XREF". Vocк vai clicar em 004C90C8, marcado em amarelo. Se vocк estivesse procurando por SetPlayerVelocity, vocк clicaria em 004C908D, e assim vai com outras funзхes nativas. Apуs clicar, vocк verб o seguinte:
-Como vocк pode ver, existem vбrios subs_ (comeзos de sub-rotinas) em baixo de cada nome de funзгo. Cada um pertence a funзгo que estб acima. Nesse caso, clicaremos em sub_47F110, que pertence a SetPlayerFightingStyle. Apуs clicar, vamos ver o seguinte:
-Ao chegarmos a esse ponto, vamos pressionar F5 para gerar pseudo-cуdigo:
-O id de um RPC й Byte, ele estarб sempre dentro de uma sub-rotina, sendo unk_ ou um ъnico caractere como "J". Repetindo novamente, o RPC estarб em uma sub-rotina, NUNCA serб o valor de uma vбriavel no pseudo-cуdigo (ex: v9 = unk_4F5FB8). Na foto acima jб podemos ver aquilo que procuramos:
-Ai estarб nosso RPC, mas vocк deve se perguntar por que ele aparece em duas sub-rotinas. Isso, por que o RPC й mandado nгo sу para vocк, mas para todos os jogadores com o seu ID no primeiro parвmetro do BitStream, assim o seu estнlo de luta tambйm mudarб para os outros jogadores.
-Pode ser que vocк nгo encontre o RPC de primeira ao gerar o pseudo-cуdigo, mas й sу clicar nas outras sob-rotinas no pseudo-cуdigo, como "sub_44D8A0" e procurar, e ele estarб lб.
-Porйm, nгo acaba ai nгo. Vocк vai clicar duas vezes no RPC, e vocк verб o seguinte:
-Agora, й sу clicar na aba View > Open subviews > Hex dump, e entгo, vocк verб o seguinte:
-O nъmero hexadecimal 0x59 (89) й o ID do RPC da funзгo SetPlayerFightingStyle.
-Encontrar RPCs que vem do cliente ao servidor tambйm nгo й nada complicado. Vamos usar OnPlayerRequestClass como exemplo. Em strings window, pressione ALT + T e procure "OnPlayerRequestClass", clique no resultado e vocк verб o seguinte:
-Entгo, vamos clicar na sub-rotina que estб abaixo da sequкncia "DATA XREF", que nesse caso й sub_46DD30+45o, e vamos ver o seguinte:
-Podemos ver a sequкncia "CODE XREF" que й uma referкncia de cуdigo, diferente da sequкncia "DATA XREF" que й uma referкncia de dados. Vamos clicar na sub-rotina que vem apуs a referкncia de cуdigo (CODE XREF), e entгo vamos ver o seguinte:
-Podemos ver outra referкncia de cуdigo e uma sub-rotina apуs ela, vamos clicar nesta sub-rotina, e apуs, gerar o pseudo-cуdigo (F5):
https://i.imgur.com/SzEC7xy.png //Obs: Jб passei do limite de imagens, nгo posso utilizar o tag IMG
-O id de um RPC й Byte, ele estarб sempre dentro de uma sub-rotina, sendo unk_ ou um ъnico caractere como "Y". Repetindo novamente, o RPC estarб em uma sub-rotina, NUNCA serб o valor de uma vбriavel no pseudo-cуdigo (ex: v9 = unk_4F5FB8). Na foto acima jб podemos ver aquilo que procuramos: unk_4B523C.
-Clique duplo em unk_4B523C, e agora й sу clicar na aba View > Open subviews > Hex dump, e entгo, vocк terб o ID do RPC, que й 0x80 (128).