Ajuda - Busca - Membros - Calendário
Versão Completa: [duvida]Manipulando Valores no delphi
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Silva~
O progama e o seguinte e uma dll e essa dll , faz o seguinte , apos injetada num determinado processo eu quero listar todos os adress em 4 bytes de um determinado valor.
E listar num memo

Seria 2 botoes 1 memo e 1 edit e 1 radiobutton

Eu selecionaria a opçao 4 bytes e por exemplo botaria 1 no Edit e então scaneava , e iria aparecer os "adress" para aquele valor no memo.
Porem no caso tera 2 botoes para fazer o scaneamento , 1 sera para o 1 primeiro scan o First Scan o segundo sera apos o first scan que sera o Next Scan.
Eu sei que para fazer isso usarei PBYTE porem não sei qual linha de codigo que devo segui
Eu sei que e meio complicado , porem estou com algumas dificuldades.

abraços


Jhonas
Está meio confuso... e qual a finalidade disso ?
Silva~
E seria para jogos off lines do windows, tipo Pinball , para editar o valor do Score por exemplo

E mais para aprendizado , entende ?

No caso no programa eu selecionaria o processo

E daria scan no valor do Score do pinball , e acharia o adress para o valor , e editaria ele botando um value como 999999

entendeu ?


e obrigado pela ajuda jhonas
Jhonas
QUOTE
daria scan no valor do Score do pinball , e acharia o adress para o valor , e editaria ele botando um value como 999999


Veja esses posts

http://scriptbrasil.com.br/forum/index.php...st&p=567168

http://scriptbrasil.com.br/forum/index.php...st&p=566056

http://scriptbrasil.com.br/forum/index.php...ADPROCESSMEMORY

abraço
Silva~
No caso acima e mais para trainers , no caso agora , os trainers são feitos por DLL , não e mais quase usado Read and WriteProcess

E no meu caso não e um trainer , eu quero pelo processo captado lista os adress da memoria

Estou tentando usando VirtualAloc

Pois no caso sera necessario para obter os valores 4 bytes e listar os values 4 bytes de um determinado valor

Por exemplo 0

Ai ira listar os adress da memoria que contenha esse valor , e ir diminuido ate achar o menor valor
Jhonas
Acho que vi alguma coisa a respeito num do post do Churc .. procure pelos posts dele

abraço
Silva~
CODE
var
Form1: TForm1;
canberead:MEMORY_BASIC_INFORMATION;
SystemInfo: SYSTEM_INFO;
startaddress,endaddress,eaddress:dword;
PageSize:cardinal;
temp:dword;
data:Array[0..004000] of dword;
scan:integer;
PidHandle:Thandle;
PidID : integer;
Const
ProgramName='PINBALL.EXE';

function GetProcessID(Const ExeFileName: string; var ProcessId: integer): boolean;

implementation

{$R *.dfm}

function GetProcessID(Const ExeFileName: string; var ProcessId: integer): boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := false;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do begin
if (StrIComp(PChar(ExtractFileName(FProcessEntry32.szExeFile)), PChar(ExeFileName)) = 0)
or (StrIComp(FProcessEntry32.szExeFile, PChar(ExeFileName)) = 0) then begin
ProcessId:= FProcessEntry32.th32ProcessID;
result := true;
break;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if GetProcessID(ProgramName, PidId) then
begin
startaddress:=($00400000);
endaddress:=($7FFFFFFF);
eaddress:=startaddress;
GetSystemInfo(SystemInfo);
PageSize:=Systeminfo.dwPageSize;
scan:=0;
PidHandle := OpenProcess(PROCESS_ALL_ACCESS,False,PidId);
repeat
if ReadProcessMemory(PidHandle, Pointer(eaddress),@data,PageSize,temp)=false then
begin
Virtualqueryex(PidHandle,pointer(eaddress),canberead,PageSize);
ReadProcessMemory(PidHandle, Pointer(canberead.BaseAddress),@data,canberead.RegionSize,temp);
end;
repeat
if data[scan]=strtoint(value.Text) then
begin
Foundlist2.InsertRow(inttostr(scan+eaddress),Edit1.Text,true);
end;
scan:=scan+1;
until scan=PageSize+1;
until eaddress=endaddress+1;

end;

end;
end;


[Warning] Unit1.pas(87): Comparing signed and unsigned types - widened both operands
[Error] Unit1.pas(89): Undeclared identifier: 'InsertRow'

Estou com esses problemas

Ve se voce concorda com codigo acima

abraços

Jhonas
CODE
if data[scan]=strtoint(value.Text) then


[Advertindo] Unit1.pas(87): Comparando tipos com sinal e sem sinal - alargado ambos os operandos

data é um tipo dword que voce esta tentanto comparar com uma conversão de texto para inteiro


CODE
Foundlist2.InsertRow(inttostr(scan+eaddress),Edit1.Text,true);


[Erro] Unit1.pas(89): identificador não declarado: ' InsertRow'

está faltando a uses para Foundlist2, pois a propriedade InsertRow não foi encontrada

abraço
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.