Speed hack и им подобные

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

Сообщение Gotha » 28.04.2006 (Пт) 19:09

а в callback'e CreateTimer'a можно что-то изменить? или тоже как-то перехватить? то есть системный таймер вещь незыблемая? как же тогда работает сия штука (см. приложение)?
Вложения
speed_hack.rar
(33.01 Кб) Скачиваний: 37
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 28.04.2006 (Пт) 20:06

Щас отладчиком покопаюсь в проге, что таймер юзает... Вообще, по моему надо просто задисейблить таймер и слать что-то через SendMessage
Последний раз редактировалось keks-n 29.04.2006 (Сб) 13:21, всего редактировалось 1 раз.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 28.04.2006 (Пт) 20:12

Короче...
SetTimer proto hWnd:DWORD, TimerID:DWORD, uElapse:DWORD, lpTimerFunc:DWORD
Его и надо перехватывать. меняем uElapse на свой(придётся запрашивать у основной проги), и таймер тикает как надо :)
Изображение

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 28.04.2006 (Пт) 20:31

keks-n
я понимаю что это уже верх наглости, но не мог бы помочь в асме в ту библиотечку добавить? :oops:
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 28.04.2006 (Пт) 20:50

Не сегодня...
Изображение

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 28.04.2006 (Пт) 20:55

ок, с нетерпением жду :P
чуствую пользователи будут довольны новой примочкой) включу твой ник в список разработчиков)
кстати ее уже юзает человек 200 как минимум
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 28.04.2006 (Пт) 22:35

Догадка оказалась верной =)
Только хук надо ставить ДО старта таймера. В целом всё, как в прошлый раз, но SetTime задаёт интервал таймера.
Вложения
sthook.rar
(1.06 Кб) Скачиваний: 14
Изображение

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 29.04.2006 (Сб) 5:45

о, великий гуру keks-n, поделись исходником библы с нами нубами :oops: :P
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 29.04.2006 (Сб) 7:12

keks-n, трабла... не меняется "тик" у таймера...
вот код клиентской проги:
Код: Выделить всё
Option Explicit
Dim i%

Private Sub Command1_Click()
    Timer1.Enabled = True
    Timer1.Interval = 800
End Sub

Private Sub Form_Load()
    Caption = App.ThreadID
End Sub

Private Sub Timer1_Timer()
    Caption = Timer1.Interval
    i = i + 1
    If i >= 30 Then i = 0
    Command1.Caption = i
End Sub


а вот код перехватчика:
Код: Выделить всё
Option Explicit

Private Declare Function SetGlobalHook Lib "sthook.dll" (ByVal Reason As Long, ByVal PID As Long) As Long
Private Declare Sub SetTime Lib "sthook.dll" (li As Long)
Dim PID As Long

Private Sub Command1_Click()
    SetGlobalHook True, Text1.Text      'Ставим хук
End Sub

Private Sub Form_Load()
    Slider1.Value = 1800
    Slider1.Max = 5000
    Slider1.TickFrequency = 100
    Slider1.LargeChange = 100
End Sub

Private Sub Form_Unload(Cancel As Integer)
    SetGlobalHook False, 0 'Снять хук
End Sub

Private Sub Slider1_Scroll()
    SetTime CLng(Slider1.Value) 'Ставим возвр. значение. Можно поменять в ЛЮБОЙ момент.
End Sub


что я тут не так сделал? (юзал последнюю библиотечку с перехватом SetTime)
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 29.04.2006 (Сб) 12:49

Придётся добавлять в твой макрос лоадер... Стартовать процесс самому через CreateProcess, причём с флагом CREATE_SUSPENDED, дабы получив его PID подрубить библу(на самом деле подрубится она с первым окном, но PID процесса жертвы надо задать ДО этого, чтобы перехватчик успел отловить СОЗДАНИЕ таймера), и только потом запускать на выполнение первую нить. Таким образом можно добиться некоторых гарантий, что интервал таймера будет изменён.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 29.04.2006 (Сб) 12:51

Gotha
:lol: Не App.ThreadID, а API'шка GetCurrentProcessID(или посмотреть PID в диспетчере задач). Тогда в данном случаее лоадер наверное не нужен.

И ещё... Ты наверное не понял: таймер будет работать с однажды заданным интервалом, все вызовы SetTime после включения будут ему по барабану. Хотя есть одна идея :) : поставить интервал в ноль(неработающий таймер) и самостоятельно слать WM_TIMER(). Или ещё лучше: поставить его в ноль, в своём процессе этой функцией создать таймер, но поставить hWnd отключённого. Тогда и карты в руки. Но это требует механизма IPC, передающего ID таймера, hWnd, заданный интервал, надо ловить функцию KillTimer, дабы её продублировать.
Изображение

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 29.04.2006 (Сб) 14:17

Можно по-рассуждаю?

По идее все таймеры основаны на многозадачности ОС, незнаю как в защищенном режиме, в реальном режиме многозадачность основана на 8 прерывании. ~18,2 раз в секунду процессор выполняет 8 прерывание, при этом он сохраняет значение всех регистров и флагов в стек, а после того как выполнит восстанавливает из стека. Собственно ОС ставит свой обработчик этого прерывания....и подменяет значсение регистров, IP в основном.
собственно таймер в Досе можно реализовать только в секундном масштабе...или ~54 раза в секунду...естественно прийдётся напрягать сопроцессор......надеюсь идею уловили.... :) Можно и по другому реализовать, с использованием ресурсов материнки, там вроде есть схема, которая пускает импульс с частотой 19Мгц....собственно можно считать импульсы, зная частоту......

(мне кажется в Protected Mode реализация таймера основана на подсчёте тактов)

Гуру защишённого режима просветите, как реализовывается таймер?
Лучше думать чем жевать.

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 29.04.2006 (Сб) 17:35

спасибо за обьяснения, но вот мысль - что если стопить таймер (в 0) и снова запускать его со своими параметрами?
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 29.04.2006 (Сб) 20:06

Я писал(а):Или ещё лучше: поставить его в ноль, в своём процессе этой функцией создать таймер, но поставить hWnd отключённого. Тогда и карты в руки. Но это требует механизма IPC, передающего ID таймера, hWnd, заданный интервал, надо ловить функцию KillTimer, дабы её продублировать.

А вообще посылай WM_TIMER
Изображение

Пред.

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

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

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

    TopList