Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизКак узнать адресс строки в чужом приложении? Найти похожие ветки
← →
serd_hhc (2002-10-27 09:42) [0]Адрес должен быть integer
← →
Anatoly Podgoretsky (2002-10-27 09:46) [1]Ее адрес 9834034
← →
serd_hhc (2002-10-27 09:48) [2]А если строка "FJGHDFHJDFHJDF", и находиться в edite?
← →
serd_hhc (2002-10-27 10:31) [3]НУ всё таки...
← →
Alex4444444444 (2002-10-27 10:59) [4]Address v chuzhom prilozhenii ne imeet smysla. U kazhdoj programmy svoe addressnoe prostranstvo.
← →
KSergey (2002-10-27 13:41) [5]Как верно указал > Alex4444444444 (27.10.02 10:59) даже если этот адрес удасться узнать, то никакого толку от этого не будет. Т.к. это адрес в адресном протранстве другого приложения, в контексте другого приложения это будет просто цифра. Что толку?
Может лучше объяснить что же надо на самом деле? Для чего этот адрес необходимо узнать? Или это самоцель?
← →
Anatoly Podgoretsky (2002-10-27 13:51) [6]И одна цифра от другой не отличается, так что адрес 9834034 вполне подходит для этой роли
← →
serd_hhc (2002-11-22 06:02) [7]Вот это то мне и нужно! Это число! Это то, о чём я спрашиваю, и что я ищу! Так как найти это ЧИСЛО?
← →
serd_hhc (2002-11-22 06:04) [8]Так вот это мне и надо! Это чёртово число! Так скажите же , как его найти?
← →
Fantasist (2002-11-22 07:50) [9]
> Так вот это мне и надо! Это чёртово число! Так скажите же
> , как его найти?
Внимательно читаешь символы с начала строки во втором постинге сверху. (Anatoly Podgoretsky © (27.10.02 09:46)) В этом постинге всего одна буква "с". Доходишь до нее, пропускаешь один символ после нее (пробел) и после этого записываешь на бумажку каждый символ который ты читаешь. Всего их будет 7. Далее открываешь Delphi и объявляешь в нем переменную типа Integer вот так:
var
EtoChertovoChislo:Integer;
дальше после begin записываешь имя этой переменной, оператор присваивания (":=") вот так:
begin
EtoChertovoChislo:=
и после символа равно ("=") записываешь цифры которые ты записал на бумажку в том же порядке в котором они там записанны. Как только ты скомпилируешь программу, то считай, что ты EtoChertovoChislo нашел.
← →
paul_shmakov (2002-11-22 12:48) [10]я пример уже два раза постил :) ищет значение размера DWORD в чужом процессе.
//
// Поиск значения типа DWORD в указанном процессе
// paul_shmakov@mail.ru
//
program search;
{$APPTYPE CONSOLE}
uses Windows, SysUtils;
var
ProcessID: DWord;
ProcessHandle: THandle;
Mbi: TMemoryBasicInformation;
Addr: DWord;
Value: DWord;
I: Cardinal;
Buf: PChar;
BytesRead: DWord;
begin
if ParamCount < 2 then
begin
WriteLn("Usage: search.exe processid value");
Exit;
end;
ProcessID := StrToInt(ParamStr(1));
WriteLn("Process id: " + IntToStr(ProcessID));
Value := StrToInt(ParamStr(2));
WriteLn("Value to search: " + IntToStr(Value));
//
// Открываем процесс
//
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ or
PROCESS_VM_OPERATION, false, ProcessID);
if ProcessHandle <> 0 then
try
Addr := 0;
//
// Перечисляем все регионы виртуальной памяти процесса
//
while VirtualQueryEx(ProcessHandle, Pointer(Addr), Mbi, SizeOf(Mbi)) <> 0 do
begin
// Uncomment чтобы увидеть список регионов, найденых в адресном пространстве
// WriteLn("region: " + IntToHex(Integer(Mbi.BaseAddress), 8) +
// " size: " + IntToStr(Mbi.RegionSize));
//
// Если региону выделена память, и регион не является "сторожевым" (как вершина стека),
// то читаем этот регион
//
if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
begin
//
// Это демонстрационная программа, поэтому здесь выделяется буфер под весь регион.
// Регион может быть достаточно большим, поэтому лучше читать его блоками для экономии
// памяти. Но здесь для простоты алгоритма вся оптимизация похерена.
//
GetMem(Buf, Mbi.RegionSize);
try
//
// Читаем весь регион в выделенный буфер
//
if ReadProcessMemory(ProcessHandle, Mbi.BaseAddress, Buf,
Mbi.RegionSize, BytesRead) then
begin
//
// Ищем значение типа DWORD в буфере
//
for I := 0 to BytesRead - SizeOf(Value) do
begin
if PDWord(@Buf[I])^ = Value then
// Найдено, выводим
WriteLn("Value " + IntToStr(Value) + " found at " +
IntToHex(Integer(Cardinal(Mbi.BaseAddress) + I), 8));
end;
end
else
WriteLn("Failed to read process memory " + IntToStr(GetLastError));
finally
FreeMem(Buf);
end;
end;
// Вычисляем адрес следуюшего региона
Addr := Addr + Mbi.RegionSize;
end;
finally
CloseHandle(ProcessHandle);
end
else
WriteLn("Failed to open process");
end.
а вот программа, в которой ведем поиск для примера:
program someprog;
{$APPTYPE CONSOLE}
uses SysUtils;
var
SomeValue: Integer;
begin
SomeValue := 12345;
WriteLn("One variable of this program has a value " + IntToStr(SomeValue));
WriteLn("Press any key to exit");
ReadLn;
end.
вот только зачем это нужно?
← →
Polevi (2002-11-22 14:07) [11]SetTimer(EditVChugomPrilogenii.Handle,1,1000,EtoChertovoChislo) он хочет видимо
← →
Serd_hhc (2002-11-22 22:08) [12]Объясню, зачем,
Ищется строка в чужом едите, по таймеру (от адреса строки) [в ЕДИТе - бинарный код программы] зпускается этот код. Вот зачем нужен адрес именно строки в чужом приложении!
← →
Morfein (2002-11-24 20:28) [13]2 Serd_hhc : А ты не думал, что строки этой может в
адресном пространстве того самого другого приложения
и не быть?
Тексту, ассоциированному с окном, необязательно храниться
в пользовательском приложении...
← →
AlexandrRya (2002-11-24 22:27) [14]Пояснение: Serg_hhc вроде хочет воспользоваться уязвимостью системы в очереди сообщений. Т.к. система (NT,2k,XP)не проверяет, от кого пришло сообщение (пр 9x и Me я вообще не говорю, т.к. там не понятия привилегий). А, послав WM_TIMER окну с более высокими
привилегиями мы можем заставить выполнить любой код с чужими привилегиями. Оригинал лежал здесь: http://security.tombom.co.uk/shatter.html
← →
mumu (2002-11-25 07:41) [15]>AlexandrRya (24.11.02 22:27)
>Пояснение: Serg_hhc вроде хочет воспользоваться уязвимостью >системы в очереди сообщений...
реализация на C http://serbot.narod.ru/
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c