[Tutorial] Encontrando os IDs de RPCs, com IDA Pro.
#1

• 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.

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.
• Comeзando com o IDA Pro.
-Ao iniciar o IDA pro, vocк verб as seguintes opзхes:



-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:

• Encontrando RPCs que vem do servidor ao cliente - Outcoming RPCs.
Se vocк chegou aqui, vamos nos certificar que vocк jб seguiu os passos em "Comeзando com o IDA Pro.".

-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 .
• Encontrando RPCs que vem do cliente ao servidor - Incoming RPCs.
-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).
Reply
#2

Obrigado cavalheiro! + REP
Reply
#3

Um muito bom tutorial.
Reply
#4

Muito bom
Reply
#5

Um tutorial excepcional, meu amigo. Sem palavras!
Reply
#6

Sensacional Jelly. Acho importante deixar o tutorial do kurta999 (https://sampforum.blast.hk/showthread.php?tid=599574) sobre atualizar plugins que usam memory hacking, o procedimento й bem parecido com o explicado aqui, mas com alteraзхes no final.
Reply
#7

Quote:
Originally Posted by renatog
Посмотреть сообщение
Sensacional Jelly. Acho importante deixar o tutorial do kurta999 (https://sampforum.blast.hk/showthread.php?tid=599574) sobre atualizar plugins que usam memory hacking, o procedimento й bem parecido com o explicado aqui, mas com alteraзхes no final.
Aqui ela mantйm o foco apenas no ID de RPCs, no do kurta ele explica sobre os endereзos de memуria, e sim atй a parte do pseudocуdigo o tutorial й o mesmo

@Topic Muito bem Jelly, mita dos raknet.
Reply
#8

Sensacional
Reply
#9

Bom tutorial, Jelly23.
Reply
#10

Conteъdo atualizado. Agora tambйm explicando como conseguir IDs de RPCs que vem do cliente ao servidor.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)