
16.07.2010, 15:41
|
 |
Активный
|
|
Регистрация: 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;
|