Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá pessoal, apartir do update 9.1, a Cipsoft botou um novo sistema, que agora os programadores precisam pegar a base do endereço para o seu bot funcionar perfeitamente em computadores com sistemas operacionais Windows 7 e Windows Vista.

Bom, foi um sistema falho...

Declare nas uses:

PsAPI
Declare a função necessaria para pegar a base do endereço:
function GetTibiaBaseAddress(ProcessID: Cardinal): Pointer;

var

  Modules: Array of HMODULE;

  cbNeeded, i: Cardinal;

  ModuleInfo: TModuleInfo;

  ModuleName: Array [0 .. MAX_PATH] of Char;

  PHandle: THandle;

begin

  Result := nil;

  SetLength(Modules, 1024);

  PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, FALSE,

    ProcessID);

  if (PHandle <> 0) then

    begin

	  EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE),

	    cbNeeded);

	  SetLength(Modules, cbNeeded div SizeOf(HMODULE));

	  for i := 0 to Length(Modules) - 1 do

	    begin

		  GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)

		    );

		  if AnsiCompareText('Tibia.exe', ModuleName) = 0 then

		    begin

			  GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf

				  (ModuleInfo));

			  Result := ModuleInfo.lpBaseOfDll;

			  CloseHandle(PHandle);

			  Exit;

		    end;

	    end;

    end;

end;
Declare as variaveis:
  PH: THandle;

  PID, Thid: Dword;

  Offset: Integer;

  TibiaH: THandle
Declare a função para ler os endereços de memoria:
function ReadInteger(Address: Integer): Integer;

var

  value: Integer;

  ler: Dword;

begin

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);

  Result := value;

end;
Declare a função para pegar o ProcessID:
function ProcessID: Integer;

begin

  TibiaH := FindWindow('TibiaClient', nil);

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  Result := PID;

end;
Pronto, agora já podemos burlar o sistema da Cipsoft. Agora um simples exemplo de como você deve usar: Declare as consts:
const

  adrXOR = $7ADFD0;

  adrMyHP = $943000;

  adrMyMana = $7AE024;
Agora, declare a função para retornar o Health do seu character:
function PlayerHealth: Integer;

var

  HP: Integer;

  uXor: Integer;

begin

  Offset := Integer(GetTibiaBaseAddress(ProcessID));

  HP := ReadInteger((adrMyHP + Offset) - $400000);

  uXor := ReadInteger((adrXOR + Offset) - $400000);

  Result := HP xor uXor;

end;
Função para pegar a Mana do seu character:
function PlayerMana: Integer;

var

  Mana: Integer;

  uXor: Integer;

begin

  Offset := Integer(GetTibiaBaseAddress(ProcessID));

  Mana := ReadInteger((adrMyMana + Offset) - $400000);

  uXor := ReadInteger((adrXOR + Offset) - $400000);

  Result := Mana xor uXor;

end;
Vou deixar como o meu .pas ficou:

Qualquer duvida, só postar.

{ ---------------------------

    Feito por Kimoszin

    www.TibiaKing.com

---------------------------- }


unit uMain;


interface


uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, PsAPI, StdCtrls;


type

  TForm1 = class(TForm)

    lbHealth: TLabel;

    Button1: TButton;

    lbMana: TLabel;

    procedure Button1Click(Sender: TObject);

    private

    public

  end;


var

  Form1: TForm1;

  { Variaveis }

  PH: THandle;

  PID, Thid: Dword;

  Offset: Integer;

  TibiaH: THandle;


implementation


{$R *.dfm}


{ Endereços de Memoria Tibia 9.53 }

const

  adrXOR = $7ADFD0;

  adrMyHP = $943000;

  adrMyMana = $7AE024;


{ Função para ler números (Int)eiros }

function ReadInteger(Address: Integer): Integer;

var

  value: Integer;

  ler: Dword;

begin

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  ReadProcessMemory(PH, Ptr(Address), @value, 4, ler);

  Result := value;

end;


{ Função para pegar o número do processo do Tibia }

function ProcessID: Integer;

begin

  TibiaH := FindWindow('TibiaClient', nil);

  Thid := GetWindowThreadProcessId(TibiaH, @PID);

  PH := OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

  Result := PID;

end;


{ Função para pegar o endereço base do Tibia }

function GetTibiaBaseAddress(ProcessID: Cardinal): Pointer;

var

  Modules: Array of HMODULE;

  cbNeeded, i: Cardinal;

  ModuleInfo: TModuleInfo;

  ModuleName: Array [0 .. MAX_PATH] of Char;

  PHandle: THandle;

begin

  Result := nil;

  SetLength(Modules, 1024);

  PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, FALSE,

    ProcessID);

  if (PHandle <> 0) then

    begin

	  EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE),

	    cbNeeded);

	  SetLength(Modules, cbNeeded div SizeOf(HMODULE));

	  for i := 0 to Length(Modules) - 1 do

	    begin

		  GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)

		    );

		  if AnsiCompareText('Tibia.exe', ModuleName) = 0 then

		    begin

			  GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf

				  (ModuleInfo));

			  Result := ModuleInfo.lpBaseOfDll;

			  CloseHandle(PHandle);

			  Exit;

		    end;

	    end;

    end;

end;


{ Função que retornar o Health(Vida) do personagem }

function PlayerHealth: Integer;

var

  HP: Integer;

  uXor: Integer;

begin

  Offset := Integer(GetTibiaBaseAddress(ProcessID));

  HP := ReadInteger((adrMyHP + Offset) - $400000);

  uXor := ReadInteger((adrXOR + Offset) - $400000);

  Result := HP xor uXor;

end;


{ Função que retornar a Mana do personagem }

function PlayerMana: Integer;

var

  Mana: Integer;

  uXor: Integer;

begin

  Offset := Integer(GetTibiaBaseAddress(ProcessID));

  Mana := ReadInteger((adrMyMana + Offset) - $400000);

  uXor := ReadInteger((adrXOR + Offset) - $400000);

  Result := Mana xor uXor;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

{ Modo de usar }

  lbHealth.Caption := 'Health: ' + IntToStr(PlayerHealth);

  lbMana.Caption := 'Mana: ' + IntToStr(PlayerMana);

end;


end.

Editado por Kimoszin (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 3 weeks later...

.

Editado por yurinho190 (veja o histórico de edições)

"Cada um de nós é livre para acreditar no que quiser, e minha resposta mais simples para isso é: Deus não existe. Ninguém criou o universo e ninguém comanda a nossa fé."

-Stephen Hawking

stephen-hawking-250x200.jpg

Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 4 months later...

Se eu utilizar o Delphi 7 para fazer este programa, funcionará ou será necessário em Delphi superior ?

Funciona perfeitamente no Delphi 7

Link para o post
Compartilhar em outros sites

Funcionou beleza!

Mas, como eu faço para fazer uma leitura em tempo real ?

Do jeito que o código está, ele só faz a leitura ao clicar no botão.

Eu tentei usar while, fazendo um loop infinito ao clicar no botão, mas trava!

Abaixo:

procedure TForm1.Button1Click(Sender: TObject);

var

x: integer;

begin

x := 1;

while x = 1 do

begin

lbHealth.Caption := 'Health: ' + IntToStr(PlayerHealth);

lbMana.Caption := 'Mana: ' + IntToStr(PlayerMana);

end;

end;

end.

No aguardo!

Link para o post
Compartilhar em outros sites

Há como identificar uma criatura que está te atacando, e com isto atacá-la ?

Já estou raciocinando sobre isto há 1 dia e não consegui enxergar ainda hehe.. Alguém poderia clarear um pouco minhas ideias ?

No aguardo!

Link para o post
Compartilhar em outros sites

Como eu faço para mostrar a quantidade de experiência que eu tenho no char ?

A função para encontrar o número é igual as funções de health e mana ?

Encontrei os endereços para a última versão do tibia neste site, mas na lista não tem o endereço para experiência.. não encontrei..

http://www.blackdtools.com/forum/showthread.php?59794-9-8-Blackd-Tibia-addresses-9-8

;]

Link para o post
Compartilhar em outros sites
  • 1 month later...

Esta dando erro aqui:

ReadProcessMemory(PH, ptr(Address), @value, 4, ler);

[dcc32 Error] Unit1.pas(93): E2033 Types of actual and formal var parameters must be identical

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 4 months later...

No Delphi xe2 tbm da isso:

ReadProcessMemory(PH, ptr(Address), @value, 4, ler);

[dcc32 Error] Unit1.pas(93): E2033 Types of actual and formal var parameters must be identical

@Edit:

No Delphi 7 funciona normal. o.O

@EDIT 2~

Não consigo retornar o health/mana do player, já atualizei os address. :(

Alguém sabe o por que ?

Editado por Ti0Branc0 (veja o histórico de edições)

"Perdoamos quando não sentimos mais necessidade de usar as mágoas antigas como garantia contra alguém."

Jacqueline Collodo Gomes

"As vezes construímos sonhos em cima de grandes pessoas.

O tempo passa e descobrimos que grandes mesmo eram os sonhos e as pessoas pequenas demais para torná-los reais!"

Bob Marley

Twitter:

@ewertont

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Under
      A CipSoft acaba de anunciar uma grande novidade: a empresa agora também será responsável pelo desenvolvimento e operação do clássico The Settlers Online! 
      O time que já cuidava do jogo seguirá dedicado ao projeto, mas agora diretamente do novo escritório da CipSoft em Düsseldorf, na Alemanha.
       
      Pra quem não conhece, The Settlers Online é um jogo com uma base de jogadores muito fiel e engajada — algo que a CipSoft conhece bem graças à comunidade Tibiana que, há décadas, mostra paixão, comprometimento e amor pelo jogo. 
      O mais importante:
      É incrível ver a CipSoft crescendo e levando seu espírito de comunidade para novos horizontes, sem esquecer de onde veio e quem está com ela há tantos anos. 
      Anúncio oficial no fórum do Tibia
      Site oficial de The Settlers Online (Brasil)
       
    • Por Under
      Apresentando o Tibia-IA: A IA para Desenvolvimento de Servidores Tibia! 
       O que é o Tibia-IA?
      Um modelo de IA especializado para Tibia! Ele está atualmente em teste gratuito, e eu adoraria que vocês o experimentassem. Basta acessar https://ai.tibiaking.com, criar uma conta e começar a usar totalmente de graça! 
       Versão Experimental Fechada
      Atualmente, algumas funcionalidades ainda estão em desenvolvimento. No momento, apenas a geração de scripts está disponível para o público.
      Se encontrarem qualquer problema nos scripts gerados, me avisem! Vamos juntos construir a IA mais poderosa para ajudar no desenvolvimento de servidores Tibia!  
      Contato direto discord : underewar
       Acesse agora: https://ai.tibiaking.com
       Como funciona?
       Geração automática de scripts LUA para TFS  Suporte a diferentes eventos, criaturas, NPCs, magias, etc.  Ferramenta em constante evolução para aprimorar o desenvolvimento Novidades em breve confira no site. O acesso ao Tibia-IA está disponível para testes GRATUITOS! 
      Basta criar uma conta em: https://ai.tibiaking.com
      Utilize a IA para gerar seus scripts de forma simples e rápida
      Envie feedbacks para ajudarmos a tornar a ferramenta ainda melhor!

      Problemas relatar diretamente no meu discord pessoal : underewar
       
       
    • Por Raito
      Eu e mais 3 pessoas gostariamos de criar um digitibia alguem poderia me ajudar disponibilizando uma base que esteja funcionando, as unicas que eu encontrei nao funcionam. se alguem tiver para disponibilizar eu agradesço muito.
      meu email é 
      [email protected]
    • Por BTitan
      Reviva a nostalgia do Tibia 8.6 com um toque das novidades modernas, mantendo a essência clássica que você ama. Nosso mapa é limpo e otimizado, perfeito para wars intensas e estratégicas.
      Com mais de 100 áreas de caça, vocações equilibradas e eventos automáticos diários, garantimos diversão sem limites para todos os jogadores.
       
      ACC Manager: 1/1
      IP: go.baiaktitan.com
      https://www.baiaktitan.com
       
      Principais informações:
       
      Dedicado 24 horas sem lag Attack Speed moderado Cast System DODGE! CRITICAL! REFLECT! Upgrade Weapon Forge System Autoloot Anti Rollbacks Eventos exclusivos (Battle Royale, DOTA, Team Battle, entre outros...) Servidor integrado com Telegram (Contato direto com ADM) Cliente próprio (com novos itens, montarias e outfits) Mapa Baiak, modificado exclusivamente para o PvP Servidor otimizado, suportando mais de 1.000 players online  
      »» EXP Rate: 200x
      »» Skill Rate: 20x
      »» Magic Rate: 10x
      »» Loot Rate: 3x
       
      Aguardamos por você!
    • Por Nogard
      Não deixe seu evento de Natal para última hora, faltam apenas 4 dias. 

      Aproveite as sprites com desconto no site: https://otsprites.com
       
       
       

       

       
       
       
  • Estatísticas dos Fóruns

    96825
    Tópicos
    519565
    Posts
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo