Чужое окно

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JIeT4uK
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 23.03.2003 (Вс) 4:48
Откуда: Украина, Донецк

Чужое окно

Сообщение JIeT4uK » 17.07.2004 (Сб) 7:46

Как прочитать текст написанный на чужом окне????

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 17.07.2004 (Сб) 9:41

Для начала необходимо узнать его, чужого окна, hWnd. И потом, что за текст? :?:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 17.07.2004 (Сб) 13:20

Если ты хочеш узнать текст в чужом текстбоксе, то вот пример.
Вложения
GETwintext.rar
(1.91 Кб) Скачиваний: 164
الفيجوال بيسك الرابح

JIeT4uK
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 23.03.2003 (Вс) 4:48
Откуда: Украина, Донецк

Сообщение JIeT4uK » 18.07.2004 (Вс) 1:25

примерчик нормальный, а как мне прочитать из label из не из первого попавшегося а из конкретного???

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 18.07.2004 (Вс) 1:59

Юзай EnumChildWindows для получения всех доступных елементов окна.
как мне прочитать из label

А вот из label вытащит нечего не выйдет ибо он не является полноценным елементом управления :? , и потому не имеет хендла, также как и image.
الفيجوال بيسك الرابح

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 18.07.2004 (Вс) 2:56

Добавлю свой вопрос, как мне кажется, близкий по теме: а как вообще (алгоритм?) определить (все) переменные "чужого" окна/процесса?
С уважением, Approximator.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.07.2004 (Вс) 11:27

Переменные - только искать по их значениям. Ну или SoftIce...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 19.07.2004 (Пн) 3:42

GSerg писал(а):Переменные - только искать по их значениям. Ну или SoftIce...

"Не верю..." :) Не, правда... а как это делает ArtMoney? Ему гришь "шукай все без разбору" - находит, усе находит... должён быть какой-то алгоритм. У меня есть одна идея... Вроде должен быть способ достучаться до области памяти процесса, выделяемой под перменные этого процесса. Область данных, должна предшествовать, области кода. Как достучаться, кого "спросить"? :)
С уважением, Approximator.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.07.2004 (Пн) 9:41

Approximator, ты же не путая теплое с мягким :)
Где VB6 (или проги, на нем написанные) и где SoftICE. В частности, SoftICE устанавливает низкоуровневый драйвер, через который и происходит отладка
Lasciate ogni speranza, voi ch'entrate.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 19.07.2004 (Пн) 10:12

Approximator писал(а):Вроде должен быть способ достучаться до области памяти процесса, выделяемой под перменные этого процесса.

Слава Богу (и Microsoft), это сделать очень трудно (в прикладном программировании). Это спасает всех нас от очень большого количества случайных и преднамеренных крушений системы 8)

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 20.07.2004 (Вт) 4:12

alibek писал(а):Approximator, ты же не путая теплое с мягким :)
Где VB6 (или проги, на нем написанные) и где SoftICE. В частности, SoftICE устанавливает низкоуровневый драйвер, через который и происходит отладка


Ну, это всё же вопрос не языка программирования, а именно доступа.
На кой фиг иначе нужны функции (KERNEL32.DLL):
Код: Выделить всё
DebugActiveProcess
DebugActiveProcessStop
DebugBreak
DebugBreakProcess
DebugSetProcessKillOnExit
GetProcessHeap


NTDLL.DLL:

Код: Выделить всё
CsrProbeForRead
CsrProbeForWrite
DbgUiDebugActiveProcess
DbgBreakPoint
DbgSetDebugFilterState




и т.д. Мне просто было интересно. Может, из больших людей и шаманов кто знает, как это делается функционально (в винде достаточно библиотек для этого безо всяких SoftIce'ов)? Если никто не знает, то это вовсе не озачает, что такое не возможно. Функционально возможности васика ограниченны только тем "драйвером", который им пользуется.
С уважением, Approximator.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.07.2004 (Вт) 12:43

Approximator писал(а):Добавлю свой вопрос, как мне кажется, близкий по теме: а как вообще (алгоритм?) определить (все) переменные "чужого" окна/процесса?

Ещё можно использовать GetDlgCtrlID

Public Declare Function GetDlgCtrlID Lib "user32" Alias "GetDlgCtrlID" (ByVal hwnd As Long) As Long
Это по Hwnd при переборе EnumChildWindow
После этого мы имеем ID контрола.

Public Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Здесь по ID контрола мы можем получить текст.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 20.07.2004 (Вт) 13:18

А можно вместо SoftIce использовать проще утилитку например Password_Checker, вот описание:
Предназначен, главным образом, для изучения содержимого текстовых элементов управления (edit box-ов), в которых все буквы заменены одним символом. Такие элементы чаще всего содержат пароли. С помощью PC можно убрать защиту с подобного edit box-а, либо узнать его содержимое без изменения самого текстового элемента. PC позволяет также получить информацию (заголовок/содержание, дескриптор, имя класса) о других элементах управления и окнах.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2004 (Вт) 13:22

Approximator, таковые функции описаны не в SDK, а в DDK, которого у меня нет (а MSDN еще не имею), поэтому я могу и ошибаться, но думаю там используются такие типы и структуры данных, которые не получится использовать в VB.
Кроме того, скорее всего эти функции должны вызываться на более низком уровне, нежели уровень прикладных программ.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 20.07.2004 (Вт) 14:47

Шурик писал(а):А можно вместо SoftIce использовать проще утилитку например Password_Checker, вот описание:
Предназначен, главным образом, для изучения содержимого текстовых элементов управления (edit box-ов), в которых все буквы заменены одним символом. Такие элементы чаще всего содержат пароли. С помощью PC можно убрать защиту с подобного edit box-а, либо узнать его содержимое без изменения самого текстового элемента. PC позволяет также получить информацию (заголовок/содержание, дескриптор, имя класса) о других элементах управления и окнах.


Положи edit box в контейнер (frame) и посмотри что тебе покажет

Password_Checker :D :D :D :D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2004 (Вт) 15:49

codemaster, если прога умная и рекурсивная, она и из контейнера выковыряет :)
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 20.07.2004 (Вт) 16:35

alibek писал(а):codemaster, если прога умная и рекурсивная, она и из контейнера выковыряет :)


Ну ну

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 21.07.2004 (Ср) 7:29

alibek писал(а):Approximator, таковые функции описаны не в SDK, а в DDK, которого у меня нет (а MSDN еще не имею), поэтому я могу и ошибаться, но думаю там используются такие типы и структуры данных, которые не получится использовать в VB.

Подозреваю, что так быть не может (я вообще себе слабо представляю чтобы такое было возможным, ведь любую "структуру" можно эмулировать... это ж, по сути память, или сложноустроенный указатель на неё, сравни Variant в VB). VB их, кстати, юзает, только не всегда прямо.
Кроме того, скорее всего эти функции должны вызываться на более низком уровне, нежели уровень прикладных программ.

Тоже не верю... точнее не понимаю, что такое вызов на низком уровне. Передать управление (Push Var1, Push Var2, ..., Call Address) не достаточно?

Ладно, я думал, что вы мне расскажете хотя бы, как достукиваться до конкретного адреса памяти чужого процесса... а вы, а вы :) ... :) а вы не хотите.
С уважением, Approximator.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.07.2004 (Ср) 9:20

codemaster, уф, ты меня даже напугал :) Вот, полез проверять.
Изображение

P.S. Что-то с Народа картинки не кажет... Ну тогда глянь сюда
Вторая стрелка - hWnd, на который указывает мышка, первая стрелка - информация об окне.

Approximator, приложения исполняются в RING 5 (прикладные приложения), драйвера в RING 0 (драйверы, система), у них разные возможности.
Lasciate ogni speranza, voi ch'entrate.

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 21.07.2004 (Ср) 10:12

Я так и не понял проблема решилась или нет. Я как-то тоже столкнулся с такой проблемой - надо было пройти игрушку (простую типа компьютерщик, там надо типа взломать банк :D подбором кода при чем правильная комбинация заранее известна, надо только решить головоломку)
Так вот я решил сделать программульку, которая бы вставляла бы нужные цыфры в нужные места, а тут эти лэйблы :shock: и так как хендла нет решил, что это несовсем реально, тем более, если представить что лэйбл, по своей сути (когда компилируется) может ведь работать как принт (Me.Print "Хрен ты меня изменишь") :D и таким образом, вообще не представлять из себя объект.
Хотя у меня такой вопрос давно был, не помню, может WinSpy какой-нить и видит все-таки Label как объект, ну или как окно (кому как нравится).

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 24.07.2004 (Сб) 6:18

Вот, кое-что накопал по теме (в частности по своему вопросу)

Код: Выделить всё
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long


Цитата из описания:
Код: Выделить всё
The ReadProcessMemory function reads data from an area of memory in a specified process. The entire area to be read must be accessible, or the operation fails.

The WriteProcessMemory function writes data to an area of memory in a specified process. The entire area to be written to must be accessible, or the operation fails.


Дело за "малым" - добыть соответствующие права доступа. Реально?

P.S.
MOV писал(а):Я так и не понял проблема решилась или нет. Я как-то тоже столкнулся с такой проблемой - надо было пройти игрушку (простую типа компьютерщик, там надо типа взломать банк :D подбором кода при чем правильная комбинация заранее известна, надо только решить головоломку)
Так вот я решил сделать программульку, которая бы вставляла бы нужные цыфры в нужные места, а тут эти лэйблы :shock: и так как хендла нет решил, что это несовсем реально, тем более, если представить что лэйбл, по своей сути (когда компилируется) может ведь работать как принт (Me.Print "Хрен ты меня изменишь") :D и таким образом, вообще не представлять из себя объект.
Хотя у меня такой вопрос давно был, не помню, может WinSpy какой-нить и видит все-таки Label как объект, ну или как окно (кому как нравится).

Imo, нужно искать место, где в памяти процесса прописано значение строки... а оно обязательно где-нить прописано... как нашёл переписывай... чем читать/писать см. API-функции выше.
С уважением, Approximator.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 25.07.2004 (Вс) 4:49

Кстати, если кому интересно, то получить "права на процесс" можно с помощью:

Код: Выделить всё
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pId)


И ещё, насчёт того, чтобы осуществить дебаг чего-либо средствами VB можно воспользоваться:
Код: Выделить всё
Debugging
A debugger is an application that enables a developer to observe and correct programming errors. This overview describes the debugging support provided by the Win32 API.
Debugging Functions
The following functions are used with debugging.

 

ContinueDebugEvent 
DebugActiveProcess 
DebugBreak 
FatalExit 
FlushInstructionCache 
GetThreadContext 
GetThreadSelectorEntry 
IsDebuggerPresent   
OutputDebugString 
ReadProcessMemory 
ReadProcessMemoryVlm 
SetDebugErrorLevel 
SetThreadContext 
WaitForDebugEvent 
WriteProcessMemory   
WriteProcessMemoryVlm


Hooks
A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure.

This overview describes hooks and explains how to use them in a Win32-based application.

Hook Functions
The following functions are used with hooks.

 

CallMsgFilter 
CallNextHookEx 
CallWndProc 
CallWndRetProc 
CBTProc 
DebugProc 
ForegroundIdleProc 
GetMsgProc 
JournalPlaybackProc 
JournalRecordProc 
KeyboardProc 
LowLevelKeyboardProc 
LowLevelMouseProc 
MessageProc 
MouseProc 
SetWindowsHookEx 
ShellProc 
SysMsgProc 
UnhookWindowsHookEx   



С уважением, Approximator.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 29.07.2004 (Чт) 11:13

>приложения исполняются в RING 5
Приложения выполняются в Ring 3. А RING 5 IMHO вообще не бывает.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 29.07.2004 (Чт) 11:28

2Codemaster:
Сначала про контейнеры вобще ничего небыло написано, брали все начисто.... так что она показывает то, что хотели.... :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.07.2004 (Чт) 12:18

BP писал(а):Приложения выполняются в Ring 3. А RING 5 IMHO вообще не бывает.

Ну... может быть. Точно не помню.
Lasciate ogni speranza, voi ch'entrate.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 29.07.2004 (Чт) 20:54

Процессоры Intel имеют 4 уровня привелегий, но Микрософт использует только два: 0 и 3.
Вроде для совместимости с какой то там платформой. Какой не помню.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 30.07.2004 (Пт) 7:54

BP писал(а):Процессоры Intel имеют 4 уровня привелегий, но Микрософт использует только два: 0 и 3.
Вроде для совместимости с какой то там платформой. Какой не помню.

Это связано с типом адресации во Flat-памяти. Дело в том, что есть такая штука, как Fix Up's Table, эта ифа используется для размещения проги, если в её адресном пространстве она не ложится ровно... вот здесь и работают "привилегии"...
С уважением, Approximator.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 30.07.2004 (Пт) 15:02

Approximator писал(а):Это связано с типом адресации во Flat-памяти. Дело в том, что есть такая штука, как Fix Up's Table, эта ифа используется для размещения проги, если в её адресном пространстве она не ложится ровно... вот здесь и работают "привилегии"...


Я думаю это можно проделать и с четырмя уровнями привилегий. Главное чтобы процессор был в защищённом режиме.
А про совместимость я читал что Микрософт хотела сделать свои ОС совместимыми с процессорами, поддерживающими только 2 уровня привилегий.
Вот именно названия этих процессоров я и не помню.

BP
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 17.02.2004 (Вт) 5:34
Откуда: Украина

Сообщение BP » 02.08.2004 (Пн) 16:38

Вот что у Зубкова по этому поводу:
Защита может действовать как на уровне сегментов, так и на уровне страниц, ограничивая доступ в зависимости от уровня привилегий (4 уровня привилегий для сегментов и два для страниц).

Надеюсь я правильно понял.
Если используется не сегментная, а плоская модель памяти, то сегментыные привилегии не работают. Остаются только страничные.

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Сообщение Approximator » 06.08.2004 (Пт) 3:07

BP писал(а):Вот что у Зубкова по этому поводу:
Защита может действовать как на уровне сегментов, так и на уровне страниц, ограничивая доступ в зависимости от уровня привилегий (4 уровня привилегий для сегментов и два для страниц).

Надеюсь я правильно понял.
Если используется не сегментная, а плоская модель памяти, то сегментыные привилегии не работают. Остаются только страничные.

Ну, :) это разве защита :) Дело в том, что всякая "прога" (или сегмент оной) сначала откуда-нибудь загружается в память и вот ведь в чём вся штука :) прямо перед кодом сегмента идёт его заголовок, где прописываются флаги доступа разрешающие/запрещающие чтение/изменение в адресное пространство, как кода сегмента, так и его данных... :) при желании в Wind'е получить "доступ" к любой проге и любому сегменту её кода (и, разумеется, её данным) - нет никаких проблем.
С уважением, Approximator.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 74

    TopList