benedict 0 #1 Posted May 12, 2009 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! Share this post Link to post Share on other sites
theflammer 0 #2 Posted July 27, 2009 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) Share this post Link to post Share on other sites
Nvr 0 #3 Posted January 2, 2011 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*) Share this post Link to post Share on other sites
Conde2 0 #4 Posted January 3, 2011 (edited) 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 ? Edited January 3, 2011 by Conde2 Share this post Link to post Share on other sites