Показать сообщение отдельно
  #6  
Старый 16.07.2010, 15:41
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

вот попробуй, на досуге написал:
Код:
function FindString(PID, RangeFrom, RangeTo: Cardinal;
  AStr: AnsiString): Cardinal;
const
  bufSz = 256;
var
  prc: Cardinal;
  readed: Cardinal;
  oldProt: Cardinal;
  buf: Pointer;
  i, j, strLen: Cardinal;

  function CompProcessMem(AMem, AComp: Pointer; ASz: Cardinal): Boolean;
  var
    i: Integer;
    buf: Pointer;
    oldProt: Cardinal;
  begin
    Result := true;
    buf := GetMemory(ASz);
    try
      VirtualProtectEx(prc, AMem, ASz, PAGE_READONLY, oldProt);
      ReadProcessMemory(prc, AMem, buf, ASz, readed);

      for i:=0 to ASz-1 do
      begin
        if(PByte(Cardinal(buf)+i)^<>PByte(Cardinal(AComp)+i)^)then
        begin
          Result := false;
          Exit;
        end;
      end;

      VirtualProtectEx(prc, AMem, ASz, oldProt, oldProt);
    finally
      FreeMem(buf, ASz);
    end;
  end;

begin
  Result := 0;
  strLen := Length(AStr);
  if(RangeTo-RangeFrom<=0)or(strLen<=0)then
    Exit;

  prc := OpenProcess(PROCESS_VM_READ, false, PID);
  if(prc=0)then
    Exit;

  buf := GetMemory(bufSz);
  try
    i := RangeFrom;

    repeat
      VirtualProtectEx(prc, Pointer(i), bufSz, PAGE_READONLY, oldProt);

      ReadProcessMemory(prc, Pointer(i), buf, bufSz, readed);

      for j:=0 to readed-1 do
      begin
        if(PByte(Cardinal(buf)+j)^=PByte(@AStr[j])^)and
          (CompProcessMem(Pointer(Cardinal(buf)+j), @AStr[j], strLen))then
        begin
          Result := Cardinal(buf)+j;
          Exit;
        end;
      end;

      VirtualProtectEx(prc, Pointer(i), bufSz, oldProt, oldProt);
      Inc(i, readed);
    until(i>=RangeTo);
  finally
    FreeMem(buf, bufSz);
  end;
end;
ищет строку в процессе, там заофсетишь и получишь своё магическое число
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием