Ir para conteúdo
Fórum Script Brasil
  • 0

[duvida]Manipulando Valores no delphi


Silva~

Pergunta

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

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...