Ir para conteúdo
Entre para seguir isso  
benedict

Dll Inject no Tibia

Recommended Posts

benedict    0
benedict

Primeiro crie uma unit (para sempre que for usar esse codigo não precisar digita-lo novamente).

 

na unit, na parte interface declare:

uses

Windows, Messages;

 

var

PHandle:HWND;

IDProcess:cardinal;

NBR:cardinal;

PID:cardinal;

 

const

ClassName = 'TibiaClient';

 

Procedure Hook;

 

procedure WriteMemStr(Address: Integer; Value:String);

function ReadMemStr(Address: Integer): String;

procedure WriteMemInt(Address: Integer; Value: Integer);

function ReadMemInt(Address: Integer): Integer;

procedure WriteMemByte(Address: Integer; Value: Byte);

function ReadMemByte(Address: Integer): Byte;

procedure WriteMemBytes(Address: Integer; Value: Integer; Bytes: Integer);

 

Depois na parte de implementação da unit voçê irá colocar os conteúdos dos métodos (WriteMemStr,ReadMemStr e etc);

 

Procedure Hook;

begin

PHandle := FindWindow(ClassName, nil);

GetWindowThreadProcessID(PHandle, @PID);

IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, PID);

end;

 

procedure WriteMemStr(Address: Integer; Value:String);

var

TVal : Byte;

i: integer;

begin

for i:=1 to Length(Value) do

begin

TVal:=ord(Value);

WriteProcessMemory(IDProcess, Ptr(Address+i-1),@TVal,1,NBR);

if i = Length(Value) then

begin

TVal:=0;

WriteProcessMemory(IDPRocess, Ptr(Address+i),@TVal,1,NBR);

end;

end;

end;

 

function ReadMemStr(Address: Integer): String;

var

i, Value : Byte;

begin

Result:='';

i:=0;

repeat

ReadProcessMemory(IDProcess, Ptr(Address+i), @Value,1, NBR);

Result:=Result+char(Value);

inc(i);

until Value=0;

Result:=Copy(Result,1,Length(Result)-1);

end;

 

procedure WriteMemInt(Address: Integer; Value: Integer);

begin

WriteProcessMemory(IDProcess, Ptr(Address), @Value, 4, NBR);

end;

 

function ReadMemInt(Address: Integer): Integer;

var

value:integer;

begin

ReadProcessMemory(IDProcess, Ptr(Address), @Value, 4, NBR);

Result:=value;

end;

 

procedure WriteMemByte(Address: Integer; Value: Byte);

begin

WriteProcessMemory(IDProcess, Ptr(Address), @Value, 1, NBR);

end;

 

function ReadMemByte(Address: Integer): Byte;

var

value:integer;

begin

ReadProcessMemory(IDProcess, Ptr(Address), @Value, 1, NBR);

Result:=value;

end;

 

procedure WriteMemBytes(Address: Integer; Value: Integer; Bytes: Integer);

begin

WriteProcessMemory(IDProcess, Ptr(Address), @Value, Bytes, NBR);

end;

Agora voce deve salva-la. Sua unit agora pode ser usada em qualquer programa que voce projetar, basta declara-la na parte unit do programa que for usa-la.

Pergunta:

AH como vo declarar essa unit no meu projeto?

Resposta

Basta colocar o nome dela (sem a extenção .pas em uses), por exemplo:

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, memmory;

no meu caso eu salvei ela com nome memmory.

 

Agora crie uma dll qualquer, com quais quer metodos, que serão usados no cliente tibia. Vo botar um exemplo:

library MinhaDll;

uses

SysUtils,

Classes,

Dialogs,

Windows;

{$R *.res}

 

begin

Showmessage('Dll injection deu certo!');

end.

Agora com um novo projeto e com o nome da unit declarada em uses, adicione o metodo:

procedure InjectDll(PID: dword; DLL: pChar);

var

BytesWritten, hProcess, hThread, TID: Cardinal;

Parameters: pointer;

pThreadStartRoutine: Pointer;

begin

hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);

Parameters := VirtualAllocEx( hProcess, nil, Length(DLL)+1, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);

WriteProcessMemory(hProcess,Parameters,Pointer(DLL),Length(DLL)+1,BytesWritten);

pThreadStartRoutine := GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA');

hThread := CreateRemoteThread(hProcess, nil, 0, pThreadStartRoutine, Parameters, 0, TID);

CloseHandle(hProcess);

end;

Agora basta usar o conteudo que voce boto na Dll.

vo da um exeplo:

No evento onClick de um button

hook;

InjectDll(PID,pchar(ExtractFilePath(Application.ExeName)+'MinhaDll.dll'));

 

Dai vai sua imaginação em colocar outros metodos na sua dll e com outros eventos, como o keyloop(para se o cara pressionar alguma tecla)...

Espero que gostem!

Compartilhar este post


Link para o post
Compartilhar em outros sites
theflammer    0
theflammer

Excelente trabalho, mas gostaria de saber qal a finalidade dessa DLL, e tipo isso seria bom para facilitar a manipulação de ots sem mudar os arquivos do ot, e sim mudando direto na dll... Mas dll inject no Tibia, acho q num serve pra nada....(Y)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Nvr    0
Nvr
Excelente trabalho, mas gostaria de saber qal a finalidade dessa DLL, e tipo isso seria bom para facilitar a manipulação de ots sem mudar os arquivos do ot, e sim mudando direto na dll... Mas dll inject no Tibia, acho q num serve pra nada....(Y)

 

Acredito que isso se utiliza caso se queira se fazer algum utilitario,um programa que mostra quanta exp falta,ou algo do tipo.

(desculpe se estiver falando merd*)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Conde2    0
Conde2
Excelente trabalho, mas gostaria de saber qal a finalidade dessa DLL, e tipo isso seria bom para facilitar a manipulação de ots sem mudar os arquivos do ot, e sim mudando direto na dll... Mas dll inject no Tibia, acho q num serve pra nada....(Y)

 

 

Claro que serve cara... você realmente não sabe o que está falando :palm:

Com DLL inject você consegue criar novos menus, chamar novas funções, criar novos atalhos no jogo e muito mais, basta você saber o que está fazendo !!!

 

@benedict

Você que criou este tutorial ??

Se sim poderia me passar seu msn para agente conversar e você me dar umas dicas??

 

funciona para qual versão do dev??? 7 ou 6 ?

Editado por Conde2

Compartilhar este post


Link para o post
Compartilhar em outros sites
haxyy    0
haxyy

Muito bom!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×