Обратно Ху..ки

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

Обратно Ху..ки

Сообщение Lunatic » 13.03.2008 (Чт) 12:24

Пытался разобратся с хуками. Глобального мне не нужно. А вот на определенное окно, не помешало бы. Взял пример из APIGuide. Там где хук ставится на Form1. Немного модефицировал, но самое обидное, что если хукать родную форму, то всё нормально работает. А если чужую, то ничего не получается. В чем проблема. Подскажите.
Как только на окне жертвы возникает событие KEYBOARD, вылетает ошибка "Память не может быть read"

Код: Выделить всё
Private Sub GetOpt(wWnd As Long)
'получить HInstance и ThreadId зная hwnd окна
Dim Ti As Long
Dim Hi As Long
Hi = GetWindowLong(wWnd, GWL_HINSTANCE)
Ti = GetWindowThreadProcessId(wWnd, 0&)
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, Hi, Ti)
End Sub


Код: Выделить всё
'In a module
Public Const WH_KEYBOARD = 2
Public Const VK_SHIFT = &H10
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public hHook As Long
Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    'if idHook is less than zero, no further processing is required
    If idHook < 0 Then
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    Else
        'check if SHIFT-S is pressed
        If (GetKeyState(VK_SHIFT) And &HF0000000) And wParam = Asc("S") Then
            'show the result
            Form1.Print "Shift-S pressed ..."
        End If
        'call the next hook
        KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
    End If
End Function

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 13.03.2008 (Чт) 13:16

Если хукаешь чужое окно -- надо внедрять библиотеку с каллбэком в процесс, владеющий этим окном. Вообще, посмотри тут: http://bbs.vbstreets.ru/viewtopic.php?t=10245
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Сообщение Lunatic » 13.03.2008 (Чт) 14:17

Ыыыыы! Мозк закипает. Ладно примерчик скачал. Попробую еще завтра разобратся самостоятельно. Хотя я в панике

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Сообщение Lunatic » 13.03.2008 (Чт) 16:04

Как эту библиотеку внедрить в другой процесс?

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 13.03.2008 (Чт) 16:55

Загляни сюда может чемто тебе поможет.
http://bbs.vbstreets.ru/viewtopic.php?t=18000

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Сообщение Lunatic » 14.03.2008 (Пт) 1:38

Приаттачил библиотеку к процессу, всё красиво и работоспособно. Запускается, работает, выгружется при закрытие родительного процесса. С этим разобрался. Но вот ставлю хук, и обратно ошибка записи в память=(, а ведь недолжно, я ж внутри системы так сказать=)
Вложения
Code.rar
(15.84 Кб) Скачиваний: 59

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Сообщение Lunatic » 15.03.2008 (Сб) 20:29

Натолкнулся на один момент. Может это у мну что-то с компом. Что ошибка вылетает. Люди попробуйте может это только у мну ошибку выкидывает, а на самом деле всё работает.



Вот сегодня решил узнать серийник биоса таже ошибка
Код: Выделить всё
Type BIOS_DATE
    s As String * 8
End Type
Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)

Public Function BIOS() As Long
    Dim sDB As BIOS_DATE
   
    CopyMemory sDB, ByVal &HFFFF5, 8&
    BIOS = DateSerial(Mid(sDB.s, 7, 2), Mid(sDB.s, 1, 2), Mid(sDB.s, 4, 2))
End Function

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.03.2008 (Сб) 23:08

Ну и что это за бред? С чего бы по адресу &HFFFF5 взялось что-то хоть каким-либо образом относящееся к BIOS?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lunatic
Обычный пользователь
Обычный пользователь
 
Сообщения: 98
Зарегистрирован: 04.03.2008 (Вт) 17:33

Сообщение Lunatic » 16.03.2008 (Вс) 1:27

Я тоже сам не понял, просто нашел этот пример на одном сайте. Но так как он у меня так и незапустился, я ничего и непонял. Сразу извеняюсь за глупые вопросы


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

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

Сейчас этот форум просматривают: The trick и гости: 27

    TopList  
cron